0

我正在尝试从键盘读取两个数字并在它们相等时显示一条消息。

我认为我没有做正确的事情来显示消息。我得到了一些编译错误(我把它们写成内联注释)

 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

你能告诉我我做错了什么吗?

谢谢。

4

1 回答 1

1

First of all, I'm assuming this is going to be running under DOS? Otherwise int 21h isn't going to work.

Assuming DOS, I think the following should work (untested):

    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!
于 2013-01-12T18:14:15.073 回答