Header

  1. View current page

    노이쉬*^^*의 노트

Profile_img_60x60_01
0

잘 익혀지지 않는 것 정리

어셈블리, 잘 익혀지지 않는 것 정리#

  • 문자열 프리미티브 명령

    • 보호 모드 프로그램에서, ESI는 자동적으로 DS가 가리키는 세그먼트에서의 오프셋이 되고, EDI는 자동적으로 ES가 가리키는 세그먼트 내의 오프셋이 된다. DS와 ES는 항상 같은 값으로 설정되고, 이를 변경할 수 없다(반면에 실제 주소 모드에서의 ES와 DS는 종종 ASM 프로그래머에 의해서 변경된다)
  • offset과 lea 차이

  • 주소지정 방식

    • 즉시 주소 지정 방식

      • 오퍼랜드 자리에 상수를 사용(명령어에 맞는 크기의 오퍼랜드를 사용해야함)

        • mov 'a, %ch       // GAS
        • mov ch, 'a'         // MASM
        • mov 0x1234, ax  // GAS
        • mov ax, 1234h    // MASM
    • 직접 메모리 주소 지정 방식

      • 소스 혹은 목적 오퍼랜드에 메모리 주소를 지정하는 32비트 상수를 집어 넣는 것

        • 예를 들면 K라는 변수가 8088번지를 가리키고 있을 때 mov al, K 라고 하면 K(8088번지에 있는)가 가지고 있는 데이터 값을 al으로 이동 시킨다.
        • movb byteVar, %ch    // GAS
        • mov ch, byteVar        // MASM
        • movw wordVar, ax     // GAS
        • mov ax, wordVar       // MASM
    • 레지스터 간접 주소 지정 방식

      • 오퍼랜드의 값(레지스터의 값)이 사용하고자 하는 메모리의 주소

        • 레지스터에는 주소가 들어가 있고, 이 주소가 가리키는 곳에 있는 데이터 값을 가지고 오던지 이쪽으로 값을 쓰던지 하는 방식이다.
        • mov al, [eax]         // MASM
        • movb (%eax), %al // GAS
    • 인덱스 주소 지정 방식

      • 32비트 레지스터의 값에 변수의 주소(변위)를 더하여 "유효주소"(최종적으로 나온 주소)를 계산한다.

        • 예를 들면 VarName은 1100번지에 있고 EBX에는 8이 있으면 mov al, varName[ebx]은 1108번지(EBX + varName)에 있는 한 바이트를 AL 레지스터로 읽어 들이라는 명령
        • mov al, VarName[eax]     // MASM
        • movb varName(%eax), al // GAS
    • 스케일 인덱스 주소 지정 방식

      • 인덱스 주조 지정 방식과 같으며 2가지 차이점을 보인다

        • 레지스터 2개를 합쳐서 변위에 더할 수 있다
        • 인덱스 레지스터에 1, 2, 4, 8을 곱할 수 있다.
        • mov eax, varName[ebx + esi * 4] // MASM

          • 차이점이 발생하는 곳은 esi * 4
  • 명령어

    • mov dword ptr[ebp - 4], 1

      • 1을 ebp-4 위치에 넣으라는 것!

        • ebp-4만 하게 되면 mov는 옮기려는 데이터의 크기를 알 수 없으므로 앞에 데이터형을 명시해줘야 한다
    • rep stos dword ptr[edi]

      • ecx가 0이 될 때까지 eax에 있는 내용을 edi에 dword 크기 만큼 복사(복사할때 마다 edi는 일정하게 증가)
    • shl edx, 1

      • 2진수의 곱하기 2 (쉬프트)
  • 함수 호출시 스택 구조

ss.JPG

 

 

History

Last edited on 09/10/2008 15:22 by noish

Comments (0)

You must log in to leave a comment. Please sign in.