对于PDP-11,我如何更改以下的程序集片段,以便它只有两个指令,但它们与这四个指令完成相同的工作?
tst r0
blt label
cmp r0, #75
bgt label
Run Code Online (Sandbox Code Playgroud)
我从未使用过PDP-11,但我对测试和分支在x86系统上的工作方式有一些经验,看起来它可能类似.
在x86指令集上,"test"指令相当于与0的比较; 如果值小于0,则设置"小于"标志.我将猜测#75表示十六进制的数字文字 - 0x75.
如果我的假设是正确的,那么你在那里的代码就是进行两次签名比较:
如果您将其视为无符号值,则 - 假设PDP-11系统使用二进制补码编码 - 负值变为大于或等于0x8000的值(因为PDP-11是一个16位系统) .因此,如果进行无符号比较,则检查0x75也会处理负值; 最小可能值变为0,这对于此处的测试是可接受的.
我不确定PDP-11上的无符号比较是不同的比较操作码还是不同的标志,但我相信你可以把这一部分弄清楚.:-)