问题(我的问题在于B):
假设DX = 0XDB00
A)在这些命令之后DH的价值是什么:
SHR DX, 1
OR DH,DL
XOR DL, DL
B)写1行代替上面3行
这就是我所要做的:
起初我想,也许它的“SHR AH,1”但是这会让MSB 0而不是1。 我也尝试过查看DEC和HEX值而没有找到模式的运气。
注意:我开始认为问题写得很糟糕,他们的意思是如何在DX为0XDB00的特定情况下得到我们在A中得到的结果。虽然答案可能只是mov DX,0xED00
答案 0 :(得分:2)
答案应该是ror dh, 1
吗?
当dl
已经为0时,它给出与序列相同的结果,但在DX保持任意16位值的一般情况下不起作用。如果你不能这样认为,我不认为这个问题是可以回答的(除非你把它作为"一行",并且只是在同一行上放置多个指令,这是至少可以在GAS和NASM语法中使用。)
这里原来如何做一个旋转(假设DL为零):
SHR
总是将高位置零,并将DH的低位移到DL的高位。
OR
将DH的高位设置为移位到DL的高位的位。 (如果最初DL非零,那些位将影响DH)
XOR
再次将DL归零。
答案 1 :(得分:0)
ADD DX,1200
将获得与上述3行相同的DX寄存器结果。
为此使用了ollydbg,打开了我的一个程序并对其进行了编辑。
首先,我测试了你给我的代码
MOV DX,0xDB00
SHR DX,1
OR DH,DL
XOR DL,DL
然后我检查了DX寄存器。
一旦我有了价值,我就需要使用十六进制计算器。