저는 x86 어셈블러가 처음이고 모든 조건부 점프 및 테스트를 올바르게 해석하는 데 어려움이 있습니다. 이 코드를 다음 sbb
전에 CF
설정 여부, 그래서 sbb dx, dx
의 결과가 당신이 가진 것을 하나 -1 dx
에서 0입니다 중 하나 이것은 내가 그 코드를 읽는 방법입니다Assembly - TEST dx, dx, jg 다음에
sbb dx, dx
test dx, dx
jg short loc_17C7
.
그러나 그렇다면 test dx, dx
은 jg
을 점프하게 만드는 FLAGS 조합으로 이어지지 않습니다. 위키 백과는 말합니다
TEST 연산은 플래그 CF와 OF를 0으로 설정합니다. SF는 AND의 결과의 MSB로 설정됩니다. 상기의 결과를 AND가 0 인 상기 ZF가 1로 설정되고, 그렇지 않으면
OF=0 SF=1 ZF=0
이 (-1 이진 모두 1이어야 이어질 것이라고 0
dx
-1이면 설정되므로 MSB는 OF=0 SF=0 ZF=1
그러나 jg
만 ZF=0 and SF=OF
IFF에 점프로 이어질 것
dx
가 0 인 경우) 따라서, SF = 1 : 1이어야합니다. 경우 1, SF!=OF
. 케이스 2의 경우, ZF!=0
.
그래서 내가 무엇을 놓치고 있습니까?
나는 귀하의 결론이 정확하다고 믿습니다. 'JGE'는 의미가있다. 'JZ'는 의미가 있습니다. "JC"가 아닌 3 가지 명령어 모두가 더 이해하기 쉽습니다. (또는이 명령어의 역수 - 어쨌든 작동하지 않는 코드에 대해서는 쓸데없는 것입니다.) - 'jg'다음 명령어에 대한 명확한 방법은 없습니다. 아마도'loc_17c7'라고 라벨이 붙어 있을까요? – Magoo