Assembly 在两个寄存器中添加8位数字(同样为8位,不允许使用16位)

Assembly 在两个寄存器中添加8位数字(同样为8位,不允许使用16位),assembly,emu8086,Assembly,Emu8086,我正在做一个家庭作业,我需要添加x个8位数字,结果必须存储在两个寄存器中(以防溢出)。如何在两个寄存器中设置结果?(我使用内存填充数据) 对不起,我是装配新手,欢迎任何指导 到目前为止,我已经添加了数字,但结果存储在一个寄存器中 org 100 Mov al,[0x0300] Mov ah,[0x0301] xor dh,dh add dh,al add dh,ah 我希望结果存储在两个寄存器而不是一个寄存器中(这样可以存储8位以上的结果) 您需要注意由于添加2字节大小的值而产生的进位: 首先

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

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

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

org 100
Mov al,[0x0300]
Mov ah,[0x0301]
xor dh,dh
add dh,al
add dh,ah
我希望结果存储在两个寄存器而不是一个寄存器中(这样可以存储8位以上的结果)

您需要注意由于添加2字节大小的值而产生的进位:

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

xor al, al
xor ah, ah
然后添加需要处理的所有值:

add al, [0x0300]
adc ah, 0

add al, [0x0301]
adc ah, 0
处理传播进位的是
ADC
(带进位添加)指令

您可以通过以下方式避免上述代码中的单独清除步骤:

mov al, [0x0300]
xor ah, ah

add al, [0x0301]
adc ah, 0

当您进行添加时,除了目标寄存器之外,还会更改什么?您能用它来计算第二个结果寄存器的处理方法吗?如果加法溢出8位大小,第二个寄存器必须存储部分结果,例如,如果[0x0300]包含FF,[0x0301]也包含FF,al和ah是否会携带总结果?(比如改用ax?@PepoPapo,您将获得
AL=0xFE
AH=0x01
)。与
AX=0x01FE
相同。非常感谢!
mov al, [0x0300]
xor ah, ah

add al, [0x0301]
adc ah, 0