I don’t know what went wrong. I want to input string in WORD size and add a integer to the inputted value of string and reprint the results. I’m not really sure in the arithmetic operations since this is my first time in using many operations in a single program and they are in 16 bits.
clr macro
mov ax, 03h
int 10h
endm
cseg segment para 'code'
assume cs:cseg; ds:cseg; ss:cseg; es:cseg
org 100h
start: jmp begin
amount_s label word
amount_max dw 3
amount_length dw ?
amount_field dw 3 dup (?)
x1 dw 0
x2 dw 0
sum1 dw 0
sum2 dw 0
bal dw 10
begin: clr
mov ah, 0Ah ;input string
lea dx, amount_s
mov cx, amount_length
lea si, amount_field
int 21h
mov ax, [si] ;copy si to ax
sub ax, 30h ;converts value of ax to integer
mov bx, 10 ;copy 10 to bx
mul bx ;multiply it ax by bx
mov x1, ax ; copy ax to x1
inc si ;move si pointer by 1
mov ax, [si] ;copy si to ax
sub ax, 30h ;converts value of ax to integer
mov x2, ax ; copy ax to x2
add ax, x1 ;add ax which is x2 by x1
add ax, bal ; add ax by bal which is 10
mov sum1, ax ;copy the result to sum1
mov dx, 0 ; copy 0 to dx
mov bx, 10 ; copy 10 to bx
div bx ;divides ax by bx
mov sum1, ax ; copy quotient to sum1
mov sum2, dx ; copy remainder to sum2
add sum1, 30h ;convert for printing
add sum2, 30h ;convert for printing
mov ah, 02h ;prints sum1
mov dx, sum1
int 21h
mov ah, 02h ;prints sum2
mov dx, sum2
int 21h
int 20h
cseg ends
end start
How about debugging and checking reference documentation to see what goes wrong and how? 🙂
One thing I can tell outright, the structure that the function 0ah of int 21h uses contains byte fields, not word fields.
And yet you declare them as words (
dw), not bytes (db):And you shouldn’t be accessing them as words as you do with:
Instead, read bytes:
And if you want to convert byte values into word values, just stick a 0 into the top byte of the word register like so:
The rest looks reasonable, but I have not run the code. You should do it. In a debugger, if it’s not working right.