주소지정방식의 종류
- 의미 주소지정방식
- 명령어 형식에서 주소 필드를 필요로 하지 않는 방식
- 연산코드 필드에 지정된 묵시적 의미의 오퍼랜드를 지정
- ex) ADD; TOS ← TOS + TOS-1
- 기억장치 스택에서 ADD와 같은 명령어는 스택의 맨 위 항목과 그 아래 항목을 더하여 스택의 맨 위에 저장하는 명령어로서, 오퍼랜드가 스택의 맨 위에 있다는 것을 묵시적으로 가정함
- 즉치 주소지정방식
- 명령어 자체 내에 오퍼랜드를 지정하고 있는 방식
- 오퍼랜드 필드의 내용이 실제 사용될 데이터
- 레지스터나 변수의 초기화에 유용
- ex) LDI 100, R1; R1 ← 100
- 기호 표기 : LDA #NBR
- 직접 주소지정방식
- 명령어의 주소필드에 직접 오퍼랜드의 주소를 저장시키는 방식
- 기억장치에의 접근이 한번에 이루어짐
- ex) LDA ADRS; AC ← M[ADRS]
- 간접 주소지정방식
- 명령어의 주소필드에 유효주소가 저장되어있는 기억장치 주소를 기억시키는 방식
- ex) LDA [ADRS]; AC ← M[M[ADRS]]
- 레지스터 주소지정방식
- 오퍼랜드 필드에 레지스터가 기억되는 방식
- 레지스터에 오퍼랜드가 들어있음(유효주소가 없음)
- ex) LDA R1; AC ← R1
- 레지스터 간접 주소지정방식
- 레지스터가 실제 오퍼랜드가 저장된 기억장치의 주소 값을 갖고 있는 방식
- ex) LDA (R1); AC ← M[R1]
- 상대 주소지정방식
- 유효주소를 계산하기 위해 처리장치 내에 있는 특정 레지스터의 내용에 명령어 주소필드 값을 더하는 방식
- 특정 레지스터로 프로그램 카운터(PC)가 주로 사용
- ex) LDA $ADRS; AC ← M[ADRS+PC]
- 유효주소 = 명령어 주소부분의 내용 + PC의 내용
- 인덱스된 주소지정방식
- 인덱스 레지스터의 내용을 명령어 주소 부분에 더해서 유효주소를 얻는 방식
- ex) LDA ADRS(R1); AC ← M[ADRS+R1]
- 유효주소 = 명령어 주소부분의 내용 + 인덱스 레지스터의 내용
명령어 종류
- 데이터 전송 명령어
- 한 장소에서 다른 장소로 데이터를 전송하는 명령어
- 레지스터와 레지스터 사이, 레지스터와 기억장치 사이, 또는 기억장치와 기억장치 사이에 데이터를 이동하는 기능
- 입출력 명령어가 포함
전송명령어 |
니모닉 |
기능 |
Load |
LD |
기억장치로부터 레지스터로의 전송 |
Store |
ST |
레지스터로부터 기억장치로의 전송 |
Move |
MOVE |
레지스터로부터 다른 레지스터로의 전송 |
Exchange |
XCH |
두 레지스터 간 또는 레지스터와 기억장치 간의 데이터 교환 |
Push |
PUSH |
기억장치의 스택과 레지스터 간의 데이터 전송 |
Pop |
POP |
Input |
IN |
레지스터와 입출력장치 간의 데이터 전송 |
Output |
OUT |
- 데이터 처리 명령어
- 데이터에 대한 연산을 실행하고 컴퓨터에 계산능력을 제공
산술명령어 |
니모닉 |
기능 |
Increment |
INC |
1 증가 |
Decrement |
DEC |
1 감소 |
Add |
ADD |
덧셈 |
Subtract |
SUB |
뺄셈 |
Multiply |
MUL |
곱셈 |
Divide |
DIV |
나눗셈 |
Add with carry |
ADDC |
캐리를 포함한 덧셈 |
Subtract with borrow |
SUBB |
빌림을 포함한 뺄셈 |
Negate |
NEG |
2의 보수 |
논리명령어 |
니모닉 |
기능 |
Clear |
CLR |
모든 비트를 0으로 리셋 |
Set |
SET |
모든 비트를 1로 셋 |
Complement |
COM |
모든 비트를 반전 |
AND |
AND |
비트별 AND 연산 |
OR |
OR |
비트별 OR 연산 |
Exclusive-OR |
XOR |
비트별 XOR 연산 |
Clear carry |
CLRC |
캐리 비트의 리셋 |
Set carry |
SETC |
캐리 비트의 셋 |
Complement carry |
COMC |
(반전)보수 |
- 프로그램 제어 명령어
- 프로그램 수행의 흐름을 제어
- 다른 프로그램의 세그먼트로 분기
제어 명령어 |
니모닉 |
기능 |
Branch |
BR |
조건 혹은 무조건적으로 유효주소로 분기 |
Jump |
JUP |
Skip next instruction |
SKP |
조건이 만족되면 다음 명령어를 수행하지 않고 넘어감 |
Call procedure |
CALL |
서브루틴 호출 |
Return from procedure |
RET |
서브루틴 실행 후 복귀 |
Compare(by subtraction) |
CMP |
두 오퍼랜드의 뺄셈을 통해 상태 레지스터의 값을 변환 |
Test(by ANDing) |
TEST |
논리 AND 연산만 구현 |