Dan Dinu
Dan Dinu

Reputation: 33388

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

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.

Upvotes: 0

Views: 3792

Answers (1)

Jonathon Reinhart
Jonathon Reinhart

Reputation: 137398

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!

Upvotes: 1

Related Questions