7장 마이크로프로세서의 명령어수행과 주소지정 방식 Slide 1 (of 29)
“마이크로프로세서의 명령어 수행 사이클 과 주소지정방식”에 대해 알아보겠습니다. 학습개요 이번 시간에는... “마이크로프로세서의 명령어 수행 사이클 과 주소지정방식”에 대해 알아보겠습니다. 학 습 목 표 이장에서는 CPU 에서 명령어를 수행하는 사이클에 대해 공부하고 주소지정방식에 대해 알아본다. 학 습 목 차 명령어 수행 주소지정방식 Slide 2 (of 29)
명령어 = OP code(명령어 코드) + Operand(실행자) Instruction Cycle Instruction Cycle 명령어 사이클(instruction cycle)은 Memory에 저장되어 있는 program을 읽어와서 명령어를 실행하는 사이클을 말한다. 한 개의 명령어는 명령어 코드(OP_code)와 실행자(Operand) 로 구성된다. 명령어 = OP code(명령어 코드) + Operand(실행자) 제어장치(CU : Control Unit)와 메모리 구조 100 PC MAR Decoder (명령어 해석기) IR CU 제어신호 CPU Memory 100H 101H 102H 103H MBR MAR : Memory Address Register MBR(MDR): Memory Buffer Register(Memory Data Register) IR:Instruction Register(명령어 레지스터) Slide 3 (of 29)
Instruction Cycle Instruction Cycle 따라서 한 개 명령어를 실행하기 위해서 ① 먼저 읽어올 명령어가 저장되어 있는 메모리를 지정한다. ② 메모리에 저장된 명령어를 먼저 제어장치의 명령어 레지스터(IR:instruction Register)로 읽어온다. ③ 읽어온 명령어는 명령어 해석기에서 해석한 다음 해당 명령어에 대한 제어신호들을 생성하여 제어한다. ④ 해석된 명령어에 의해 실행한다 ex) 메모리에 저장되어 있는 실행자(데이터)를 Acc에 읽어오는 명령어를 실행해 보자 어셈블리 언어 : LD A,56H (Acc에 56H을 load 하라는 명령어) 기계어 : 3E, 56 OP_code Operand Slide 4 (of 29)
Instruction Cycle Instruction Cycle 100 PC MAR Decoder (명령어 해석기) IR CU 제어신호 CPU Memory OP_code 100H 101H 102H 103H 3EH 56H Operand MBR Slide 5 (of 29)
Instruction Cycle Instruction Cycle 초기상태 에서 RUN 100H를 실행해 보자 (1) Instruction Fetch cycle 100 PC MAR Decoder (명령어 해석기) IR CU 제어신호 CPU T0 Memory OP_code 100H 101H 102H 103H 3EH 56H T1 3EH T2 MBR(3EH) (1) T0 : PC → MAR ( 100 을 MAR로 전송) (2) T1 : [M] → MBR , PC=PC+1 (100번지 내용을 MBR로 전송) (3) T2 : MBR → IR (3E(op code)를 IR로 load하여 해석) Instruction Fetch cycle Slide 6 (of 29)
Instruction Cycle Instruction Cycle (2) Instruction execution cycle CPU PC T3 MAR Memory Operand 101 101 100H 101H 102H 103H 3EH 56H CU T4 IR 3EH 제어신호 Decoder (명령어 해석기) MBR(56H) T5 Acc 56H (4) T3 : PC → MAR (101번지를 MAR로 전송) (5) T4 : [M] → MBR , PC=PC+1 (101번지 MBR로 전송) (6) T5 : MBR → Acc (MBR(56)을 Acc로 전송) Instruction execution cycle Slide 7 (of 29)
Instruction Cycle Instruction Cycle (3) One Instruction cycle T0 T1 T2 T3 T4 T5 T0 One Instruction cycle [M]→ MBR PC=PC+1 [M]→MBR PC=PC+1 PC→ MAR MBR→ IR PC→ MAR MBR→Acc Instruction Fetch (Machine cycle One) 실행 cycle (Machine cycle) Slide 8 (of 29)
Instruction Cycle Instruction Cycle ex) 9000H번지의 내용을 Acc로 읽어오는 명령어 명령어를 실행해 보자. 9000H번지에는 37H가 저장되어 있다. 어셈블리 언어 : LD A,(9000H) (Acc에 9000H 번지의 내용 37H를 load 하라는 명령어) 기계어 : 2A, 00, 90 OP_code Operand Slide 9 (of 29)
Instruction Cycle Instruction Cycle (1) Instruction Fetch cycle T0 CPU PC MAR Memory OP_code 100 100 100H 101H 102H 103H 9000H 2AH 00H 90H 37H Operand CU IR 2AH 제어신호 Decoder (명령어 해석기) T2 T1 MBR(2AH) Acc (1) T0 : PC → MAR ( 100 을 MAR로 전송) (2) T1 : [M] → MBR , PC=PC+1 (100번지 내용을 MBR로 전송) (3) T2 : MBR → IR (2A(op code)를 IR로 load하여 해석) Instruction Fetch cycle Slide 10 (of 29)
Instruction Cycle Instruction Cycle (2) Instruction execution cycle CPU PC MAR T3 Memory OP_code 100 100 100H 101H 102H 103H 9000H T9 2AH 00H 90H 37H Temp2 Temp1 T6 Operand 90 00 T10 CU 2AH T7 T4 IR T5 제어신호 Decoder (명령어 해석기) T8 MBR(2AH) T11 Acc 37H T12 Slide 11 (of 29)
Instruction Cycle Instruction Cycle (4) T3 : PC → MAR (101번지를 MAR로전송) (5) T4 : [M] → MBR , PC=PC+1 (101번지 MBR로 전송) (6) T5 : MBR → Temp1 (MBR(00H)을 Temp1 레지스터로 전송) (7) T6 : PC → MAR (102번지를 MAR로 전송) (8) T7 : [M] → MBR , PC=PC+1 (102번지 MBR로전송) (9) T8 : MBR → Temp2 (MBR(90H)을 Temp2 레지스터로 전송) (10) T9 : Temp → PC (Temp2, Temp2의 9000H를 PC로 전송한다) (11) T10 : PC → MAR (9000H번지를 MAR로 전송) (12) T11 : [M] → MBR , PC=PC+1 (9000H번지 내용을 MBR로 전송) (13) T12 : MBR → Acc (MBR(37H)을 Acc로 전송) Instruction execution cycle Slide 12 (of 29)
Addressing Mode 주소지정방식(Addressing Mode) 개요 Register와 Memory에서 서로들 간의 Data 전송방법을 주소지정방식(addressing mode)라 한다 Register Memory 주소지정방식의 종류는 다음과 같다. ① Immediate addressing mode (즉치 주소지정 방식) ② Direct addressing mode(직접 주소지정방식) ③ Register addressing(레지스터 주소지정 방식) ④ Indirect addressing mode(간접 주소지정 방식) ⑤ Implied addressing mode(함축 주소지정 방식) ⑥ Relative addressing mode(상대 주소지정 방식) ⑦ Indexed addressing mode(지표 주소지정 방식) ⑧ Modified Page Zero addressing mode(제로 페이지 주소지정 방식) ⑨ Bit addressing (비트 주소지정 방식) Slide 13 (of 29)
Addressing Mode Immediate Addressing Mode 메모리로부터 즉치(숫자)를 Register에 전송하는 주소지정방식을 즉치 주소지정 방식(immediate addressing mode)라 한다 형식 : OP_code + 1 byte operand Mnemonic : LD r, nH ( r 은 A, B, C, D, E, H, L register) ex) LD A, 25H ( A ← 25H : Acc에 즉치 25H를 로드하는 명령어) 3E, 25 OP-code Operand Acc 8000H 8001H 8002H 8003H 3EH 25H 25 Slide 14 (of 29)
⊕ 25H Addressing Mode Immediate Addressing Mode ex) ADD A, 25H ( A ← A + 25 : Acc의 내용에 즉치 25H를 가산한 후 Acc에 로드하는 명령어) C6, 25 OP-code Operand ◈ 실행 전 ◈ 실행 후 Acc Acc 8000H 8001H 8002H 8003H C6H 25H 30 55 25H ⊕ Slide 15 (of 29)
25H Addressing Mode Immediate Addressing Mode 16bit 즉치를 Register에 Load하는 명령어로서 확장 즉치 주소지정 방식(Immediate Extended Addressing Mode) 이라고도 한다 형식 : OP_code + 2 byte operand Mnemonic : LD rr, nnH ( rr 은 BC, DE, HL register) ex) LD HL, 2015H (HL ← 2015H : 즉치 2015H를 HL 레지스터에 로드하는 명령어 21, 15 , 20 OP-code Operand H L 20 15 8000H 8001H 8002H 8003H 21H 15H 20H 25H Slide 16 (of 29)
Addressing Mode Direct Addressing Mode 실행자가 가르키는 메모리번지의 내용을 직접 Register에 전송하는 주소지정방식을 직접 주소지정 방식 (direct addressing mode)라 한다 형식 : OP_code + 2 byte operand Mnemonic : LD r, (nnH) , LD (nnH), r ( r 은 A, B, C, D, E, H, L register) ex) LD A,(9000H) (A ← (9000H) : 9000H 번지의 내용을 직접 A에 Load하는 명령어 3A , 00, 90 OP-code Operand 8000H 8001H 8002H 8003H 3AH 00H 90H Acc 56 직접 전송 9000H 56H Slide 17 (of 29)
Addressing Mode Direct Addressing Mode ex) LD (8500H),A ( (8500H) ← A : Acc의 내용을 8500H 번지에 직접 전송하는 명령어 32 , 00, 85 OP-code Operand 8000H 8001H 8002H 8003H 32H 00H 85H Acc 74 직접 전송 8500H 74H Slide 18 (of 29)
Addressing Mode Direct Addressing Mode 16bit Register에 직접 데이터를 Load하는 명령어로서 확장 직접 주소지정 방식(direct Extended Addressing Mode) 이라고도 한다 형식 : OP_code + 2 byte operand Mnemonic : LD rr, (nnH) , LD (nnH), rr ( rr 은 BC, DE, HL register) ex) LD HL, (8500H) ( H ← (8501H), L ← (8500H) : 8050H, 8051H 번지의 내용을 HL 레지스터로 직접 전송하는 직접 전송하는 명령어 2A , 00, 85 OP-code Operand 8000H 8001H 8002H 8003H 2AH 00H 85H H L 12 34 8500H 8501H 34H 12H 16비트 데이터직접 전송 Slide 19 (of 29)
Addressing Mode Direct Addressing Mode ex) LD (8500H). BC ( (8501H) ← C, (8500H) ← B : BC 레지스터 내용을 8050H, 8051H 번지에 직접 전송하는 직접 전송하는 명령어 ED,43 , 00, 85 OP-code Operand 8000H 8001H 8002H 8003H EDH 43H 00H 85H B C 34 56 8500H 8501H 56H 34H 16비트 데이터직접 전송 Slide 20 (of 29)
Addressing Mode Register Addressing Mode 형식 : OP_code Mnemonic : LD r, r ( r 은 A, B, C, D, E, H, L register) ex) LD A, B ( A ← B : B 레지스터의 내용을 Acc로 전송하는 명령어) 78 OP-code Acc 47 8000H 8001H 8002H 8003H 78H B 직접 Load 47 Slide 21 (of 29)
Addressing Mode Indirect Addressing Mode 16비트 레지스터의 내용이 가르키는 번지의 메모리 내용을 레지스터로 전송하는 주소지정방식을 간접 주소지정 방식(indirect addressing mode)라 한다 형식 : OP_code Mnemonic : LD r, (rr) LD (rr), r ( r 은 A, B, C, D, E, H, L register, (rr)은 SP, BC, DE, HL register) ex) LD A, (HL) (A ← (HL) : HL의 내용이 가르키는 번지의 내용을 Acc 로 전송하는 명령어) 7E OP-code Acc 8000H 8001H 8002H 8003H 7EH 47 H L 90 00 간접 로드 9000H 9001H 47H 34H 16비트 주소 생성 Slide 22 (of 29)
Addressing Mode Implied Addressing Mode 함축 주소지정방식(Implied addressing mode)는 자기 자신의 register를 자체적으로 Data 를 조작하는 주소지정방식 implied addressing mode 이다 형식 : OP_code or 2byte OP_code Mnemonic : CPL, NEG ex) CPL ( Acc 내용을 1진 보수 처리하는 명령어) 2F OP-code ◈ 실행 전 ◈ 실행 후 Acc Acc 8000H 8001H 8002H 8003H 2FH 95 6A CPL 1001 0101 0110 1010 Slide 23 (of 29)
Addressing Mode Implied Addressing Mode ex) NEG (Acc 내용을 2진 보수 처리하는 명령어) ED, 44 OP-code ◈ 실행 전 ◈ 실행 후 Acc Acc 8000H 8001H 8002H 8003H EDH 44H 95 6B NEG 1001 0101 0110 1011 1001 0101 CPL(1진 보수) 0110 1010 + 0000 0001 0110 1011 (2진 보수 결과) Slide 24 (of 29)
Addressing Mode Relative Addressing Mode 상대 주소지정 방식(relative addressing mode)는 현재 PC로부터 근접 Jump( +127~ -128 사이)에 사용되는 상대적 점프를 말한다. 형식 : OP_code + 1byte operand Mnemonic : jr nH (n은 상대점프해갈 8비트 변위를 말한다) 8082H -128(80H) 8100H 8101H 8102H 8103H - 쪽으로 jump할 수 있는 번지 현재 PC 내용 총 256개 번지 +쪽으로 jump할 수 있는 번지 +127(7FH) 8181H Slide 25 (of 29)
Addressing Mode Relative Addressing Mode 변위 계산 방법 8100H 18H Jump해갈 번지 - 현재 PC = 변위 ex) 현재 PC 내용이 8102 일 때 8105번지로 jump하려면 변위 계산 : 8105 - 8102 = 03 JR 03H ( +쪽으로 3번지 jump) 18, 03 OP-code Operand(변위) 8100H 8101H 8102H 8103H 18H 03H JR 03H 현재 PC 내용 +쪽으로 03H 번지로 점프 8105H Slide 26 (of 29)
⊕ Addressing Mode Indexed Addressing Mode 지표 주소지정 방식(Indexed addressing mode)는 지표 레지스터 IX, IY 를 이용하여 번지를 지정하는 방식으로 유효 주소는 다음과 같다. 유효 주소(effective address) = IX(or IY) + d(변위) 변위는 -128에서 +127 사이를 지정한다. Mnemonic : LD r, (IX + d) ex) LD A, (IX + 03H) ( A ←(IX+03H) : IX레지스터 내용에 변위 3H를 가산하여 유효주소를 만들어 유효주소의 내용을 Acc로 전송하는 명렬어) 8000H 8001H 8002H 8003H DDH 7EH 03H DD, 7E, 03 OP-code Operand(변위) Acc 78 IX 8100H 8101H 8102H 8103H 12H 34H 56H 78H 8100 ⊕ 8103(effective address) = 8100(IX) + 03(변위) Slide 27 (of 29)
Addressing Mode Modified Page Zero Addressing Mode Zero page는 0000 번지부터 00FF 번지까지 256번지를 말한다. Zero page내에 특정한 벡터를 구성하여 주소를 지정하는 방식이다. RST nH (nH는 Zero page 벡터 번지이며)명령어에 의해 동작되는 방식. Mnemonic : RST nH (RST 00, RST 08, RST 10, RST18, RST 20, RST 28, RST 30, RST 38) ex) RST 10 (0010H 벡터번지로 가서 명령어를 실행하는 명령어) Memory Zero page D7 ① RST 10 0010H 0011H 0012H 0013H C3H 00H 20H 8000H 8001H 8002H 8003H D7H OP-code ②벡터 구성 JP 2000H (2000H로 점프) 2000H 2001H 2002H 2003H 12H 34H 56H 78H ③특정한 부프로그램 실행 Slide 28 (of 29)
Addressing Mode Bit Addressing Mode Register값에서 임의 bit를 1로 set하거나 0으로 reset하는 mode. Mnemonic : SET I, r (r 레지스터에서 I번째 비트를 “1”로 세트하는 명령어) RESET I, r (r 레지스터에서 I번째 비트를 “0”으로 리세트하는 명령어) ex) SET 3, A ◈ 실행 전 ◈ 실행 후 Acc Acc 80 88 SET 3H, A 1000 0000 1000 1000 ex) RESET 5, B ◈ 실행 전 ◈ 실행 후 Acc Acc B0 88 RSET 5H, A 1011 0000 1001 0000 Slide 29 (of 29)