-
8086 어셈블리 명령어 ( 8086 Assembly )Programming 2009. 3. 17. 22:23
명 령 어
설 명
Data Transfer
MOV
Move
데이터 이동 (전송)
PUSH
Push
오퍼랜드의 내용을 스택에 쌓는다
POP
Pop
스택으로부터 값을 뽑아낸다.
XCHG
Exchange Register/memory with Register
첫 번째 오퍼랜드와 두 번째 오퍼랜드 교환
IN
Input from AL/AX to Fixed port
오퍼랜드로 지시된 포트로부터 AX에 데이터 입력
OUT
Output from AL/AX to Fixed port
오퍼랜드가 지시한 포트로 AX의 데이터 출력
XLAT
Translate byte to AL
BX:AL이 지시한 데이블의 내용을 AL로 로드
LEA
Load Effective Address to Register
메모리의 오프셋값을 레지스터로 로드
LDS
Load Pointer to DS
REG←(MEM), DS←(MEM+2)
LES
Load Pointer ti ES
REG←(MEM), ES←(MEM+2)
LAHF
Load AH with Flags
플래그의 내용을 AH의 특정 비트로 로드
SAHF
Store AH into Flags
AH의 특정 비트가 플래그 레지스터로 전송
PUSHF
Push Flags
플래그 레지스터의 내용을 스택에 쌓음
POPF
Pop Flags
스택으로부터 플래그 레지스터로 뽑음
Arithmetic
ADD
Add
캐리를 포함하지 않은 덧셈
SBB
Subtract with Borrow
캐리를 포함한 뺄셈
DEC
Decrement
오퍼랜드 내용을 1 감소
NEG
Change Sign
오퍼랜드의 2의 보수, 즉 부호 반전
CMP
Compare
두 개의 오퍼랜드를 비교한다
ADC
Add with Carry
캐리를 포함한 덧셈
INC
Increment
오퍼랜드 내용을 1 증가
AAA
ASCII adjust for Add
덧셈 결과 AL값을 UNPACK 10진수로 보정
DAA
Decimal adjust for Add
덧셈 결과의 AL값을 PACK 10진수로 보정
SUB
Subtract
캐리를 포함하지 않은 뺄셈
AAS
ASCII adjust for Subtract
뺄셈 결과 AL값을 UNPACK 10진수로 보정
DAS
Decimal adjust for Subtract
뺄셈 결과의 AL값을 PACK 10진수로 보정
MUL
Multiply (Unsigned)
AX와 오퍼랜드를 곱셈하여 결과를 AX 또는 DX:AX에 저장
IMUL
Integer Multiply (Signed)
부호화된 곱셈
AAM
ASCII adjust for Multiply
곱셈 결과 AX값을 UNPACK 10진수로 보정
DIV
Divide (Unsigned)
AX 또는 DX:AX 내용을 오퍼랜드로 나눔. 몫은 AL, AX 나머지는 AH, DX로 저장
IDIV
Integer Divide (Signed)
부호화된 나눗셈
AAD
ASCII adjust for Divide
나눗셈 결과 AX값을 UNPACK 10진수로 보정
CBW
Convert byte to word
AL의 바이트 데이터를 부호 비트를 포함하여 AX 워드로 확장
CWD
Convert word to double word
AX의 워드 데이터를 부호를 포함하여 DX:AX의 더블 워드로 변환
Logic
NOT
Invert
오퍼랜드의 1의 보수, 즉 비트 반전
SHL/SAL
Shift logical / arithmetic Left
왼쪽으로 오퍼랜드만큼 자리 이동 (최하위 비트는 0)
SHR
Shift logical Right
오른쪽으로 오퍼랜드만큼 자리 이동 (최상위 비트 0)
SAR
Shift arithmetic Right
오른쪽 자리이동, 최상위 비트는 유지
ROL
Rotate Left
왼쪽으로 오퍼랜드만큼 회전 이동
ROR
Rotate Right
오른쪽으로 오퍼랜드만큼 회전 이동
RCL
Rotate through Carry Left
캐리를 포함하여 왼쪽으로 오퍼랜드만큼 회전 이동
RCR
Rotate through Carry Right
캐리를 포함하여 오른쪽으로 오퍼랜드만큼 회전 이동
AND
And
논리 AND
TEST
And function to Flags, no result
첫 번째 오퍼랜드와 두 번째 오퍼랜드를 AND하여 그 결과로 플래그 세트
OR
Or
논리 OR
XOR
Exclusive Or
배타 논리 합 (OR)
String Manipulation
REP
Repeat
REP 뒤에 오는 스트링 명령을 CX가 0이 될 때까지 반복
MOVS
Move String
DS:SI가 지시한 메모리 데이터를 ES:DI가지시한 메모리로 전송
CMPS
Compare String
DS:SI와 ES:DI의 내용을 비교하고 결과에 따라 플래그 설정
SCAS
Scan String
AL 또는 AX와 ES:DI가 지시한 메모리 내용 비교하고 결과에 따라 플래그 설정
LODS
Load String
SI 내용을 AL 또는 AX로 로드
STOS
Store String
AL 또는 AX를 ES:DI가 지시하는 메모리에 저장
Control Transfer
CALL
Call
프로시저 호출
JMP
Unconditional Jump
무조건 분기
RET
Return from CALL
CALL로 스택에 PUSH된 주소로 복귀
JE/JZ
Jump on Equal / Zero
결과가 0이면 분기
JL/JNGE
Jump on Less / not Greater or Equal
결과가 작으면 분기 (부호화된 수)
JB/JNAE
Jump on Below / not Above or Equal
결과가 작으면 분기 (부호화 안 된 수)
JBE/JNA
Jump on Below or Equal / not Above
결과가 작거나 같으면 분기 (부호화 안 된 수)
JP/JPE
Jump on Parity / Parity Even
패리티 플레그가 1이면 분기
JO
Jump on Overflow
오버플로가 발생하면 분기
JS
Jump on Sign
부호 플레그가 1이면 분기
JNE/JNZ
Jump on not Equal / not Zero
결과가 0이 아니면 분기
JNL/JGE
Jump on not Less / Greater or Equal
결과가 크거나 같으면 분기 (부호화된 수)
JNLE/JG
Jump on not Less or Equal / Greater
결과가 크면 분기 (부호화된 수)
JNB/JAE
Jump on not Below / Above or Equal
결과가 크거나 같으면 분기 (부호화 안 된 수)
JNBE/JA
Jump on not Below or Equal / Above
결과가 크면 분기 (부호화 안 된 수)
JNP/JPO
Jump on not Parity / Parity odd
패리티 플레그가 0이면 분기
JNO
Jump on not Overflow
오버플로우가 아닌 경우 분기
JNS
Jump on not Sign
부호 플레그가 0이면 분기
LOOP
Loop CX times
CX를 1감소하면서 0이 될 때까지 지정된 라벨로 분기
LOOPZ/LOOPE
Loop while Zero / Equal
제로 플레그가 1이고 CX≠0이면 지정된 라벨로 분기
LOOPNZ/LOOPNE
Loop while not Zero / not Equal
제로 플레그가 0이고 CX≠0이면 지정된 라벨로 분기
JCXZ
Jump on CX Zero
CX가 0이면 분기
INT
Interrupt
인터럽트 실행
INTO
Interrupt on Overflow
오버플로우가 발생하면 인터럽트 실행
IRET
Interrupt Return
인터럽트 복귀 (리턴)
Processor Control
CLC
Clear Carry
캐리 플레그 클리어
CMC
Complement Carry
캐리 플레그를 반전
CLD
Clear Direction
디렉션 플레그를 클리어
CLI
Clear Interrupt
인터럽트 플레그를 클리어
HLT
Halt
정지
LOCK
Bus Lock prefix
STC
Set Carry
캐리 플레그 셋
NOP
No operation
STD
Set Direction
디렉션 플레그 셋
STI
Set Interrupt
인터럽트 인에이블 플레그 셋
WAIT
Wait
프로세서를 일지 정지 상태로 한다
ESC
Escape to External device
이스케이프 명령
지시어
내 용
형 식
SEGMENT
-
END어셈블리 프로그램은 한 개 이상의 세그먼트들로 구성된다. SEGMENT 지시어는 하나의 세그먼트를 정의한다.
segname SEGMENT ; 세그먼트 시작
⋮ ; 세그먼트 내용
segname ENDS ; 세그먼트 끝PROC
-
ENDP매크로 어셈블리에서는 프로그램의 실행 부분을 모듈로 작성할 수 있다. 이 모듈을 프로시저(Procedure)라 부르며, PROC 지시어가 이를 정의한다.
procname PROC ; 프로시저의 시작
⋮ ; 프로시저의 내용
procname ENDP ; 프로시저의 끝ASSUME
어셈블러에게 세그먼트 레지스터와 사용자가 작성한 세그먼트의 이름을 연결시킨다.
ASSUME SS:stack_segname,
DS:data_segname,
CS:code_segname,
ES:extra_segnameEND
전제 프로그램의 끝을 나타냄
END
데이터 정의 지시어 : 프로그램에서 데이터를 저장할 기억 장소를 정의, 초기값 부여
DB
Define Byte
name DB 초기값
DW
Define Word
name DW 초기값
DD
Define Double Word
name DD 초기값
DQ
Define Quad Word
name DQ 초기값
DT
Define Ten Bytes
name DT 초기값
EQU
변수 이름에 데이터값이나 문자열 정의
name EQU 데이터값/문자열
=
EQU와 달리 정의된 값을 변경 가능
EVEN
어셈블리시 이 지시어가 사용되는 곳의 주소가 짝수로 되도록 함
PAGE
어셈블리 리스트의 형식을 결정
PAGE [length][,width]
TITLE
어셈블리 리스트의 각 페이지에 제목 출력
TITLE text
728x90반응형