안녕하세요 ^^
요즘 GDB를 공부하고 있는데 공부중 어셈블러 명령중에 뒤에 l이 붙은게있고 안붙은게
있더라구요 ..
push 와 pushl
mov 와 movl 등이요 ..
이처럼 l 이 들어간것과 안들어간것의 차이는 어떤건가요???
pushl %eax 라고 하면 32비트 레지스터 eax를 push하라는 명령입니다. pushw %ax 라고 하면 16비트 레지스터 ax를 push하라는 명령입니다. movb $0, %al 이라고 하면 8비트 immediate값 0을 al 레지스터로 옮기라는 명령입니다.
위와 같이 AT&T 문법에서는 instruction 뒤에 operand의 크기를 지정할 수 있습니다만... x86 instruction은 레지스터의 이름에 고유한 크기가 정해져 있으므로 생략해도 의미는 통합니다.
l, w, b등은 operand의 크기를 지정합니다.
pushl %eax 라고 하면 32비트 레지스터 eax를 push하라는 명령입니다.
pushw %ax 라고 하면 16비트 레지스터 ax를 push하라는 명령입니다.
movb $0, %al 이라고 하면 8비트 immediate값 0을 al 레지스터로 옮기라는 명령입니다.
위와 같이 AT&T 문법에서는 instruction 뒤에 operand의 크기를 지정할 수 있습니다만...
x86 instruction은 레지스터의 이름에 고유한 크기가 정해져 있으므로 생략해도 의미는 통합니다.