Assembly 使用MASM在8086中添加两个8位数字
这是我使用MASM在8086中编写的代码。该代码用于两个8位数字的简单相加(无需担心进位)。我给下面的程序输入了两个数字:31h和16h。输出应该是47小时,但它给我的输出是'w'。如果我取一些不超过9的数字,代码工作正常,有人能在这里指出我的错误吗 代码:Assembly 使用MASM在8086中添加两个8位数字,assembly,masm,x86-16,microprocessors,emu8086,Assembly,Masm,X86 16,Microprocessors,Emu8086,这是我使用MASM在8086中编写的代码。该代码用于两个8位数字的简单相加(无需担心进位)。我给下面的程序输入了两个数字:31h和16h。输出应该是47小时,但它给我的输出是'w'。如果我取一些不超过9的数字,代码工作正常,有人能在这里指出我的错误吗 代码: 在添加所需的两个常数后,您可以添加al,30h,给您一个值77h。这是w的ASCII代码,然后将其打印为ASCII字符而不是数字。但如果我从代码中删除add al,30h,则不会打印输出。那么我如何打印输出?将结果字节转换为两个十六进制数字
在添加所需的两个常数后,您可以添加al,30h,给您一个值
77h
。这是w
的ASCII代码,然后将其打印为ASCII字符而不是数字。但如果我从代码中删除add al,30h
,则不会打印输出。那么我如何打印输出?将结果字节转换为两个十六进制数字。解包BCD算法可能会有所帮助,或者如果有一个库函数可以调用,那么就使用它。您试图做的是将'0'
的ASCII值添加到字节中。实际上,要将字节分成两个半字节,如果半字节小于10,则添加'0'
(30h
),如果半字节大于或等于10,则添加'A'-10
(37h
)。对两个半字节执行此操作,将获得'0'
-'9'
或'A'
-'F'
。但只需添加30h
仅适用于小于10的数字(Ah
)。请参阅中的多位数数字常见问题解答。它有一些指向整数->字符串示例的链接。
data segment
n1 db 31h
n2 db 16h
data ends
code segment
assume cs:code, ds:data
start:
mov ax,data
mov ds,ax
mov al,n1
mov bl,n2
add al,bl
add al,30h
mov dl,al
mov ah,02h
int 21h
mov ah,4ch
int 21h
code ends
end start