如何在不使用“MUL”或“NEG”的情况下乘以-1

How to multiply by -1 without using `MUL` or `NEG`

我接到了一项任务,要用汇编语言编写一个程序,该程序可以在不使用 negmul 指令的情况下将数字乘以 -1。我尝试使用 shlshr 但由于某种原因我无法使其工作。有人知道我该怎么做吗? (二进制有符号 2 的补码)

这是代码的框架:

org 100h

jmp start


start:
  mov bx, 0000000000000010b
  ; here i need to multiply by -1 the number that in bx
mov ah, 0
int 16h
ret

乘以 -1 的一种方法可能是翻转所有位,然后添加 1。 即,让我们在 4 位中取 7 个(为了示例,我使用 4 位)。

       7(10) = 0111(2)
Flip the bits: 1000
and add 1:     1001

如您所见,我们有 -7。 要在汇编中执行此操作,您可以使用 not.

这样,零变成一,那些变成零,翻转后你只需添加 1 就可以了。
shlshr可以看作是乘以或除以2**numberOfBitShifted,所以它们不能工作。