有会汇编语言的高手给写下注释,谢谢了……

来源:百度知道 编辑:UC知道 时间:2024/05/05 04:51:34
可以的的话顺便写下这玩意怎么用……
stack segment stack
dw 256 dup(?)
stack ends

data1 segment
year db 5,?,6 dup(0)
org 10h
var dw 0
yes db "yes!",13,10,'$'
no db "no!",13,10,'$'
data1 ends

code1 segment
assume cs:code1,ds:data1
start:mov ax,data1
mov ds,ax

lea dx,year
mov ah,0ah
int 21h ;INPUT TO BUFFER

lea si,year+2
mov ch,0
mov cl,year+1 ;MAXSIZE MOVE TO CL,INITIALIZATION CX=4
up:
cmp cl,4
je jump4
cmp cl,3
je jump3
cmp cl,2
je jump2
cmp cl,1
mov al,[si]
sub al,30h
mov bh,1
mul bh
add var,ax
inc si
jmp jump

jump2:mov al,[si]
sub al,30h
mov bh,10
mul bh
add var,ax
inc si
jmp jump

jump3:mov al,[si]
sub al,30h
mov bh,100
mul bh
add var,ax
inc si

stack segment stack
dw 256 dup(?)
stack ends
;定义256个字单无的栈空间
data1 segment
year db 5,?,6 dup(0)
org 10h
var dw 0
yes db "yes!",13,10,'$'
no db "no!",13,10,'$'
data1 ends
;定义字符串
code1 segment
assume cs:code1,ds:data1
start:mov ax,data1
mov ds,ax
;加载数据段
lea dx,year
mov ah,0ah
int 21h
;从键盘输入4个字符(从键盘上读到的数是直接以该数的
;ASCII存进去的,而并非数字面)到缓冲区year里面
lea si,year+2; 把输入的字答的第二个字符的地址放到SI寄存器上
mov ch,0
mov cl,year+1 ;把要循环的次数放到CL里面,为下面的LOOP指令做准备
up:
cmp cl,4 ;输入的第一个字符跳到JUMP4上
je jump4
cmp cl,3 ;第二个字符跳到JUMP3去
je jump3
cmp cl,2 ;同上
je jump2
cmp cl,1 ;根据CL里面的值跟转到不同的地方运行,当为1里做以下
mov al,[si] ;把第二个字答放到AL里面
sub al,30h; 把输入的字符由ASCII转化为数字放到AL里面
mov bh,1
mul bh ;把AL乘以BH里面的1并放到AX里面
add var,ax;把AX里面的值加上VAR单元上的值并放到VAR单无上
inc si ;把SI的地址加1,即指向下一个输入字符的位置
jmp jump