Check if two numbers are equal and display a text message on screen in assembly

Tag: assembly , x86 Author: qqq00 Date: 2012-12-27

I'm trying to read two numbers from the keyboard and display a message if they are equal.

I think i'm not doing the right thing in order to display the messages. I get some compile erors (I wrote them as comments inline )

 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

Can you tell me what I'm doing wrong?

Thanks.

Best Answer

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!