마이크로 프로세서-8086 명령어 세트
8086 마이크로 프로세서는 8 가지 유형의 명령어를 지원합니다.
- 데이터 전송 지침
- 산술 지침
- 비트 조작 지침
- 문자열 지침
- 프로그램 실행 전송 명령 (분기 및 루프 명령)
- 프로세서 제어 지침
- 반복 제어 지침
- 인터럽트 지침
이제 이러한 명령어 세트에 대해 자세히 설명하겠습니다.
데이터 전송 지침
이러한 명령어는 소스 피연산자에서 대상 피연산자로 데이터를 전송하는 데 사용됩니다. 다음은이 그룹의 지침 목록입니다.
단어 전달 지침
MOV − 제공된 소스에서 제공된 대상으로 바이트 또는 단어를 복사하는 데 사용됩니다.
PPUSH − 스택 맨 위에 단어를 넣는 데 사용됩니다.
POP − 스택 상단에서 제공된 위치로 단어를 가져 오는 데 사용됩니다.
PUSHA − 모든 레지스터를 스택에 넣는 데 사용됩니다.
POPA − 스택에서 모든 레지스터로 단어를 가져 오는 데 사용됩니다.
XCHG − 두 위치에서 데이터를 교환하는 데 사용됩니다.
XLAT − 메모리의 테이블을 사용하여 AL의 바이트를 번역하는 데 사용됩니다.
입력 및 출력 포트 전송 지침
IN − 제공된 포트에서 누산기로 바이트 또는 단어를 읽는 데 사용됩니다.
OUT − 누산기에서 제공된 포트로 바이트 또는 단어를 보내는 데 사용됩니다.
주소 이전 지침
LEA − 제공된 레지스터에 오퍼랜드의 주소를로드하는 데 사용됩니다.
LDS − 메모리에서 DS 레지스터 및 기타 제공된 레지스터를로드하는 데 사용됩니다.
LES − ES 레지스터 및 기타 제공된 레지스터를 메모리에서로드하는 데 사용됩니다.
플래그 레지스터 전송 지침
LAHF − 플래그 레지스터의 하위 바이트로 AH를로드하는 데 사용됩니다.
SAHF − AH 레지스터를 플래그 레지스터의 하위 바이트에 저장하는 데 사용됩니다.
PUSHF − 스택 맨 위에있는 플래그 레지스터를 복사하는 데 사용됩니다.
POPF − 스택 맨 위에있는 단어를 플래그 레지스터로 복사하는 데 사용됩니다.
산술 지침
이 명령어는 더하기, 빼기, 곱하기, 나누기 등과 같은 산술 연산을 수행하는 데 사용됩니다.
다음은이 그룹의 지침 목록입니다.
추가 수행 지침
ADD − 제공된 byte를 byte 단위 / word 단위로 추가 할 때 사용합니다.
ADC − 캐리와 함께 추가하는 데 사용됩니다.
INC − 제공된 바이트 / 워드를 1 씩 증가시키는 데 사용됩니다.
AAA − 추가 후 ASCII 조정에 사용합니다.
DAA − 더하기 / 빼기 연산 후 소수점을 조정하는 데 사용됩니다.
빼기를 수행하는 지침
SUB − 워드에서 바이트 / 워드에서 바이트를 빼는 데 사용됩니다.
SBB − 차용으로 빼기를 수행하는 데 사용됩니다.
DEC − 제공된 바이트 / 워드를 1 씩 감소시키는 데 사용됩니다.
NPG − 제공된 바이트 / 워드의 각 비트를 부정하고 1/2의 보수를 추가하는 데 사용됩니다.
CMP − 제공된 2 바이트 / 워드를 비교하는 데 사용됩니다.
AAS − 빼기 후 ASCII 코드를 조정하는 데 사용됩니다.
DAS − 빼기 후 소수점 조정에 사용합니다.
곱셈 수행 지침
MUL − 부호없는 바이트를 바이트 / 워드로 곱하는 데 사용됩니다.
IMUL − 부호있는 바이트를 바이트 / 워드로 곱하는 데 사용됩니다.
AAM − 곱셈 후 ASCII 코드를 조정하는 데 사용됩니다.
나눗셈 수행 지침
DIV − 부호없는 단어를 바이트로 나누거나 부호없는 더블 단어를 단어로 나누는 데 사용됩니다.
IDIV − 부호있는 단어를 바이트로 나누거나 부호있는 더블 단어를 단어로 나누는 데 사용됩니다.
AAD − 분할 후 ASCII 코드 조정에 사용합니다.
CBW − 하위 바이트의 부호 비트 사본으로 단어의 상위 바이트를 채우는 데 사용됩니다.
CWD − 더블 워드의 상위 단어를 하위 단어의 부호 비트로 채울 때 사용합니다.
비트 조작 지침
이러한 명령어는 데이터 비트가 관련된 작업, 즉 논리, 시프트 등과 같은 작업을 수행하는 데 사용됩니다.
다음은이 그룹의 지침 목록입니다.
논리 연산 수행 지침
NOT − 바이트 또는 워드의 각 비트를 반전하는 데 사용됩니다.
AND − 한 바이트 / 워드의 각 비트를 다른 바이트 / 워드의 해당 비트와 추가하는 데 사용됩니다.
OR − 바이트 / 워드의 각 비트를 다른 바이트 / 워드의 해당 비트와 곱하는 데 사용됩니다.
XOR − 다른 바이트 / 워드의 해당 비트와 함께 바이트 / 워드의 각 비트에 대해 Exclusive-OR 연산을 수행하는 데 사용됩니다.
TEST − 피연산자에 영향을주지 않고 플래그를 업데이트하기 위해 피연산자를 추가하는 데 사용됩니다.
교대 작업 수행 지침
SHL/SAL − 바이트 / 워드의 비트를 왼쪽으로 이동하고 LSB에 0 (S)을 넣는 데 사용됩니다.
SHR − 바이트 / 워드의 비트를 오른쪽으로 이동하고 MSB에 0 (S)을 넣는 데 사용됩니다.
SAR − 바이트 / 워드의 비트를 오른쪽으로 이동하고 이전 MSB를 새 MSB에 복사하는 데 사용됩니다.
회전 작업 수행 지침
ROL − 왼쪽으로 바이트 / 워드 비트를 회전하는 데 사용됩니다. 즉, MSB에서 LSB로, 캐리 플래그 [CF]로.
ROR − 바이트 / 워드 비트를 오른쪽으로 회전하는 데 사용됩니다. 즉, LSB에서 MSB로, 캐리 플래그 [CF]로.
RCR − 바이트 / 워드 비트를 오른쪽으로 회전하는 데 사용됩니다. 즉, LSB에서 CF로, CF에서 MSB로.
RCL − MSB에서 CF로, CF에서 LSB로 등 바이트 / 워드의 비트를 왼쪽으로 회전하는 데 사용됩니다.
문자열 지침
문자열은 바이트 / 워드 그룹이며 해당 메모리는 항상 순차적 인 순서로 할당됩니다.
다음은이 그룹의 지침 목록입니다.
REP − CX ≠ 0이 될 때까지 주어진 명령을 반복하는 데 사용됩니다.
REPE/REPZ − CX = 0 또는 제로 플래그 ZF = 1이 될 때까지 주어진 명령을 반복하는 데 사용됩니다.
REPNE/REPNZ − CX = 0 또는 제로 플래그 ZF = 1이 될 때까지 주어진 명령을 반복하는 데 사용됩니다.
MOVS/MOVSB/MOVSW − 한 문자열에서 다른 문자열로 바이트 / 워드를 이동하는 데 사용됩니다.
COMS/COMPSB/COMPSW − 두 문자열 바이트 / 단어를 비교하는 데 사용됩니다.
INS/INSB/INSW − I / O 포트에서 제공된 메모리 위치까지 입력 문자열 / 바이트 / 워드로 사용됩니다.
OUTS/OUTSB/OUTSW − 제공된 메모리 위치에서 I / O 포트로 출력 문자열 / 바이트 / 워드로 사용됩니다.
SCAS/SCASB/SCASW − 문자열을 스캔하고 해당 바이트를 AL의 바이트와 비교하거나 문자열 단어를 AX의 단어와 비교하는 데 사용됩니다.
LODS/LODSB/LODSW − 문자열 바이트를 AL에 저장하거나 문자열 단어를 AX에 저장하는 데 사용됩니다.
프로그램 실행 전송 명령 (분기 및 루프 명령)
이러한 명령어는 실행 중에 명령어를 전송 / 분기하는 데 사용됩니다. 다음 지침이 포함되어 있습니다.
조건없이 실행하는 동안 명령을 전송하는 명령-
CALL − 프로 시저를 호출하고 반환 주소를 스택에 저장하는 데 사용됩니다.
RET − 절차에서 메인 프로그램으로 돌아가는 데 사용됩니다.
JMP − 다음 명령으로 진행하기 위해 제공된 주소로 점프하는 데 사용됩니다.
일부 조건에서 실행하는 동안 명령을 전송하는 명령-
JA/JNBE − 초과 / 미만 / 동등 명령이 충족되면 점프하는 데 사용됩니다.
JAE/JNB − 위 / 아래가 아닌 명령어가 만족하는 경우 점프하는 데 사용됩니다.
JBE/JNA − 아래 / 같거나 / 위가 아닌 명령어가 만족하는 경우 점프하는 데 사용됩니다.
JC − 캐리 플래그 CF = 1 인 경우 점프에 사용
JE/JZ − 동일 / 제로 플래그 ZF = 1 인 경우 점프하는 데 사용됩니다.
JG/JNLE − 크거나 작지 않은 / 같음 명령이 만족하는 경우 점프하는 데 사용됩니다.
JGE/JNL − 명령어보다 크거나 같거나 작지 않은 경우 점프하는 데 사용됩니다.
JL/JNGE −보다 작거나 크지 않은 / 같음 명령이 만족하는 경우 점프하는 데 사용됩니다.
JLE/JNG − 명령보다 작거나 같거나 크지 않으면 점프하는 데 사용됩니다.
JNC − 캐리 플래그가없는 경우 점프하는 데 사용됩니다 (CF = 0).
JNE/JNZ − 같지 않거나 0이 아닌 경우 점프하는 데 사용 플래그 ZF = 0
JNO − 오버플로 플래그가없는 경우 점프에 사용 OF = 0
JNP/JPO − 패리티 / 패리티 홀수 PF = 0이 아닌 경우 점프에 사용
JNS − SF = 0에 서명하지 않으면 점프하는 데 사용
JO − 오버플로 플래그 OF = 1 인 경우 점프에 사용
JP/JPE − 패리티 / 패리티 PF = 1 인 경우 점프하는 데 사용
JS − 표시 플래그 SF = 1 인 경우 점프에 사용
프로세서 제어 지침
이러한 명령어는 플래그 값을 설정 / 재설정하여 프로세서 작업을 제어하는 데 사용됩니다.
다음은이 그룹의 지침입니다.
STC − 캐리 플래그 CF를 1로 설정하는 데 사용됩니다.
CLC − 캐리 플래그 CF를 0으로 클리어 / 리셋하는 데 사용
CMC − 캐리 플래그 CF 상태에서 보수를 넣는 데 사용됩니다.
STD − 방향 플래그 DF를 1로 설정하는 데 사용됩니다.
CLD − 방향 플래그 DF를 0으로 지우거나 재설정하는 데 사용됩니다.
STI − 인터럽트 활성화 플래그를 1로 설정하는 데 사용됩니다. 즉, INTR 입력을 활성화합니다.
CLI − 인터럽트 활성화 플래그를 0으로 지우는 데 사용됩니다. 즉, INTR 입력을 비활성화합니다.
반복 제어 지침
이러한 명령어는 주어진 명령어를 여러 번 실행하는 데 사용됩니다. 다음은이 그룹의 지침 목록입니다.
LOOP − 조건이 충족 될 때까지 명령 그룹을 반복하는 데 사용됩니다 (예 : CX = 0).
LOOPE/LOOPZ − ZF = 1 & CX = 0을 만족할 때까지 명령어 그룹을 반복하는 데 사용됩니다.
LOOPNE/LOOPNZ − ZF = 0 & CX = 0을 만족할 때까지 명령어 그룹을 반복하는 데 사용됩니다.
JCXZ − CX = 0 인 경우 제공된 주소로 이동하는 데 사용됩니다.
인터럽트 지침
이러한 명령어는 프로그램 실행 중에 인터럽트를 호출하는 데 사용됩니다.
INT − 지정된 서비스를 실행하고 호출하는 동안 프로그램을 중단하는 데 사용됩니다.
INTO − OF = 1 인 경우 실행 중 프로그램 중단에 사용
IRET − 인터럽트 서비스에서 메인 프로그램으로 복귀하는데 사용