如何用汇编语言计算六个数的乘积

How to compute the product of six numbers on Assembly Language

我是汇编的新手,我正在尝试创建一个程序来简单地将乘积 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

但是每一行都会产生一个错误,指的是参数的大小不同。

有人能告诉我计算该乘积的最佳方法吗?

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

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

mov ax, 2
imul ax, ax, 3
imul ax, ax, 4
imul ax, ax, 5
imul ax, ax, 6