[英]Assembly two digit number subtraction
我有一个大学项目,我需要添加或减去两个 2 位数字(用户输入数字)。 我得到了工作的补充。 减法使十位数正确,但在个位数位置给出奇数字符。 这就是我的意思(结果图片):
我用:
代码:
我对组装很陌生,所以任何建议都会很棒。
编辑<\/strong>
;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.