如何在不使用减号的情况下从内存位置减去一个?

时间:2014-08-22 18:19:22

标签: assembly x86

我在一个面试问题网站上得到了这个问题。解决方案将是用汇编语言编写的代码。我在装配方面不是很好,只是想知道如何做到这一点。我知道没有减去我们可以通过添加(-1)减去。这是2的恭维。但究竟我应该怎么写指令对我来说很难。任何帮助将不胜感激。

我有这样的事情:

MOV AX,b 
Taking 2's compliment here 
ADD AX,above mentioned command

我正在使用X86。 谢谢

4 个答案:

答案 0 :(得分:2)

由于有多种方法可以减去一个,并且因为它不完全清楚是什么和不允许的,我会发布几个可能的解决方案 - 接受你的选择。

add与否定值一起使用:

mov AX, b
add AX, -1
mov b, AX

使用减量:

mov AX, b
dec AX
mov b, AX

使用否定+加法:

mov AX, b
neg AX
add AX, 1 ; inc AX also works
neg AX

还有无数其他可能性。

答案 1 :(得分:0)

mov CX,b
loop Here
@Here:
mov b,CX

答案 2 :(得分:0)

如果这是X86或其他一些处理器,那么您可以立即添加内存(英特尔格式)

value   dd     1234            ;original value (could be any value)
;       ...
        add    value, -1

或者只是从内存中减少:

        dec     value

或其他令人费解的事情:

        neg     value
        not     value

答案 3 :(得分:0)

在我看来,不使用减去减去一个最明显的方法是:

        sub AX,1

这比dec更有利于它相应地设置标志。