繁体   English   中英

"汇编两位数减法"

[英]Assembly two digit number subtraction

我有一个大学项目,我需要添加或减去两个 2 位数字(用户输入数字)。 我得到了工作的补充。 减法使十位数正确,但在个位数位置给出奇数字符。 这就是我的意思(结果图片):

链接到 Flickr 屏幕截图<\/a>

我用:

;subtract
sub bx,cx
aas
or bx,3030h

AAS指令表示减法后调整Al。 它调整AL ,而不是BX 要使用BX ,您可以使用以下代码:

sub bx, cx
xchg bx, ax
    mov bl, 0x0A
    div bl
    or ax, 0x3030
xchg ah, al
xchg ax, bx
add bx,cx aaa<\/code><\/pre><\/blockquote>

在此添加之后,使用aaa<\/code><\/a>指令是没有意义的,因为该指令专门对AX<\/code>寄存器进行操作。

在这个减法之后,使用aas<\/code><\/a>指令是没有意义的,因为它只对AX<\/code>寄存器进行操作。

使用aaa<\/code><\/h2>

该程序将添加几个从键盘输入的 2 位数字。 每个数字都存储在其自己的字节大小的寄存器中。 第一个数字是BH<\/code> (十)和BL<\/code> (个)。 第二个数字是CH<\/code> (十位)和CL<\/code> (个位)。

级联添加的第一步是添加“一”。 如果此加法的结果超出范围 [0,9],我们将不得不调整该值并将进位 1 传播到下一步。 aaa<\/code>指令执行此调整。

级联加法的第二步是添加上一步的“十”和<\/strong>进位。 因此我们将使用adc<\/code>而不是add<\/code> 。 如果此加法的结果超出范围 [0,9],我们将不得不调整该值并将进位 1 传播到下一步。

第三步将显示“1”,但前提是前一步有进位。 这表明加法的结果大于 99。最大和为 198。

使用aas<\/code><\/h2>

该程序将减去从键盘输入的几个 2 位数字。 每个数字都存储在其自己的字节大小的寄存器中。 第一个数字是BH<\/code> (十)和BL<\/code> (个)。 第二个数字是CH<\/code> (十位)和CL<\/code> (个位)。

级联减法的第一步是减去“一”。 如果此减法的结果超出范围 [0,9],我们将不得不调整值并将借位 1 传播到下一步。 aas<\/code>指令执行此调整。

级联减法的第二步是从上一步中减去“十”和<\/strong>借位。 因此我们将使用sbb<\/code>而不是sub<\/code> 。 此减法的结果将在 [0,9] 范围内,因为最大差值为 99。

该程序的 .COM 版本 (FASM):

该程序在 DOSBox 中进行了测试并且运行良好。

"

暂无
暂无

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

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