【发布时间】:2012-07-15 00:10:23
【问题描述】:
我有一个将 3 个数字相乘的程序,我正在努力理解。我有一些问题,我希望有人能解释这个程序发生了什么,并告诉我我是否走在正确的轨道上。我知道我有不止一个问题,所以我很抱歉。
.data?
num1 dd ?
num2 dd ?
num3 dd ?
.data
sum dd 0
prod dd 0
.code
start:
main proc
mov EAX, sval(input("Enter a number: "))
mov num1, EAX
mov EAX, sval(input("Enter a number: "))
mov num2, EAX
mov EAX, sval(input("Enter a number: "))
mov num3, EAX
mov EAX, num1
mov EBX, num2
mul BL
mov EBX, num3
mul BX
mov prod, EDX
这让我很困惑......
mov EBX, num3
mul BX
所以,我们将 num3 存储到 BL 中? 但由于 num1 和 num2 的结果是 16 位并存储到 AX 我们 mul BX?而不是BL?但是BL中不是num3吗?
对不起,没有一个具体的问题。如果我的逻辑不正确或接近,您能否逐条解释发生了什么以及为什么?
谢谢
【问题讨论】:
-
这段代码绝对不是“乘以 3 个数字”,它做了一些奇怪和令人困惑的事情。为什么不使用
IMUL? -
即使在最坏的情况下乘以 255,它也确实有效
-
所以实际上是“输入一个介于0和255之间的数字”?否则,它就无法正常工作。
-
如果您添加 0 - 255 之间的任何数字,它都可以工作。