首页 > 解决方案 > 在两个寄存器中添加 8 位数字(8 位也是如此,16 位不允许使用)

问题描述

我正在做一个作业,我需要添加 x 个 8 位,结果必须存储在两个寄存器中(以防溢出)。如何在两个寄存器中设置结果?(我使用内存填充数据)

对不起,我是组装新手,欢迎任何指导。

到目前为止,我已经添加了数字,但结果存储在一个寄存器中。

org 100
Mov al,[0x0300]
Mov ah,[0x0301]
xor dh,dh
add dh,al
add dh,ah

我希望结果存储在两个寄存器中而不是一个(因此可以存储 8 位以上的结果)。

标签: assemblyemu8086

解决方案


org 100
Mov al,[0x0300]
Mov ah,[0x0301]
xor dh,dh
add dh,al
add dh,ah

您需要处理因添加 2 个字节大小的值而产生的进位:

首先清除将保存结果的 2 个寄存器

xor al, al
xor ah, ah

然后添加您需要处理的所有值:

add al, [0x0300]
adc ah, 0

add al, [0x0301]
adc ah, 0

ADC处理传播的进位的是(Add with Carry) 指令!

您可以使用以下代码避免单独的清除步骤:

mov al, [0x0300]
xor ah, ah

add al, [0x0301]
adc ah, 0

推荐阅读