Header

  1. View current page

    knowledge님의 노트

Profile_img_60x60_01
1

IA-32 asm

  • IA-32 어셈블리 언어 형식
    • 최대 4개의 필드를 가지는 문장으로 구성
      • 실행문 : 실제적으로 기계어로 번역되어 실행되는 문장
      • 지시어(의사명령어directive) : 데이터 항목의 정의 등 어셈블러에게 특정한 동작을 수행하도록 정보 제공
    • [Label:] OPcode Operand[,operand ;comment]
    • 한 줄을 넘기는 문장은 줄 끝에 역슬래시로 다음 줄과 이어짐을 밝혀야 함
    • label 필드
      • JMP, CALL, LOOP 등과 같은 제어문에 의해 수행되는 명령어가 있는 위치를 나타낸다.
      • 첫 글자가 영문자 또는 특수 문자여야 하고, 레이블 내 공란이 있으면 안된다.
      • 대소문자 구분 안한다.
      • 예약어 못 쓴다.
    • OPcode(mnemonic)와 operand field
      • 명령어에 따라 0~3개의 오퍼랜드를 가진다.
      • 오른쪽에 있는 오퍼랜드는 source, 왼쪽에 있는 오퍼랜드는 destination이다.
    • comment field
      • 세미콜론으로 주석단다.
    • 지시어
      • 리스트 지시어 : PAGE / TITLE / SUBTTL
        • PAGE 지시어는 프로그램 맨 처음에 서용하여 lst 파일에서 페이지 당 줄 수와 줄 당 문자 수를 지정한다.
          • PAGE [LENGTH=50], [WIDTH=80]
        • TITLE 지시어는 각 페이지의 둘째 줄에 프로그램의 제목을 프린트할 때 사용한다.
          • TITLE <TEXT>
        • SUBTTL 지시어는 타이틀 밑에 소제목을 출력해 준다. 여러 개가 나와도 된다.
      • 세그먼트 지시어
        • 어셈블리 프로그램은 하나 이상의 세그먼트를 사용하여 작성되어져야 한다.
        • 세그먼트 지시어를 어셈블러가 읽으면 그 부분이 해당 세그먼트임을 안다.
          <SEGMENT NAME> SEGMENT

          DECLARE DATA

          <SEGMENT NAME> ENDS

        • 세그먼트 지시어를 사용하는 모듈은 반드시 .MODEL 지시어로 시작해야 한다.
        • .MODEL
          • .MODEL 지시어는 어셈블리 프로그램에서 그 모듈 전체에 영향을 주는 메모리 모델 하나를 선택하도록 그 속성을 정의
          • 세그먼트들이 사용되거나 결합되는 방법을 정의하거나 관리
          • 어떤 지시자보다 먼저 나와야 한다.
            • .MODEL <MEMORY MODEL>[, MODEL OPTIONS]
            • MEMORY MODEL   CS      DS        PROPERTY
            • .TINY                    NEAR   NEAR   하나의 64K 세그먼트 내에 코드와 데이터를 다 저장
            • .SMALL                 NEAR   NEAR   코드와 데이터가 각각 64K 세그먼트에 저장
            • .MEDIUM               FAR      NEAR   하나의 데이터 세그먼트와 여러 개의 코드 세그먼트가 필요할 때(코드 > 64K)
            • .COMPACT            NEAR   FAR      하나의 코드 세그먼트와 여러 개의 데이터 세그먼트가 필요할 때(데이터 > 64K)
            • .LARGE                 FAR      FAR      코드가 64K를 초과하고 데이터도 64K를 초과할 때
            • .FLAT                    NEAR   NEAR    코드와 데이터 세그먼트 둘 다 합쳐 4GB 이내. 세그먼트가 없고 C/D 모두 32bit이다.
        • ASSUME 지시어
          • ASSUME 지시어는 각 세그먼트와 프로그래머가 정의한 세그먼트 이름을 연관짓는다.
          • 사용하지 않는 세그먼트에 대해서는 생략하거나 nothing이라 선언하면 된다. ASSUME ES:nothing
            • ASSUME CS:<CODE SEGMENT NAME>, DS:<DATA SEGMENT NAME>, SS:<STACK SEGMENT NAME>
        • PROC 지시어
          • 프로시저를 정의한다.
            • procname PROC [NEAR=default or FAR]
              • CODE
            • procname ENDP
        • END 지시어
          • END 지시어는 세그먼트, 프로시저를 마감하는데 쓰인다. ENDS / ENDP
          • END <BEGIN_LABEL>을 통해 BEGIN_LABEL부터 프로그램을 실행한다.
        • 프로세서 지정
          • .8086, .186, .286, .386, .486, .586
          • .286P, .386P, .486P, .586P : priviledge level의 명령어를 사용할 수 있게 해준다. 시스템 프로그래밍에서 사용된다.
          •  

 

History

Last edited on 04/20/2007 15:19 by persona

Comments (0)

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