어셈블리 명령어는 다음과 같다.
|
명 령 어 |
설 명 |
|
|
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 |
이스케이프 명령 |
|
데이터 정의 지시어 : 프로그램에서 데이터를 저장할 기억 장소를 정의, 초기값 부여 |
||
|
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 |
'Programming Language > Assembly' 카테고리의 다른 글
| [Assembly] * 찍어보기 (0) | 2016.12.04 |
|---|---|
| [Assembly] Hello World 출력하기 (0) | 2016.12.04 |
| [Assembly] syscall table for x86_64 (0) | 2016.12.04 |
| [Assembly] syscall table for x86 (0) | 2016.12.04 |
| [Assembly] 레지스터 개념 (0) | 2016.12.04 |