我遇到了这样的问题,我被要求在不使用任何mul或div指令的情况下将BX乘以42,可能是使用了shl或shr。它还需要在5行中完成。你怎么会做这种事?我没有尝试任何东西,但上面的要求是在1行中将BX乘以32,所以我只使用了SHL BX, 5。
mul
div
shl
shr
SHL BX, 5
7eumitmz1#
因子42(十进制)等于0101010(二进制),在此表示法中,1的顺序为1、3、5,因此结果为
21 * N + 23 * N + 25 * N = 42 * N。
该代码假定CPU Intel 186或更高,并且因子N加载在BX中;产品也以BX形式返回。不幸的是,它需要六条指令,我没有设法抽出一条线。
BX
SHL BX,1 ; BX=2*N MOV AX,BX ; AX=2*N SHL BX,2 ; BX=8*N ADD AX,BX ; AX=2*N + 8*N SHL BX,2 ; BX=32*N ADD BX,AX ; BX=2*N + 8*N + 32*N = 42*N
ebdffaop2#
三个解决方案,有6行,可以在emu 8086上运行,因为该模拟器允许立即计数移位,与真实的的8086 CPU所允许的相反!在输入BX = N时
shl bx, 1 ; BX = N * 2 mov ax, bx ; AX = N * 2 shl bx, 2 ; BX = N * 8 add bx, ax ; BX = N * 10 shl bx, 2 ; BX = N * 40 add bx, ax ; BX = N * 42 mov ax, bx ; AX = N shl bx, 2 ; BX = N * 4 add ax, bx ; AX = N * 5 shl bx, 2 ; BX = N * 16 add bx, ax ; BX = N * 21 shl bx, 1 ; BX = N * 42
但上述要求是在1行中将BX乘以32
mov ax, bx ; AX = N shl bx, 5 ; BX = N * 32 shl ax, 1 ; AX = N * 2 add bx, ax ; BX = N * 34 shl ax, 2 ; AX = N * 8 add bx, ax ; BX = N * 42
相关assembly 8086 multiply 41 without using MUL
2条答案
按热度按时间7eumitmz1#
因子42(十进制)等于0101010(二进制),在此表示法中,1的顺序为1、3、5,因此结果为
21 * N + 23 * N + 25 * N = 42 * N。
该代码假定CPU Intel 186或更高,并且因子N加载在
BX
中;产品也以BX
形式返回。不幸的是,它需要六条指令,我没有设法抽出一条线。
ebdffaop2#
三个解决方案,有6行,可以在emu 8086上运行,因为该模拟器允许立即计数移位,与真实的的8086 CPU所允许的相反!
在输入BX = N时
但上述要求是在1行中将BX乘以32
相关assembly 8086 multiply 41 without using MUL