일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- npm
- JUnit
- fetch
- EUREKA
- Vue3
- gradle
- Logging
- style
- Test
- NextJS
- Shell
- svelte
- springboot
- 오라클
- vuex
- loguru
- post
- NextJS13
- Java
- react
- nodejs
- fastapi
- d3js
- Spring
- Python
- vitejs
- InteliJ
- Vue
- ubuntu
- sveltekit
- Today
- Total
양군의 행복한 이야기
어셈블리 명령어 본문
어셈블리 명령어
(1) 로드(전송) 명령들
LD A, 0FFH - A 레지스터에 16진수 FF를 로드(세트)하라.
LD B, C - C 레지스터의 내용을 B 레지스터에 로드(전송)하라.
LD A, (8000H) - 메모리 8000H 번지의 내용을 A 레지스터에 로드(전송)하라.
LD D, (HL) - HL 레지스터가 지닌 수값과 같은 번지의 메모리 내용을 D 레지스터에 로드하라.
LD (8000H), A - A 레지스터의 내용을 메모리의 8000H 번지에 로드(전송)하라.
LD BC, 0FF88H - B 레지스터에 FFH, C 레지스터에 88H를 로드(세트)하라.
LD HL, (0FF88H) - L 레지스터에 FF88H 번지의 메모리 내용을, H 레지스터에 FF89H번지의 내용을 각각 로드(전송)하라.
(2) 교환, 블록 전송 명령들
EX DE, HL - DE 레지스터의 내용을 HL 레지스터의 내용과 교환하라.
EXX - BC, DE, HL 레지스터의 내용과 B'C', D'E', H'L' 레지스터의 내용을 교환하라.
LDIR (Load Increment Repeat) - HL 레지스터로 지정할 번지의 내용을 DE 레지스터로 지정한 번지에 전송하라. 또한 그 번지에 1번지씩 더하여,
BC 레지스터 내용 의 바이트수 값만큼 데이터를 거듭 전송하라.
LDDR (Load Decrement Repeat) - HL 레지스터로 지정한 번지의 내용을 DE레지스터로 지정한번지에 전송하라. 또한 그 번지에서 1번지씩 감하여,
BC 레지스터 내용의 바이트 수값만큼 데이터를 거듭 전송하라.
(3) 산술 연산 및 논리 연산 명령들
ADD A, 08H - A 레지스터의 내용에 08H를 더하라.
ADC A, B - A 레지스터의 내용에 B 레지스터의 내용과 자리올림을 더하라.
SUB B - A 레지스터의 내용에서 B 레지스터의 내용을 빼라.
SBC A, B - A 레지스터의 내용에서 B 레지스터의 내용과 자리빌림을 빼라.
ADD HL, BC - HL 레지스터의 내용에 BC 레지스터의 내용을 더하라.
SBC HL, BC - HL 레지스터의 내용에서 BC 레지스터의 내용과 자리빌림을 빼라.
AND B - A 레지스터와 B 레지스터의 내용에 AND를 취하고, 답을 A 레지스터에 남겨라.
XOR C - A 레지스터와 C 레지스터의 내용에 EXOR를 취하고, 그 결과를 A 레지스터에 남겨라.
INC D - D 레지스터의 내용에 1H를 더하라.
DEC BC - BC 레지스터의 내용에서 1H를 빼라.
(4) CPU 동작을 제어하는 명령들
NOP - CPU는 아무 일도 하지 말고, 다음 번지의 명령을 기다려라.
HALT - 이 명령으로 CPU의 동작을 정지시켜라.
EI (Enable Interrupt) - 가로채기 요구에 응답하도록 하라.
DI (Disable Interrupt) - 가로채기 요구에 응답하지 않도록 하라.
IM2 (Interrupt Mode) - 가로채기를 모드 2로 세트하라.
(5) 로테이트, 쉬프트 및 비트 조작 명령들
RL A - A 레지스터의 내용을 캐리도 포함시켜 1비트 왼쪽으로 회전하라.
RLC B - B 레지스터의 내용을 1비트 왼쪽으로 회전하라. 비트 7은 캐리 비트로 이동한다.
RLD/RRD - A 레지스터의 내용의 하위 4비트, HL 레지스터로 지정하는 번지의 메모리 내용의 상위 4비트 및 하위 4비트의 3자를 서로 4비트 단위로 교체하라.
SLA C - C 레지스터의 내용을 왼쪽으로 1비트씩 이동하라. 비트 7은 캐리 비트로 이동한다.
SRA D - D 레지스터의 내용을 오른쪽으로 1비트씩 이동하라. 비트 0은 캐리로 이동하고, 비트 7은 비트 6으로 이동하나 자신은 변하지 않는다.
SRL E - E 레지스터의 내용을 왼쪽으로 1비트씩 이동하라. 비트 0은 캐리로 이동하고, 비트 7에는 "0"이 들어간다.
BIT 2, B - B 레지스터의 비트 2를 조사하고, "0"이면 Z 플래그를 세트하라.
SET 3, C - C 레지스터의 비트 3을 "1"로 하라.
RES 4, D - D 레지스터의 비트 4를 "0"으로 하라.
(6) 명령의 실행 순서를 변경하는 명령들
JP 8000H - 8000H 번지로 점프하여 프로그램의 실행을 계속하라.
JP (HL) - HL 레지스터가 지시하는 번지로 점프하여 프로그램의 실행을 계속하라.
JP NZ, 90A0H - 연산 결과가 0이 아니면, 90A0H 번지로 점프하라.
JR DATA - 번지 차가 ??인 레이블(DATA)까지 상대 점프하라.
JR Z, LOOP - 연산 결과가 0이면, ??번지 앞선 레이블(LOOP)로 상대 점프하라.
다음 명령을 0H번지로 한다.
CALL 8844H - 8844H 번지에서 시작하는 서브루틴으로 점프하라.
CALL NC, 9933H - 캐리 플래그가 "1"이 아니면, 9933H 번지의 서브루틴으로 점프하라.
RET - 현재 실행 중인 서브루틴에서 원래의 프로그램으로 되돌아가라.
RET NZ - 연산 결과가 0이 아니면, 원래의 프로그램으로 되돌아가라.
RETI - 가로채기 처리 루틴에서 원래의 프로그램으로 되돌아가라.
(7) 입, 출력 명령들
IN A, (0FH) - 0FH 번지 포트의 데이터를 A 레지스터에 입력(전송)하라.
IN B, (C) - C 레지스터의 내용이 지시하는 번지의 포트에서 B 레지스터에 데이터를 입력하라.
INIR - C 레지스터가 지시하는 번지의 포트로부터의 데이터를 HL 레지스터가 지시하는 번지의 메모리에 전송하고, B 레지스터 값의 바이트 수만큼 1번지씩 증가시켜 나가면서 차례로 입력하라.
OUT (0FFH), A - A 레지스터의 내용을 FFH 번지의 포트로 출력하라.
OUT (C), B - B 레지스터의 내용을 C 레지스터가 지시하는 번지의 포트로 출력하라.