ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AT & T 문법
    프로젝트/운영체제 만들기 2023. 7. 15. 02:05

    글의 참고

    - https://onecellboy.tistory.com/50


    글의 전제

    - 밑줄로 작성된 글은 강조 표시를 의미한다.

    - 그림 출처는 항시 그림 아래에 표시했다.


    글의 내용

    상수(constant)와 immediate 값 : 모든 상수와 immediate 값에는 $가 붙는다. 예를 들어 숫자 5를 나타내려면 $5라고 한다. 변수의 주소를 나타낼 때에도 앞에 $를 붙인다. 예를 들어 foo란 변수의 주소는 $foo이다. 그냥 foo라고 하면 변수의 값을 나타내게 된다. foo 변수의 주소를 eax 레지스터로 복사하는 것은 :

    AT&T : movl $foo, %eax
    Intel : mov eax, foo
    foo의 값을 eax 레지스터로 복사하는 것은 :

    AT&T : movl foo, %eax
    Intel : mov eax, [foo]
    숫자 0xd00d를 eax 레지스터로 복사하는 것은 :

    AT&T : movl $0xd00d, %eax
    Intel : mov eax, 0d000h
    이는 base + index * scale + immed32 주소를 나타내게 된다. 이들 모두를 반드시 지정해야 하는 것은 아니지만 immed32나 base 중의 하나는 반드시 지정해야 한다. 주소 지정의 예를 들어보자. eax 레지스터가 가리키는 주소의 값을 참조하는 경우 :

    AT&T : (%eax)
    Intel : [eax]
    레지스터에 변수(var)의 옵셋을 합한 주소를 참조하는 경우 :

    AT&T : var(%eax)
    Intel : [eax + var]

     

    '프로젝트 > 운영체제 만들기' 카테고리의 다른 글

    [xv6] Scheduling  (0) 2023.07.17
    [xv6] Spinlock  (0) 2023.07.17
    xv6 - System Call & Traps  (0) 2023.07.12
    xv6 - Init process  (0) 2023.07.12
    [xv6] Page tables 상세 분석 1  (0) 2023.07.12
Designed by Tistory.