assembly - 在两个寄存器中添加 8 位数字(8 位也是如此,16 位不允许使用)
问题描述
我正在做一个作业,我需要添加 x 个 8 位,结果必须存储在两个寄存器中(以防溢出)。如何在两个寄存器中设置结果?(我使用内存填充数据)
对不起,我是组装新手,欢迎任何指导。
到目前为止,我已经添加了数字,但结果存储在一个寄存器中。
org 100
Mov al,[0x0300]
Mov ah,[0x0301]
xor dh,dh
add dh,al
add dh,ah
我希望结果存储在两个寄存器中而不是一个(因此可以存储 8 位以上的结果)。
解决方案
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
推荐阅读
- c++ - Fortran 库中的 C++ 可执行链接和 C++ 库中的主链接时出现链接器错误
- vb.net - 是否可以使用 System.Configuration 写入网络位置
- android - 在颤振摩尔数据库中保存双倍
- python - 使用相对导入语法导入错误
- docker - 授予仅在特定文件夹中安装 docker 卷的权限
- python - 以纳秒精度打印 Timedelta
- php - 使用某些属性时,Woocommerce 更改变体产品的价格
- sql - 试图找出这个问题的解决方案
- javascript - 事件侦听器未返回所有事件类型的对象属性
- linux - 使用 wget 时同时使用 -i 和 -O