when i sum two numbers like
(1111 1111 1111 1111)h + (1111 1111 1111 1111)h
it display the result is (2000 20000 2000 2000)h
where the true result is (2222 2222 2222 2222)h
;the code
.model small
.stack 100h
.data
num1 dw 1111h, 1111h, 1111h, 1111h ; ÇáÚÏÏ ÇáÃæá
num2 dw 1111h, 1111h, 1111h, 1111h ; ÇáÚÏÏ ÇáËÇäí
result dw 0, 0, 0, 0 ; äÊíÌÉ ÇáÌãÚ
msg db 'Result: $' ; ÑÓÇáÉ ÇáØÈÇÚÉ
.code
main:
mov ax, @data
mov ds, ax
mov es, ax
; ÊÍãíá ÇáÌÒÁ ÇáÃæá ãä ÇáÚÏÏ ÇáÃæá Ýí ÇáÓÌáÇÊ
mov ax, word ptr num1
mov bx, word ptr num1+2
mov cx, word ptr num1+4
mov dx, word ptr num1+6
; ÅÖÇÝÉ ÇáÌÒÁ ÇáÃæá ãä ÇáÚÏÏ ÇáËÇäí
add ax, word ptr num2
adc bx, word ptr num2+2
adc cx, word ptr num2+4
adc dx, word ptr num2+6
; ÊÎÒíä ÇáäÊíÌÉ
mov word ptr result, ax
mov word ptr result+2, bx
mov word ptr result+4, cx
mov word ptr result+6, dx
; ØÈÇÚÉ ÇáÑÓÇáÉ
lea dx, msg
mov ah, 09h
int 21h
; ØÈÇÚÉ ÇáäÊíÌÉ
mov ax, word ptr result+6
call print_hex
mov ax, word ptr result+4
call print_hex
mov ax, word ptr result+2
call print_hex
mov ax, word ptr result
call print_hex
; ÅäåÇÁ ÇáÈÑäÇãÌ
mov ah, 4Ch
int 21h
print_hex:
; ØÈÇÚÉ ÇáÞíãÉ Ýí AX ßÑÞã ÓÏÇÓí ÚÔÑí
push ax
push bx
push cx
push dx
mov bx, 4
mov cx, 4
print_loop:
rol ax, 4
mov dl, al
and dl, 0Fh
add dl, '0'
cmp dl, '9'
jle print_char
add dl, 7
print_char:
mov ah, 02h
int 21h
loop print_loop
pop dx
pop cx
pop bx
pop ax
ret
end main
ahis part ofaxso you destroy the value. Should have tested the printing without the addition first and/or use a debugger.