Assembly 如何在汇编中进行乘法?
我要为一个如此琐碎的问题而烦恼 我需要在一个语句中用2乘3,4乘5,并将其存储在bl寄存器中。到目前为止,我的代码是:Assembly 如何在汇编中进行乘法?,assembly,masm,irvine32,Assembly,Masm,Irvine32,我要为一个如此琐碎的问题而烦恼 我需要在一个语句中用2乘3,4乘5,并将其存储在bl寄存器中。到目前为止,我的代码是: TITLE PA2.asm INCLUDE Irvine32.inc .386 .model flat, stdcall .stack 4096 ExitProcess PROTO, dwExitCode : DWORD .data product BYTE ? .code main PROC product = 2*3*4*5 mov bl, prod
TITLE PA2.asm
INCLUDE Irvine32.inc
.386
.model flat, stdcall
.stack 4096
ExitProcess PROTO, dwExitCode : DWORD
.data
product BYTE ?
.code
main PROC
product = 2*3*4*5
mov bl, product
exit
main ENDP
END main
我得到的错误是
错误A2005:符号重新定义:产品可以为您乘法 试试这个
Mov BL, (2*3*4*5)
这是因为您已经定义了两次“product”:一次是包含字节的内存位置的名称,另一次是(oops)与特定的“编译时”值的“等同”。这种双重定义是不允许的,但这与是否或如何要求汇编程序完成乘法无关 汇编程序可以通过两种不同的方式实现“乘法”:
- 在汇编时(更一般地说,在运行汇编程序时),但仅使用汇编时已知的常量值
- 执行汇编程序时,使用任意运行时值
...
main PROC
product2 = 2*3*4*5
mov bl, product2
exit
main ENDP
这将停止双重定义投诉。或者,您可以简单地删除包含字节声明的行;它在这个程序中没有任何用处
然而,我怀疑这不是你真正想做的。我猜您是一名学生,有人希望您编写一个在运行时倍增的程序
在这种情况下,您需要使用乘法指令而不是equale指令
您可以通过编写以下内容来实现这一点:
mul <constant>
mul
它在运行时将EAX乘以在汇编时定义的常量值。MUL指令还有其他变体,可以乘以其他寄存器或内存位置的运行时值;作为一名学生,你应该查一下这个来了解你的选择。这个简短的讨论可能会帮助您理解为什么使用:。如果你想了解CPU真正能做什么的有用细节,你应该阅读英特尔参考手册;既然你提到了“Irvine.32.inc”(我的母校),我想但不知道有没有与Irvine.32和相关课程相关的文档,你应该更清楚。欢迎来到studentville,你选择的职业生涯的其他部分可能会是什么感觉(“不知道主题?去找出答案”)
既然这似乎是家庭作业,我就给你们留下上面的提示。您需要更多的说明(不是很多)来设置EAX,使其具有要乘以的值,并将答案移动到BL。Um。。mov bl,120有什么问题?这是家庭作业问题吗?如果是这样的话,我真的不明白这个练习的意义是什么。从技术上讲,这不会成倍增加(运行时)。@Pyromaster你是对的。我想他可能面临一个棘手的问题。