Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何在汇编中进行乘法?_Assembly_Masm_Irvine32 - Fatal编程技术网

Assembly 如何在汇编中进行乘法?

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

我要为一个如此琐碎的问题而烦恼

我需要在一个语句中用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, 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你是对的。我想他可能面临一个棘手的问题。