假设以下程序在32位小端MIPS处理器中运行
addi sr1. sr0, 0x80000000
and sr3, sr2, sr1
beq sr3, sr0, end
addi sr2, sr2, 1
end:
注册sr2
存储x
,一个有符号整数。程序执行的功能是什么,用高级语言编写?
如果Sr2
Sr2=0xfffffff5
中存储的值是多少?
醇>
请有人告诉我,我可以在哪里开始学习或者任何书籍?
答案 0 :(得分:0)
现在已经很晚了,所以请耐心等待。
函数增量x,如果是负数
int unknown(int x) { return x<0 ? ++x : x;}
第一个指令集$r1
到值0x80000000
,它是一个位掩码。这使用了$0
始终为0
的事实,因此$r1 = 0 + 0x80000000 = 0x80000000
。
第二条指令带有$r2
(x
值)$r1
(位掩码)并将结果存储在$r3
中。当且仅当0x80000000
为负数时(参见两个补语格式),此结果为x
,否则为零。
如果$r3
为零,则第三条指令跳到结尾,即如果x
为正或零。
最后一条指令增量x
仅在x
为负时执行。
如果$r2 = 0xfffffff5
则x
为-11
(再次为两个补码)
因此,函数x
为-10
后$r2 = 0xfffffff6
。
注意:要转换为和来自两个补码而不是数字并添加一个。