V.Dum
V.Dum

Reputation: 33

Read two inputs with multi digits in assembler

I am learning Assembly using TASM, for University and I am a complete beginner.

I have an assessment in which I need to get two inputs (example: 12, 20) and decide which one is bigger. Currently I managed to read one multiple digit input and store it into BL but I don't know how to read another one.

How can I output which input is greater?

Thanks in advance!

My code:

.model small
.stack 100h
.data

num db 0

.code
start:
        mov ax, @data
        mov ds, ax 

        mov dl, 10  
        mov bl, 0         

scanNum:

        mov ah, 01h
        int 21h

        cmp al, 13   ; Check if user pressed ENTER KEY
        je  exit 

        mov ah, 0  
        sub al, 48   ; ASCII to DECIMAL

        mov cl, al
        mov al, bl   ; Store the previous value in AL

        mul dl       ; multiply the previous value with 10

        add al, cl   ; previous value + new value ( after previous value is multiplyed with 10 )
        mov bl, al

        jmp scanNum    

exit:

       mov ah, 04ch   
       int 21h

end start

Upvotes: 1

Views: 1193

Answers (1)

prl
prl

Reputation: 12455

Make scanNum into a function, by putting ret at the end. Then you can execute it twice. After the first call to scanNum, save the return value in a place that is not used by the scanNum function.

Once you have read both numbers, use cmp to compare them.

Something like this:

    call scanNum
    mov bh, bl
    call scanNum

    <compare bl and bh to choose which one to print>

exit:
    mov ah, 04ch   
    int 21h

scanNum:
    mov dl, 10  
    mov bl, 0         

scanNumLoop:
    <same as before, except jmp to scanNumExit when done>
    jmp scanNumLoop    

scanNumExit:
    ret

Upvotes: 3

Related Questions