сложение двух 8-битных чисел в 8086, дающее неправильный ответ - PullRequest
0 голосов
/ 03 февраля 2019

Я сделал эту программу 8086 masm, чтобы добавить два 8-битных числа 54h и 13h, которые, как предполагается, дают 67h в качестве ответа, но дают 07 в качестве ответа.может кто-нибудь сказать мне, что не так с моим кодом?

Это мой код

; addition of two 8bit numbers

data segment
num1 db 54h
num2 db 13h
data ends

code segment
assume cs:code, ds:data 

start:
mov ax,data
mov ds,ax


mov al,num1
mov bl,num2
add al,bl

mov ah,00h
aaa

mov dl,ah
mov dh,al

add dl,30h
mov ah,02h
int 21h

mov dl,dh
add dl,30h
mov ah,02h
int 21h

mov ah,4ch
int 21h

code ends
end start

1 Ответ

0 голосов
/ 03 февраля 2019

67h - 103d.Десятичное число имеет три цифры.Вы не можете конвертировать это шестнадцатеричное число в распакованный номер bcd (два байта) ни при каких обстоятельствах.Но, возможно, вы хотели обработать 67h как упакованный номер BCD.Нет инструкции x86 для преобразования упакованного номера bcd в неупакованный номер bcd, вы должны самостоятельно выделить клев.

Изменить

mov ah,00h
aaa

mov dl,ah
mov dh,al

на

mov dl,al
mov dh,al
shr dl, 4
and dh, 0Fh
...