-
어셈블리어프로그래밍 언어/규격 2012. 2. 27. 00:04기계어(Machine Language)컴퓨터의 프로세서(CPU)가 이해하는 언어명령어 집합(instruction set)IA-32 프로세서(x86)AMD64(x86-64, x64)c.f. IA-64(Itanium)
머신 스택
어셈블리 언어(Assembly Language)명령 니모닉 + 오퍼랜드(피연산자?)어셈블러구조적 프로그래밍이 가능한 고급 언어(High-Level Language)컴파일러오브젝트 중심의 언어인텔 프로세서를 위한 범용 어셈블리 언어 사양은 없다.연산자와 디렉티브는 인텔 명령어 집합이 아니다. 그들은 어셈블러에 의하여 인식된다. 하나의 표준 정의가 없기 때문에 어셈블러마다 다른 연산자와 디렉티브를 갖는다. 어셈블러 제조사는 보다 복잡한 특성을 제공하면서 서로서로 경쟁한다.Intel 스타일MASMAT&T 스타일GNU asTITLE 디렉티브주석한 줄 주석: ; ..블록 주석: COMMENT 디렉티브@LINE현재 소스 코드의 행 수$ 연산자현재 위치 카운터 ; 주소등호 디렉티브정수 수식(32비트 정수 값)변수명은 주소 값 ; 유효 주소(effective address)c.f. 직접 메모리, 직접 오프셋 or direct addrerssingEQU 디렉티브TEXTEQU 디렉티브c.f. MACRO/ENDM 디렉티브INCLUDE 디렉티브ALIGN 디렉티브LABEL 디렉티브 ; 유니온?STRUCT/ENDS 디렉티브UNION/ENDS 디렉티브PROTO 디렉티브INVOKE 디렉티브c.f. MACRO/ENDM 디렉티브END 디렉티브피연산자 타입즉시값 ; immediate레지스터메모리메모리 피연산자직접 주소 지정 ; 직접 피연산자c.f. OFFSET 연산자직접 메모리e.g. mov al, var1 or mov al, [var1]직접 오프셋 ; direct-offset addressinge.g. mov al, [arrayB+1] or mov al, arrayB+1간접 주소 지정 ; indirect addressingc.f. lea 명령 ; 실행 시에 계산간접 피연산자 ; indirect operande.g. mov al, [esi]인덱스화된 피연산자 ; indexed operande.g. mov al, [arrayB + esi] or mov al, arrayB[esi]베이스-인덱스 피연산자베이스-인덱스 주소 지정베이스-인덱스-변위OFFSET 연산자 ; 32비트 길이주소값?어셈블 시간의 오프셋 상수e.g. mov esi, OFFSET myArray + 4c.f. lea ; 어셈블 시간ㅇPTR 연산자 ; 타입 캐스팅?e.g. inc BYTE PTR [esi]TYPE 연산자변수의 한 요소의 크기를 바이트 단위로 리턴LENGTHOF 연산자배열의 요소 개수SIZEOF 연산자LENGTHOF * TYPE.386 ; to use the 386 instruction set;.686P ; Pentium Pro or later
.model flat, stdcall ; the memory model of your program, the parameter passing method used by Windows functions
.data
; All initialized data in your program
.data?
; uninitialized data
.const
; constants
.code
start:
; All your code
end start