(ASM)如何使正整数为负数?

时间:2013-03-02 13:37:30

标签: assembly mips

我正在做一些在线MIPS ASM练习,但其他ASM语言也是类似的。

我遇到以下问题的问题。 它要求我执行13x。这很简单:

## Compute 13x

ori $8,$0,1     # $8 = x

sll $9,$8,2     # x*2^2 = 4x
sll $10,$8,3        # x*2^3 = 8x
addu $10,$9,$10     # 4x+8x = 12x
addu $10,$10,$8     # 12x+x = 13x

然而,它然后通过仅添加一个更多指令来计算-13x。

我的想法是采取两个补充。但是,这是2条指令:

## Calculate -13x with one additional instruction

nor $11,$10,$0      # 
addiu $11,$11,1     # flip bits and +1 to get two's comp?

如何在一条附加指令中计算-13x?

我想这意味着我原来的13x代码并不好,因为我似乎只用一条指令就可以做到这一点。

我可以想到“肮脏的黑客”这样做,但我认为这不是教授所期待的。

注意:我只能使用以下说明:

add     
sll
addi        
addiu   
addu        
and
andi        
or      
ori
nor
sub
subu
srl
xor
xori

1 个答案:

答案 0 :(得分:1)

没关系,我很蠢。

我刚刚解决了。只需0 - 13x!?!?!?

subu $11,$0,$10 # 0 - 13x = -13x