对于 PDP-11,如何更改以下程序集片段,使其只有两条指令,但与这四条指令相同吗?
tst r0
blt label
cmp r0, #75
bgt label
我从未使用过 PDP-11,但我对 x86 系统上的测试和分支工作方式有一些经验,这看起来可能是相似的。
在 x86 指令集上,“测试”指令相当于与 0 进行比较;如果值小于 0,则设置“小于”标志,等等。我猜#75 表示十六进制的数字文字 - 0x75。
如果我的假设是正确的,那么您拥有的代码将进行两次签名比较:
如果您改为将其视为无符号值,那么——假设 PDP-11 系统使用 2 的补码编码——负值将变为大于或等于 0x8000 的值(因为 PDP-11 是 16 位系统) . 因此,如果您进行无符号比较,检查 0x75 也会处理负值;最小的可能值变为 0,这对于这里的测试是可以接受的。
我不确定 PDP-11 上的无符号比较是不同的比较操作码还是不同的标志,但我相信你可以弄清楚那部分。:-)
现在你的作业可能为时已晚,所以这是答案:
cmp r0,#75 密件抄送标签;如果 r0 包含 75..65535,则分支,即 75..32767,-32768..-1
bcc 具有 bhis 的程序集同义词(如果 HIgher 或 Same unsigned 则为分支)。
假设您想在比较结果大于或小于时跳转到相同的标签,那么您可以通过使用分支如果不等于指令将其归结为两条指令(因为 a != b时a < b && a > b) 和另一条指令。
提示:这不是测试说明。