.data
msg_title db "Multiply"
A DB 4
B DB 2
C0 DB 4
C33 DB 24
C4 DB 2
C1 DB 4
buffer db 128 dup(?)
format db "(24 - A*C/4)/(2+C/A + B)= %d"
.code
start:
MOV AL, A
IMUL C0
IDIV C1
SUB AL, C33
MOV AL,C33
CBW
IDIV A
MOV BL, C4
ADD BL, B
ADD AL, BL
MOV CL, AL
MOV AL, BL
CBW
IDIV CL
CBW
CWDE
invoke wsprintf, addr buffer, addr format, eax
invoke MessageBox, 0, addr buffer, addr msg_title, MB_OK
invoke ExitProcess, 0
end start
所以答案应该是2,但是无论我改变哪一行,它总是给出0作为答案
我想我在第二个括号中的加法部分有问题
- “移动铝,C33 *CBW *IDIV A * 移动底层,C4 * 添加底层,B * 添加铝,底层”
1条答案
按热度按时间3xiyfsfu1#
我看不出您的计算与格式字符串中的公式有什么关系。
由于
mov al,c33
覆盖AL,因此"第一个括号"中的计算是冗余的。此外,它以错误的方式进行减法。IDIV CL
可能是IDIV C1
的输入错误。我没有看到CL寄存器的任何设置,但如果您将10(在AX中)除以 * C1 * 中的值4,商将为2。修改后的代码现在使用CL执行有效的除法,但可能使用了相反的操作数。我不能判断这一点,因为我的第一个评论仍然有效!
CBW``IDIV BL
将除以10/4并产生2。完全重写计算
最后的结果是20/5产生4。