对于PDP-11,我如何更改以下的程序集片段,以便它只有两条指令,但它们与这四条指令完成相同的工作?
tst r0
blt label
cmp r0, #75
bgt label
答案 0 :(得分:6)
我从未使用过PDP-11,但我对测试和分支在x86系统上的工作方式有一些经验,看起来它可能类似。
在x86指令集上,“test”指令相当于与0的比较;如果值小于0,则设置“小于”标志。我将猜测#75表示十六进制的数字文字 - 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)和另一条指令。
提示:这不是测试指令。