汇编语言程序求逐行解释!!!!!!!!!!!

如题所述


data segment
  x db ?             ;4个1字节变量,x,y,z,sum
  y db ?
  z db ?
  sum db ?
 data ends

 stack segment
   db 100H dup(?)   ;定义堆栈长度
 stack ends

 code segment
   assume cs:code, ds:data, ss:stack
 start:
    mov ax,data
    mov ds,ax

    mov ah,1            ; 21H中断的1号子功能,
    int 21h                ;读取一个字符到al寄存器中
    and ax,000Fh    ; 把ASCII表示的数字,转换成实际的值,如 字符'3', ASCII值为33H, and 0FH之后,变成03H,即实际值3
    mov x, al             ;把读入的数存储到x变量中

NEXT1:
    mov ah,1           ; 同前,读取一个字符
    int 21h               ;
    cmp al, '+'          ;判断是不是+号,不是的话,
    jnz next1            ;则读取下一个字符,直到读取'+'为止
    and ax,000FH  ;同上面解释,ASCII变成对应的数值
    mov y, al            ;保存到y变量中
next2:
    mov ah,1           ;同Next1解释
    int 21h
    cmp al,'+'
    jnz next2
    and ax,000Fh
    mov z, al            ;保存到z变量中

    mov al,X             ;计算x+y+z
    add al, Y
    add al, z
    mov sum,al       ;计算结果保存到sum变量中
    push ax              ;ax进栈,为后续处理做准备,注意,al中是计算结果 ah=0(因为前面and ax, 000Fh,将ah置0了)

next4:
    mov ah,1            ;同前,读取字符
    int 21h
    cmp al,'='           ;直到读取到=为止
    jnz next4
    pop ax                ; ax出栈,al是要输出的字符
    add al,30h         ; 数值转换为ASCII码值表示的字符数字
    mov dl,al            ; 要输出的字符放在dl中,(21h中断调用要求的)
    mov ah,2   ;2号子功能,输出dl中的字符到屏幕上
    int 21h                ;调用21h中断

    mov ah,4ch       ;退出到
    int 21h                ;操作系统调用的中断
code ends
    end start
最终计算的是形如:323+1124+214343=这样的算式,
计算的是各加数(被加数)的第1个数字,即:3+1+2=6       (上式)
计算结果放在sum中,最终输出到屏幕上。另外,本程序,如果计算结果>=10,则输出不正确。

温馨提示:答案为网友推荐,仅供参考
相似回答