检查两个数字是否相等,并在装配中在屏幕上显示文本消息

时间:2013-01-12 16:27:58

标签: assembly x86

我正在尝试从键盘上读取两个数字,如果相等则会显示一条消息。

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

 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

你能告诉我我做错了吗?

感谢。

1 个答案:

答案 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!