繁体   English   中英

如何用汇编语言添加两个十六进制数?

[英]How to add two hexadecimal number in assembly language?

我正在尝试用汇编语言添加两个十六进制数。一个是0fh(十进制15)另一个是0eh(十进制14)。我得到的总和= 00011101是十进制29的二进制。但是我的预期结果是00101001(其中0010是2的二进制值,1001是9的二进制值。这是我的代码:

name "add-sub"

org 100h

mov al, 0fh       ; hex=0fh=dec15  
mov bl, 0eh      ; hex=0eh=dec14

add bl,al

mov cx, 8
print: mov ah, 2   ; print function. interupt er subfunction
       mov dl, '0'
       test bl, 10000000b  ; test first bit.
       jz zero
       mov dl, '1'
zero:  int 21h; find interupt  subfunction
       shl bl, 1
loop print

; print hexa suffix:
mov dl, 'h'
int 21h

; wait for any key press:
mov ah, 0
int 16h

ret

您希望将结果作为打包的BCD编号获得,但这不是CPU的正常工作方式。 因此,您必须转换结果。 在您的情况下,您可以使用AAM来做到这一点:

更换

add bl,al

通过

add al,bl         ; Result in AL
aam               ; AL => AH (first digit) AL (second digit) (unpacked BCD)
shl ah, 4         ; Prepare AH for ORing
or al, ah         ; AL to packed BCD
mov bl, al        ; Copy to BL for following loop

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM