我正在做一些在线 MIPS ASM 练习,但其他 ASM 语言将是类似的。
我对以下问题有疑问。它需要我执行 13 倍。这很简单:
## 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