有人可以告诉我如何解决它,以及如何学习它
Can somebody tell me How , i can solve it , and how i can learn it
假设以下程序 运行 在 32 位小端 MIPS 处理器中
addi sr1. sr0, 0x80000000
and sr3, sr2, sr1
beq sr3, sr0, end
addi sr2, sr2, 1
end:
注册sr2
存储x
,一个带符号的整数。用高级语言编写的程序执行的功能是什么?
如果Sr2=0xfffffff5
,程序结束时Sr2
中存储的值是多少
请有人告诉我,我可以从哪里开始学习或任何书籍?
这里已经很晚了,所以对此持保留态度。
函数递增 x 如果它是负数
int unknown(int x) { return x<0 ? ++x : x;}
第一条指令将$r1
设置为值0x80000000
,即位掩码。这利用了 [=13=]
总是 0
的事实,所以 $r1 = 0 + 0x80000000 = 0x80000000
。
第二条指令将$r2
(x
值)与$r1
(位掩码)相加,并将结果存储在$r3
中。此结果为 0x80000000
当且仅当 x
为负数(参见双补码格式)否则为零。
如果$r3
为零,即如果x
为正数或零,则第三条指令跳转到末尾。
最后一条指令递增x
,仅当x
为负时才执行。
如果$r2 = 0xfffffff5
那么x
就是-11
(又是二补)。
所以在函数 x
之后是 -10
等等 $r2 = 0xfffffff6
.
注意:转换为两个补码而不是数字加一。
假设以下程序 运行 在 32 位小端 MIPS 处理器中
addi sr1. sr0, 0x80000000
and sr3, sr2, sr1
beq sr3, sr0, end
addi sr2, sr2, 1
end:
注册
sr2
存储x
,一个带符号的整数。用高级语言编写的程序执行的功能是什么?如果
Sr2=0xfffffff5
,程序结束时
Sr2
中存储的值是多少
请有人告诉我,我可以从哪里开始学习或任何书籍?
这里已经很晚了,所以对此持保留态度。
函数递增 x 如果它是负数
int unknown(int x) { return x<0 ? ++x : x;}
第一条指令将$r1
设置为值0x80000000
,即位掩码。这利用了 [=13=]
总是 0
的事实,所以 $r1 = 0 + 0x80000000 = 0x80000000
。
第二条指令将$r2
(x
值)与$r1
(位掩码)相加,并将结果存储在$r3
中。此结果为 0x80000000
当且仅当 x
为负数(参见双补码格式)否则为零。
如果$r3
为零,即如果x
为正数或零,则第三条指令跳转到末尾。
最后一条指令递增x
,仅当x
为负时才执行。
如果$r2 = 0xfffffff5
那么x
就是-11
(又是二补)。
所以在函数 x
之后是 -10
等等 $r2 = 0xfffffff6
.
注意:转换为两个补码而不是数字加一。