일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- elastic stack
- hardening
- Windows
- ansible
- x-pack
- miniconda
- ssh key 배포
- 보안양파
- XCP-ng
- 한글가이드
- proxycfg
- Kibana
- Kibana server is not ready yet
- macos
- GitLab
- centos 8
- freebsd
- endpoint security
- docker
- G-suite
- Proxy
- pfsense
- PlayBook
- xe guest utilities
- ELASTIC
- application security
- bash
- Elasticsearch
- 로그인불가
- Today
- Total
선 밖에 선 자유인
INTEL 8086 어셈블리 명령어 & 지시어 본문
명령어 |
설 명 | ||||
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하여 그 결 과로 플래그 세트. 영향받는 플래그 => ZF, CF, OF | |||
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 |
어셈블리 프로그램은 한 개 이상의 세그먼트들로 구성된다. SEGMENT 지시어는 하나의 세그먼트를 정의한다. |
segname SEGMENT ; 세그먼트 시작 |
PROC |
매크로 어셈블리에서는 프로그램의 실행 부분을 모듈로 작성할 수 있다. 이 모듈을 프로시저(Procedure)라 부르며, PROC 지시어가 이를 정의한다. |
procname PROC ; 프로시저의 시작 |
ASSUME |
어셈블러에게 세그먼트 레지스터와 사용자가 작성한 세그먼트의 이름을 연결시킨다. |
ASSUME SS:stack_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 데이터값/문자열 |
= |
EQU와 달리 정의된 값을 변경 가능 |
|
EVEN |
어셈블리시 이 지시어가 사용되는 곳의 주소가 짝수로 되도록 함 |
|
PAGE |
어셈블리 리스트의 형식을 결정 |
PAGE [length][,width] |
TITLE |
어셈블리 리스트의 각 페이지에 제목 출력 |
TITLE text |