2008/03/26 14:13
ASM 두번째 assembly language2008/03/26 14:13
레지스터
실행중인 명령어를 제어하고, 메모리의 주소지정을 다루고, 산술 연산 능력을 제공하기 위해 사용된다.프로세서는 레지스터의 이름을 통해서 참조 한다.
세그먼트 레지스터
현재 세그먼트라고 하는 메모리의 한 여역에 대한 주소지정을 제공 한다.
포인터 레지스터
포인터 레지스터에는 32비트 EIP, ESP, EBP 가 있고, 오른쪽의 16비트 부분은 각각 IP, SP, BP 이다.
범용 레지스터
32비트 EAX, EBX, ECX, EDX 레지스터 등이 있다.각각의 레지스터들의 오른쪽 16비트 부분을 AX, BX, CX, DX 레지스터라 부른다.
인덱스 레지스터
32비트 ESI와 EDI가 있다. 이러한 레지스터의 오른쪽 16비트 부분을 각각 SI ,DI 라 한다.
플래그 레지스터
32비트 Eflag는 다양한 컴퓨터의 행동들의 상태를 나타내는 비트들을 포함한다. Eflag의 오른쪽 16비트 부분이 플래그 레지스터이다. 이 16비트 중에서 9개가 컴퓨터의 현재 상태와 결과를 나타낸다.
실행중인 명령어를 제어하고, 메모리의 주소지정을 다루고, 산술 연산 능력을 제공하기 위해 사용된다.프로세서는 레지스터의 이름을 통해서 참조 한다.
세그먼트 레지스터
현재 세그먼트라고 하는 메모리의 한 여역에 대한 주소지정을 제공 한다.
CS(코드 세그먼트) 레지스터
프로그램의 코드 세그먼트의 시작주소를 포함한다. 이 세그먼트 주소에 명령어 포인터(IP) 레지스터의 오프셋 값을 더하면, 실행하기 위해 메모리로 부터 가져와야 할 명령어의 주소가 된다.일반적인 프로그래밍에서는 이 레지스터를 직접 참조할 필요가 없다.
DS(데이터 세그먼트) 레지스터
프로그램의 데이터 세그먼트의 시작주소를 포함한다.명령어는 이 주소를 사용하여 데이터의 위치를 알아낸다.이 주소에 명령어의 오프셋 값을 더하면 데이터 세그먼트에 속한 특정 바이트 위치에 대한 참조가 생성된다.
SS(스택 세그먼트) 레지스터
메모리 상에 스택의 구현을 가능하게 한다. 프로그램은 주소와 데이터의 임시 저장 목적으로 스택을 사용한다. 시스템은 프로그램의 스택 세그먼트의 시작 주소를 SS 레지스터에 저장한다.이 세그먼트 주소에 스택 포인터(SP) 레지스터의 오프셋 값을 더하면, 참조되고 있는 스택의 현재 워드를 가리킨다.이반적인 프로그래밍에서는 이 레지스터를 직접 참조할 필요가 없다.
ES(엑스트라 세그먼트) 레지스터
메모리 주소지정을 다루는 스트링 연산에서 사용된다. 이 경우 ES 레지스터는 DI(인덱스) 레지스터와 연관된다. 프로그램이 ES 레지스터를 사용할 경우에, 이 레지스터를 적절한 세그먼트 주소로 초기화해야 한다.
FS와 GS 레지스터
이 레지스터는 기억장소 요구사항을 다루기 위해서, 80386에서 추가로 도입된 여분의 세그먼 레지스터이다.
프로그램의 코드 세그먼트의 시작주소를 포함한다. 이 세그먼트 주소에 명령어 포인터(IP) 레지스터의 오프셋 값을 더하면, 실행하기 위해 메모리로 부터 가져와야 할 명령어의 주소가 된다.일반적인 프로그래밍에서는 이 레지스터를 직접 참조할 필요가 없다.
DS(데이터 세그먼트) 레지스터
프로그램의 데이터 세그먼트의 시작주소를 포함한다.명령어는 이 주소를 사용하여 데이터의 위치를 알아낸다.이 주소에 명령어의 오프셋 값을 더하면 데이터 세그먼트에 속한 특정 바이트 위치에 대한 참조가 생성된다.
SS(스택 세그먼트) 레지스터
메모리 상에 스택의 구현을 가능하게 한다. 프로그램은 주소와 데이터의 임시 저장 목적으로 스택을 사용한다. 시스템은 프로그램의 스택 세그먼트의 시작 주소를 SS 레지스터에 저장한다.이 세그먼트 주소에 스택 포인터(SP) 레지스터의 오프셋 값을 더하면, 참조되고 있는 스택의 현재 워드를 가리킨다.이반적인 프로그래밍에서는 이 레지스터를 직접 참조할 필요가 없다.
ES(엑스트라 세그먼트) 레지스터
메모리 주소지정을 다루는 스트링 연산에서 사용된다. 이 경우 ES 레지스터는 DI(인덱스) 레지스터와 연관된다. 프로그램이 ES 레지스터를 사용할 경우에, 이 레지스터를 적절한 세그먼트 주소로 초기화해야 한다.
FS와 GS 레지스터
이 레지스터는 기억장소 요구사항을 다루기 위해서, 80386에서 추가로 도입된 여분의 세그먼 레지스터이다.
포인터 레지스터
포인터 레지스터에는 32비트 EIP, ESP, EBP 가 있고, 오른쪽의 16비트 부분은 각각 IP, SP, BP 이다.
IP(명령어 포인터) 레지스터
16비트 레지스터느 다음에 실행될 명령어의 오프셋 주소를 포함한다.IP가 현재 실행중인 코드 세그먼트에 속한 현재 명령어를 가리킨다는 점에서, 이 레지스터는 CS:!P 처럼 CS 레지스터와 연관된다. EIP 레지스터는 확장된 32비트 IP레지스터 이다.실행되는 각 명령어에 대해서, 프로세서는 IP의 오프셋 값을 변경하여 IP가 실제로 실행의 각 단계를 주도하도록 한다.
※SP와 BP 레지스터는 SS 레지스터와 연관되어, 시스템이 스택 세그먼트에 속한 데이터를 엑서스 하는 것을 허용한다. 프로세서는 자동으로 이러한 레지스터를 다룬다.
16비트 레지스터느 다음에 실행될 명령어의 오프셋 주소를 포함한다.IP가 현재 실행중인 코드 세그먼트에 속한 현재 명령어를 가리킨다는 점에서, 이 레지스터는 CS:!P 처럼 CS 레지스터와 연관된다. EIP 레지스터는 확장된 32비트 IP레지스터 이다.실행되는 각 명령어에 대해서, 프로세서는 IP의 오프셋 값을 변경하여 IP가 실제로 실행의 각 단계를 주도하도록 한다.
※SP와 BP 레지스터는 SS 레지스터와 연관되어, 시스템이 스택 세그먼트에 속한 데이터를 엑서스 하는 것을 허용한다. 프로세서는 자동으로 이러한 레지스터를 다룬다.
범용 레지스터
32비트 EAX, EBX, ECX, EDX 레지스터 등이 있다.각각의 레지스터들의 오른쪽 16비트 부분을 AX, BX, CX, DX 레지스터라 부른다.
AX 레지스터
주누산기 (primary accumulator) 인 AX는 입출력과 대부분의 산술 연산에서 사용된다.곱셈, 덧셈, 나눗셈, 변환(translate)명령어들은 AX의 사용을 가정한다.다른 레지스터 보다 AX레지스터를 사용하면 더 효율적인 기계 코드를 생성한다.
BX 레지스터
주소지정을 확장하기 위해 인덱스로서 사용될 수 있는 유일한 범용 레지스터이기 때문에, 베이스 레지스터로 알려져 있다. BX 레지스터의 일반적인 용도는 계산이다.또한 BX는 특정 주소지정을 위해서 베이스 레지스터로서 DI나 SI와 결합될 수 있다.
CX 레지스터
카운터 레지스터로 알려져 있다. 이 레지스터는 루프가 반복되는 횟수를 제어하는 값 또는 왼쪽이나 오른쪽으로 이동되는 비트 수등을 포함하 수 있다. 또한 계산에 CX 레지스터를 사용할 수 있다.
DX 레지스터
데이터 레지스터로 알려져 있다.어떤 입출력 연산에서는 반드시 이 레지스터의 사용을 요구하고, 큰 수의 곱셈과 나눗셈 연산은 DX와 AX의 사용을 가정한다.
주누산기 (primary accumulator) 인 AX는 입출력과 대부분의 산술 연산에서 사용된다.곱셈, 덧셈, 나눗셈, 변환(translate)명령어들은 AX의 사용을 가정한다.다른 레지스터 보다 AX레지스터를 사용하면 더 효율적인 기계 코드를 생성한다.
BX 레지스터
주소지정을 확장하기 위해 인덱스로서 사용될 수 있는 유일한 범용 레지스터이기 때문에, 베이스 레지스터로 알려져 있다. BX 레지스터의 일반적인 용도는 계산이다.또한 BX는 특정 주소지정을 위해서 베이스 레지스터로서 DI나 SI와 결합될 수 있다.
CX 레지스터
카운터 레지스터로 알려져 있다. 이 레지스터는 루프가 반복되는 횟수를 제어하는 값 또는 왼쪽이나 오른쪽으로 이동되는 비트 수등을 포함하 수 있다. 또한 계산에 CX 레지스터를 사용할 수 있다.
DX 레지스터
데이터 레지스터로 알려져 있다.어떤 입출력 연산에서는 반드시 이 레지스터의 사용을 요구하고, 큰 수의 곱셈과 나눗셈 연산은 DX와 AX의 사용을 가정한다.
인덱스 레지스터
32비트 ESI와 EDI가 있다. 이러한 레지스터의 오른쪽 16비트 부분을 각각 SI ,DI 라 한다.
SI 레지스터
스트링 조작 연산에 필요하다. 이 경우 SI는 DS 레지스터와 연관된다.
DI 레지스터
스트링 연산에 필요하다. 이 경우 DI는 ES 레지스터와 연관된다.
스트링 조작 연산에 필요하다. 이 경우 SI는 DS 레지스터와 연관된다.
DI 레지스터
스트링 연산에 필요하다. 이 경우 DI는 ES 레지스터와 연관된다.
플래그 레지스터
32비트 Eflag는 다양한 컴퓨터의 행동들의 상태를 나타내는 비트들을 포함한다. Eflag의 오른쪽 16비트 부분이 플래그 레지스터이다. 이 16비트 중에서 9개가 컴퓨터의 현재 상태와 결과를 나타낸다.
OF(overflow)
산술연산 후 상위(가장 왼쪽) 비틀의 오버플로우를 나타낸다.
DF(direction)
스트링 데이터를 이동시키거나 비교할 때 왼쪽 또는 오른쪽의 방향을 결정한다.
IF(interrupt)
키보드의 입력과 같은 외부 인터럽트가 처리되어야 하는지 또는 무시 되어야 하는지를 나타낸다.
TF(trap)
단일 단계 모드의 프로세서 연산을 허용한다. 디버거 프로그램은 TF 플래그를 설정해서, 한번에 한번씩 명령어를 실행시키고, 레지스터와 메모리 상에서 그 영향을 조사할 수 있게 한다.
SF(sign)
산술 연산의 결과 값에 대한 부호를 포함한다.(0==양수, 1 == 음수)
ZF(zero)
산술이나 비교 연산의 결과 값에 대한 부호를 포함한다.(0 == 결과 값이 0이 아님, 1 == 결과 값이 0)
AF(auxiiary carry)
특수화된 산술에서 사용되며, 그 산술 연산에서 비트 3에서 비트 4로의 캐리를 포함한다.
PF(parity)
연산 결과 1비트들의 개수를 나타낸다. 그 개수가 짝수인 경우 짝수 패리티라 부르며, 홀수인 경우 홀수 패리티라 부른다.
CF(carry)
산술 연산 후 상위(가장 왼쪽) 비트의 캐리를 포함한다. 또한 shift 또는 rotate 연산 후 가장 마지막 비트 내용을 포함한다.
산술연산 후 상위(가장 왼쪽) 비틀의 오버플로우를 나타낸다.
DF(direction)
스트링 데이터를 이동시키거나 비교할 때 왼쪽 또는 오른쪽의 방향을 결정한다.
IF(interrupt)
키보드의 입력과 같은 외부 인터럽트가 처리되어야 하는지 또는 무시 되어야 하는지를 나타낸다.
TF(trap)
단일 단계 모드의 프로세서 연산을 허용한다. 디버거 프로그램은 TF 플래그를 설정해서, 한번에 한번씩 명령어를 실행시키고, 레지스터와 메모리 상에서 그 영향을 조사할 수 있게 한다.
SF(sign)
산술 연산의 결과 값에 대한 부호를 포함한다.(0==양수, 1 == 음수)
ZF(zero)
산술이나 비교 연산의 결과 값에 대한 부호를 포함한다.(0 == 결과 값이 0이 아님, 1 == 결과 값이 0)
AF(auxiiary carry)
특수화된 산술에서 사용되며, 그 산술 연산에서 비트 3에서 비트 4로의 캐리를 포함한다.
PF(parity)
연산 결과 1비트들의 개수를 나타낸다. 그 개수가 짝수인 경우 짝수 패리티라 부르며, 홀수인 경우 홀수 패리티라 부른다.
CF(carry)
산술 연산 후 상위(가장 왼쪽) 비트의 캐리를 포함한다. 또한 shift 또는 rotate 연산 후 가장 마지막 비트 내용을 포함한다.
※모든글은 'IBM PC 어셈블리 프로그래밍 5th edition'을 참고 하였습니다.
