안녕하세요 ^^
요즘 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은 레지스터의 이름에 고유한 크기가 정해져 있으므로 생략해도 의미는 통합니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
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은 레지스터의 이름에 고유한 크기가 정해져 있으므로 생략해도 의미는 통합니다.
댓글 달기