以下
代码片段的单个指令替代项是什么。我已经尝试了几个小时,但真的无法弄清楚
-
CMP EBX,EAX JNE X1 MOV EBX,ECX JMP X2 X1: MOV EAX,EBX X2
-
PUSHF MOV BH,FFH CMP BL,0 JL X1 NOT BH X1: POPF
-
BT AX,15 JC X1 AND EAX,0000FFFFH JMP X2 X1: OR EAX, FFFF0000H X2:
也请提供解释。
谢谢
- 看起来像
cmpxchg ebx, ecx
.if (eax == ebx) ebx = ecx else eax = ebx
- 如果
bl
是负面的,则0FFh
bh
,否则00h
。因此,这只是符号扩展,即。movsx bx, bl
- 这基本上是一样的,它是通过直接测试符号位来扩展
ax
符号,即movsx eax, ax
。但请注意,这不会影响标志,而不是代码片段。