如何用汇编语言计算六个数的乘积
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
我是汇编的新手,我正在尝试创建一个程序来简单地将乘积 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