Visual studio 2012 如何在汇编语言上计算六个数的乘积

Visual studio 2012 如何在汇编语言上计算六个数的乘积,visual-studio-2012,assembly,x86,cpu-registers,Visual Studio 2012,Assembly,X86,Cpu Registers,我是汇编新手,我正在尝试创建一个程序,简单地将乘积1*2*3*4*5*6相乘,并将结果存储在AL寄存器中。我被告知,我可以在一次声明中完成这一点 这就是我到目前为止所做的: MOV product, 1 * 2 * 3 * 4 * 5 * 6 MOV al, product 但是,这会在第一行生成消息error A2070:inval。 我也试着这样做: IMUL AH, 1, 2 IMUL BH, 3, 4 IMUL BL, 5, 6 IMUL CL, BH, BL IMUL AL, CL,

我是汇编新手,我正在尝试创建一个程序,简单地将乘积1*2*3*4*5*6相乘,并将结果存储在
AL
寄存器中。我被告知,我可以在一次声明中完成这一点

这就是我到目前为止所做的:

MOV product, 1 * 2 * 3 * 4 * 5 * 6
MOV al, product
但是,这会在第一行生成消息
error A2070:inval
。 我也试着这样做:

IMUL AH, 1, 2
IMUL BH, 3, 4
IMUL BL, 5, 6
IMUL CL, BH, BL
IMUL AL, CL, AH
mov ax, 2
imul ax, ax, 3
imul ax, ax, 4
imul ax, ax, 5
imul ax, ax, 6
但每一行都会产生一个错误,涉及到参数的大小不同


有人能告诉我实现这个产品的最佳方法吗

请注意,
1*2*3*4*5*6=720
因此它不适合8位寄存器,因此您应该使用16位寄存器,例如
ax
。如果允许使用编译时乘法,那么当然
movax,1*2*3*4*5*6
应该可以工作。汇编程序只需将其转换为
movax,720
,这并不奇怪

对于第二个版本,
IMUL
不接受两个立即数操作数。如果你想使用这种方法,你需要这样的东西:

IMUL AH, 1, 2
IMUL BH, 3, 4
IMUL BL, 5, 6
IMUL CL, BH, BL
IMUL AL, CL, AH
mov ax, 2
imul ax, ax, 3
imul ax, ax, 4
imul ax, ax, 5
imul ax, ax, 6

只需键入
720
有什么问题?