我制作了这个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
答案 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