我正在尝试从键盘上读取两个数字,如果相等则会显示一条消息。
我认为我没有做正确的事情来显示消息。我得到了一些编译错误(我把它们写成内联注释)
title Program1
data segment
mesajEgale db "equal$"
mesajInegale db "inequal$"
data ends
cod segment
assume cs:cod,ds:data
start :
read:
mov ah,01h
int 21h //read number
mov bl,al //move first number in bl
int 21h //read second nubmer
cmp al,bl //compare if the two numbers are equal
jnz unequal
equal:
mov ax,data
mov ds,ax
mov ds,mesajEgale // error here :Argument to operation or isntruction has illegal size
mov dx,offset mesajEgale
mov ah,09h
int 21h,4c00h
int 21h
//need to jump to end here
unequal:
mov ax,data
mov ds,ax
mov ds,mesajInegale
mov dx,offset mesajInegale
mov ah,09h
int 21h,4c00h
int 21h
cod ends
end start
你能告诉我我做错了吗?
感谢。
答案 0 :(得分:1)
首先,我假设这将在DOS下运行?否则int 21h
无效。
假设DOS,我认为以下内容应该有效(未经测试):
mov ax, data ; Set segment registers right away, and leave them.
mov ds, ax
read:
mov ah, 01h
int 21h ; Read char from stdin to AL.
mov bl, al
mov ah, 01h ; I never assume the registers won't be corrupted upon return.
int 21h
cmp al, bl ; Are the read numbers equal?
jnz unequal
equal:
mov dx, offset mesajEgale
jmp print
unequal:
mov dx, offset mesajInegale
print:
mov ah,09h ; Write string at ds:dx to stdout
int 21h ; No need to duplicate this code!