8086中的两个8位数字相加给出错误的答案

时间:2019-02-03 11:37:43

标签: assembly masm x86-16 emu8086

我制作了这个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 :(得分:3)

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