汇编输入和输出比较问题

来源:百度知道 编辑:UC知道 时间:2024/05/07 03:29:51
怎么得不到结果,望高人指点.
;#mode=dos
;输入一个数字,如果是0就输出ok
stsg segment stack 'stk'
dw 32 dup('s')
stsg ends

data segment
buf db 2,?,2 dup(?)
ok db'ok','$'
data ends
code segment
main proc far
assume cs:code ,ds:data,ss:stsg
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax

mov ah,0ah
lea dx,buf
int 21h

lea di,buf+2
mov dx,[di]
cmp dx,0
je print
jne over
print:
lea dx,ok
mov ah,09h
int 21h
over:
mov ah,1
int 21h
mov ah,4ch
int 21h

main endp
code ends
end main

stsg segment stack 'stk'
dw 32 dup('s')
stsg ends

data segment
buf db 2,?,2 dup(?)
ok db'ok','$'
data ends
code segment
main proc far
assume cs:code ,ds:data,ss:stsg
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax

mov ah,0ah
lea dx,buf
int 21h

lea di,buf+2
mov dx,[di] ;dx是16位的;di里面的数是8位的;你把它给dx,dx的高8位不是为0,与0做比较,永远不相等 改为:mov dl,[di],sub dl,30h 还有就是你输入的是ASICC码,还应该把它转换成字符 在做比较
cmp dx,0
je print
jne over
print:
lea dx,ok
mov ah,09h
int 21h
over:
mov ah,1
int 21h
mov ah,4ch
int 21h

main endp
code ends
end main