1
를 계산하기 위해 GCC 어셈블리 지침을 이해하는 I가 다음 코드를조건부 점프
if((a<0) || (a>global_count)) //global_count is a global int
{
print error;
}
normal_flow
...
지금 여기 GCC가 생성하는 어셈블러입니다 :
는cmpl 0x0 , 0x10(%ebp) //first check
js print_error
mov 0x8(%ebp) , %eax
mov 0x8(%eax) , %eax
cmp 0x10(%ebp) , %eax //second check
jge normal_flow
print_error
나는 왜 jge
이해가 안가? 나는 그것이 movl
대신에 mov
를 사용하고있는 것을 본다. 그러나 나는 그것이 jle
이 경우이거나 jg
이어야한다고 생각한다. 우리가 점프 대상을 바꾸면 ... 아니면 내가 여기서 잘못 생각하고 있는가?
물론, 이해할 수 있습니다 :'cmp src, dest' src (a)가 dest (global_count)보다 크거나 같으면 점프, 맞습니까? 그것이 제가 처음으로 비교 한 것에서 제가 이해하는 것입니다. – Achilles
잘못되었습니다. 비교의 의미는'dest op src'입니다. 첫 번째 경우에도'if (a-0 <0)'('cmp'는 변장의'sub')입니다. – Jester