2

对于 PDP-11,如何更改以下程序集片段,使其只有两条指令,但与这四条指令相同吗?

tst r0
blt label
cmp r0, #75
bgt label
4

3 回答 3

7

我从未使用过 PDP-11,但我对 x86 系统上的测试和分支工作方式有一些经验,这看起来可能是相似的。

在 x86 指令集上,“测试”指令相当于与 0 进行比较;如果值小于 0,则设置“小于”标志,等等。我猜#75 表示十六进制的数字文字 - 0x75。

如果我的假设是正确的,那么您拥有的代码将进行两次签名比较:

  • r0 的(有符号)值是否小于 0?
  • r0 的(有符号)值是否大于 0x75?

如果您改为将其视为无符号值,那么——假设 PDP-11 系统使用 2 的补码编码——负值将变为大于或等于 0x8000 的值(因为 PDP-11 是 16 位系统) . 因此,如果您进行无符号比较,检查 0x75 也会处理负值;最小的可能值变为 0,这对于这里的测试是可以接受的。

我不确定 PDP-11 上的无符号比较是不同的比较操作码还是不同的标志,但我相信你可以弄清楚那部分。:-)

于 2010-04-27T20:06:25.493 回答
2

现在你的作业可能为时已晚,所以这是答案:

cmp r0,#75
密件抄送标签;如果 r0 包含 75..65535,则分支,即 75..32767,-32768..-1

bcc 具有 bhis 的程序集同义词(如果 HIgher 或 Same unsigned 则为分支)。

于 2010-05-31T19:50:12.937 回答
0

假设您想在比较结果大于或小于时跳转到相同的标签,那么您可以通过使用分支如果不等于指令将其归结为两条指令(因为 a != ba < b && a > b) 和另一条指令。

提示:这不是测试说明。

于 2010-04-27T06:04:24.817 回答