优化比较指令计数(PDP-11)

时间:2010-04-27 05:43:23

标签: assembly pdp-11

对于PDP-11,我如何更改以下的程序集片段,以便它只有两条指令,但它们与这四条指令完成相同的工作?

tst r0
blt label
cmp r0, #75
bgt label

3 个答案:

答案 0 :(得分:6)

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

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

如果我的假设是正确的,那么你在那里的代码就是进行两次签名比较:

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

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

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

答案 1 :(得分:1)

现在你的作业可能太迟了,所以答案是:

cmp r0,#75
bcc label    ; branch if r0 contains 75..65535, ie 75..32767, -32768..-1

bcc具有bhis的汇编同义词(如果是HIgher或者是相同的无符号,则为分支)。

答案 2 :(得分:0)

如果比较的结果是 大于或小于,则假设您想要跳转到同一标签,那么您可以使用branch-if-not将其降为两条指令-equal指令(因为a = = b时a< b&& a> b)和另一条指令。

提示:这不是测试指令。