[Assembly] 어셈블리어 명령어 총정리

 명령어 

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 캐리를 포함하여 오른쪽으로 오퍼랜드만큼 회전 이동
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 Shift logical Right 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 InterruptS 인터럽트 인에이블 플레그 셋
WAIT Wait 프로세서를 일지 정지 상태로 한다
ESC Escape to External device 이스케이프 명령

 

 지시어 

지시어 내용 형식
SEGMENT
-
END
어셈블리 프로그램은 한 개 이상의 세그먼트들로 구성된다. SEGMENT 지시어는 하나의 세그먼트를 정의한다. segname SEGMENT ; 세그먼트 시작
PROC
-
ENDP
매크로 어셈블리에서는 프로그램의 실행 부분을 모듈로 작성할 수 있다. 이 모듈을 프로시저(Procedure)라 부르며, PROC 지시어가 이를 정의한다. procname PROC ; 프로시저의 시작
procname ENDP ; 프로시저의 끝
ASSUME 어셈블러에게 세그먼트 레지스터와 사용자가 작성한 세그먼트의 이름을 연결시킨다 DS : data_segname
CS : code_segname
ES : extra_segname
END 전제 프로그램의 끝을 나타냄 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 데이터값/문자열
EVEN 어셈블리시 이 지시어가 사용되는 곳의 주소가 짝수로 되도록 함 name DQ 초기값
PAGE 어셈블리 리스트의 형식을 결정 PAGE [length][,width]
TITLE 어셈블리 리스트의 각 페이지에 제목 출력 TITLE text

 

출처 : tong.nate.com/boxitem/post.do?action=clist&_boxID=2663800&_tongID=53713

댓글

Designed by JB FACTORY