[wd_asp elements='search' id=9]

intel 8086 어셈블리 명령어 & 지시어

8086 명령어

명  령  어설                                               명
Data Transfer
MOVMove데이터 이동 (전송)
PUSHPush오퍼랜드의 내용을 스택에 쌓는다
POPPop스택으로부터 값을 뽑아낸다.
XCHGExchange Register/memory with Register첫 번째 오퍼랜드와 두 번째 오퍼랜드 교환
INInput from AL/AX to Fixed port오퍼랜드로 지시된 포트로부터 AX에 데이터 입력
OUTOutput from AL/AX to Fixed port오퍼랜드가 지시한 포트로 AX의 데이터 출력
XLATTranslate byte to ALBX:AL이 지시한 데이블의 내용을 AL로 로드
LEALoad Effective Address to Register메모리의 오프셋값을 레지스터로 로드
LDSLoad Pointer to DSREG←(MEM), DS←(MEM+2)
LESLoad Pointer ti ESREG←(MEM), ES←(MEM+2)
LAHFLoad AH with Flags플래그의 내용을 AH의 특정 비트로 로드
SAHFStore AH into FlagsAH의 특정 비트가 플래그 레지스터로 전송
PUSHFPush Flags플래그 레지스터의 내용을 스택에 쌓음
POPFPop Flags스택으로부터 플래그 레지스터로 뽑음
Arithmetic
ADDAdd캐리를 포함하지 않은 덧셈
SBBSubtract with Borrow캐리를 포함한 뺄셈
DECDecrement오퍼랜드 내용을 1 감소
NEGChange Sign오퍼랜드의 2의 보수, 즉 부호 반전
CMPCompare두 개의 오퍼랜드를 비교한다
ADCAdd with Carry캐리를 포함한 덧셈
INCIncrement오퍼랜드 내용을 1 증가
AAAASCII adjust for Add덧셈 결과 AL값을 UNPACK 10진수로 보정
DAADecimal adjust for Add덧셈 결과의 AL값을 PACK 10진수로 보정
SUBSubtract캐리를 포함하지 않은 뺄셈
AASASCII adjust for Subtract뺄셈 결과 AL값을 UNPACK 10진수로 보정
DASDecimal adjust for Subtract뺄셈 결과의 AL값을 PACK 10진수로 보정
MULMultiply (Unsigned)AX와 오퍼랜드를 곱셈하여 결과를 AX 또는 DX:AX에 저장
IMULInteger Multiply (Signed)부호화된 곱셈
AAMASCII adjust for Multiply곱셈 결과 AX값을 UNPACK 10진수로 보정
DIVDivide (Unsigned)AX 또는 DX:AX 내용을 오퍼랜드로 나눔. 몫은 AL, AX 나머지는 AH, DX로 저장
IDIVInteger Divide (Signed)부호화된 나눗셈
AADASCII adjust for Divide나눗셈 결과 AX값을 UNPACK 10진수로 보정
CBWConvert byte to wordAL의 바이트 데이터를 부호 비트를 포함하여 AX 워드로 확장
CWDConvert word to double wordAX의 워드 데이터를 부호를 포함하여 DX:AX의 더블 워드로 변환
Logic
NOTInvert오퍼랜드의 1의 보수, 즉 비트 반전
SHL/SALShift logical / arithmetic Left왼쪽으로 오퍼랜드만큼 자리 이동 (최하위 비트는 0)
SHRShift logical Right오른쪽으로 오퍼랜드만큼 자리 이동 (최상위 비트 0)
SARShift arithmetic Right오른쪽 자리이동, 최상위 비트는 유지
ROLRotate Left왼쪽으로 오퍼랜드만큼 회전 이동
RORRotate Right오른쪽으로 오퍼랜드만큼 회전 이동
RCLRotate through Carry Left캐리를 포함하여 왼쪽으로 오퍼랜드만큼 회전 이동
RCRRotate through Carry Right캐리를 포함하여 오른쪽으로 오퍼랜드만큼 회전 이동
ANDAnd논리 AND
TESTAnd function to Flags, no result첫 번째 오퍼랜드와 두 번째 오퍼랜드를 AND하여 그 결과로 플래그 세트
OROr논리 OR
XORExclusive Or배타 논리 합 (OR)
String Manipulation
REPRepeatREP 뒤에 오는 스트링 명령을 CX가 0이 될 때까지 반복
MOVSMove StringDS:SI가 지시한 메모리 데이터를 ES:DI가지시한 메모리로 전송
CMPSCompare StringDS:SI와 ES:DI의 내용을 비교하고 결과에 따라 플래그 설정
SCASScan StringAL 또는 AX와 ES:DI가 지시한 메모리 내용 비교하고 결과에 따라 플래그 설정
LODSLoad StringSI 내용을 AL 또는 AX로 로드
STOSStore StringAL 또는 AX를 ES:DI가 지시하는 메모리에 저장
Control Transfer
CALLCall프로시저 호출
JMPUnconditional Jump무조건 분기
RETReturn from CALLCALL로 스택에 PUSH된 주소로 복귀
JE/JZJump on Equal / Zero결과가 0이면 분기
JL/JNGEJump on Less / not Greater or Equal결과가 작으면 분기 (부호화된 수)
JB/JNAEJump on Below / not Above or Equal결과가 작으면 분기 (부호화 안 된 수)
JBE/JNAJump on Below or Equal / not Above결과가 작거나 같으면 분기 (부호화 안 된 수)
JP/JPEJump on Parity / Parity Even패리티 플레그가 1이면 분기
JOJump on Overflow오버플로가 발생하면 분기
JSJump on Sign부호 플레그가 1이면 분기
JNE/JNZJump on not Equal / not Zero결과가 0이 아니면 분기
JNL/JGEJump on not Less / Greater or Equal결과가 크거나 같으면 분기 (부호화된 수)
JNLE/JGJump on not Less or Equal / Greater결과가 크면 분기 (부호화된 수)
JNB/JAEJump on not Below / Above or Equal결과가 크거나 같으면 분기 (부호화 안 된 수)
JNBE/JAJump on not Below or Equal / Above결과가 크면 분기 (부호화 안 된 수)
JNP/JPOJump on not Parity / Parity odd패리티 플레그가 0이면 분기
JNOJump on not Overflow오버플로우가 아닌 경우 분기
JNSJump on not Sign부호 플레그가 0이면 분기
LOOPLoop CX timesCX를 1감소하면서 0이 될 때까지 지정된 라벨로 분기
LOOPZ/LOOPELoop while Zero / Equal제로 플레그가 1이고 CX≠0이면 지정된 라벨로 분기
LOOPNZ/LOOPNELoop while not Zero / not Equal제로 플레그가 0이고 CX≠0이면 지정된 라벨로 분기
JCXZJump on CX ZeroCX가 0이면 분기
INTInterrupt인터럽트 실행
INTOInterrupt on Overflow오버플로우가 발생하면 인터럽트 실행
IRETInterrupt Return인터럽트 복귀 (리턴)
Processor Control
CLCClear Carry캐리 플레그 클리어
CMCComplement Carry캐리 플레그를 반전
CLDClear Direction디렉션 플레그를 클리어
CLIClear Interrupt인터럽트 플레그를 클리어
HLTHalt정지
LOCKBus Lock prefix
STCSet Carry캐리 플레그 셋
NOPNo operation
STDSet Direction디렉션 플레그 셋
STISet Interrupt인터럽트 인에이블 플레그 셋
WAITWait프로세서를 일지 정지 상태로 한다
ESCEscape to External device이스케이프 명령

8086 지시어

지시어내                                  용형                                  식
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_segname
END전제 프로그램의 끝을 나타냄END
데이터 정의 지시어 : 프로그램에서 데이터를 저장할 기억 장소를 정의, 초기값 부여
DBDefine Bytename DB 초기값
DWDefine Wordname DW 초기값
DDDefine Double Wordname DD 초기값
DQDefine Quad Wordname DQ 초기값
DTDefine Ten Bytesname DT 초기값
EQU변수 이름에 데이터값이나 문자열 정의name EQU 데이터값/문자열
=EQU와 달리 정의된 값을 변경 가능
EVEN어셈블리시 이 지시어가 사용되는 곳의 주소가 짝수로 되도록 함
PAGE어셈블리 리스트의 형식을 결정PAGE [length][,width]
TITLE어셈블리 리스트의 각 페이지에 제목 출력TITLE text

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Scroll to Top