如何解决使用DEBUG的前5个数字的平方和-DOSBOX中的汇编编程
请帮助,我需要使用DEBUG-DOSBox中的汇编编程,将前5个数字的平方和。这是一个2 ^ 2的示例:
-a 100 </i>
15BC:0100 mov ax,1
15BC:0103 mov bx,2 ; Base Number
15BC:0106 mov cx,2 ; Exponent
15BC:0109 ;bucle 109:
15BC:0109 mov dx,0
15BC:010C mul bx
15BC:010E loop 109
15BC:0110 int 20
15BC:0112
-g 110
解决方法
指令mul bx
将ax
的内容(总是)与bx
寄存器(参数)的内容相乘。因为是16位寄存器,结果最多可以有32位。此结果的低16位放在ax
中,高16位放在dx
中。因此,您不必在dx
之前清除mul
。这仅对div
有用。
用于计算ax = 3²
的代码(通常为ax = bx
cx
)将是:
mov ax,1
mov bx,3 ; Base Number (that is multiplied by itself cx plus one times)
mov cx,2 ; Exponent (how often the multiplication should be repeated)
expLoop:
mul bx
loop expLoop
如果仅要计算平方,则不再需要循环,并且可以简化代码:
mov ax,3 ; Base Number (that is multiplied by itself one time)
mul ax
这将计算3²
(通常为ax²
)。请注意,这里不再使用bx
和cx
。
正如迈克尔已经提到的那样,如果要求平方和,就必须在这之后总结结果。原因cx
不再使用,它可以与loop
一起使用以迭代所有要平方的数字。 bx
可用于存储平方和:
xor bx,bx ; Sum is initialised to zero
mov cx,5 ; Iterate from 5 down to 1
iterate:
mov ax,cx
mul cx ; Calculate the square of the acutal number
add bx,ax ; Sum up the squares in bx
loop iterate
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。