제 9 장 Instruction Set Architecture 9-1 컴퓨터아키텍쳐개념 Machine language : ( 프로그램메모리에저장되는 ) 이진코드 Assembly language : symbolic, opcode + address 정보 아키텍쳐명령어세트아키텍쳐 organization : DP, 제어장치, 연결버스하드웨어 : 논리적회로 명령어 format field -opcode - Address : 메모리또는레지스터주소 - Mode field : 주소영역의규정 - 그외 : shift 비트수, immediate 값 컴퓨터동작사이클 Instr fetch 결과저장 Instr decode 연산실행 Operand 위치해석 -PC ( program counter) : 프로그램메모리의다음실행할주소저장 -instr decode : Operand 연산종류, 어드레싱모드결정 fetch CPU 의레지스터세트사용자접근불가능레지스터 : PC, IR(instr. Reg) up실행에필요한 reg, 파이프라인 reg 프로그램가능레지스터 : instr set에정의 PSR(processor status reg) : C,N,V,Z 의상태비트 F/F SP (stack pointer) : 프로그램실행시스택값저장 1
9-2 오퍼랜드어드레싱 - ADD 연산에대한오퍼랜드 : 최대 3 operand (addend, augend, result) - 오퍼랜드의저장장소 : 레지스터또는메모리 - 오퍼랜드주소지정방식암시적주소 (implied address) 명시적주소 (explicit address) - 명령어에포함된주소개수 : 3,2, 1, 0 X = (A + B)(C + D) 연산을위한각주소지정방식 3 주소명령어 : assem 프로그램코드가작다, 주소지정비트가크다 - 메모리사용 ADD T1, A, B M[T1] M[A] + M[B] ADD T2, C, D M[T2] M[C] + M[D] MUL X, T1, T2 M[X] M[T1] x M[T2] - 레지스터사용 ADD R1, A, B R1 M[A] + M[B] ADD R2, C, D R2 M[C] + M[D] MUL X, R1, R2 M[X] R1 x R2 2 주소명령어 : 결과저장오퍼랜드를암시적주소로사용, 코드길이가길어진다. MOVE T1, A M[T1] M[A] ADD T1, B M[T1] M[T1] + M[B] MOVE X, C M[X] M[C] ADD X, D M[X] M[X] + M[D] MUL X, T1 M[X] M[X] x M[T1] 2
1 주소명령어 : 암시적주소레지스터인 accumulator 사용 LD A ACC M[A] ADD B ACC ACC + M[B] ST X M[X] ACC LD C ACC M[C] ADD D ACC ACC + M[D] MUL X ACC ACC X M[X] ST X M[X] ACC 제로주소명령어 : stack (LIFO, Last In First Out) 사용 TOS(top of stack) ~ 보통 stack pointer(sp) 라는레지스터에값저장 PUSH A TOPS M[A] PUSH B TOPS M[B] ADD TOPS TOPS + TOS -1 PUSH C TOPS M[C] PUSH D TOPS M[D] ADD TOPS TOPS + TOS -1 MUL TOPS TOPS + TOS -1 POP X M[X] TOS 3
Addressing architecture - memory-to-memory 구조 - register-to-register 구조 ~ load/store 구조 LD R1, A R1 M[A] LD R2, D R2 M[D] LD R2, B R2 M[B] ADD R1, R1, R2 R1 <- R1 + R2 ADD R3, R1, R2 R3 <- R1 + R2 MUL R1, R1, R3 R1 <- R1 X R3 LD R1, C R1 M[C] ST X, R1 M[X] R1 - register-memory 구조 ADD R1, A R1 R1 + M[A] - 단일누산기구조 : 1 주소명령어, 레지스터파일이없다, 21번의메모리접근으로비효율적 ADD B ACC ACC + M[B] - 스택구조 : 제로명령어, 스택이메모리에있기때문에빈번한메모리접근발생 infix 연산자표현 : (A + B) x C + ( D x E) postfix 연산자표현 ( RPN, Reverse Polish Notation) : A B + C x D E x + ~ 변수를만날때스택에저장 (push), 연산자를만날때 2개변수를 pop하여연산결과를다시스택에저장 PUSH A PUSH B ADD PUSH C MUL PUSH D PUSH E MUL ADD 4
9-3 어드레싱모드 - 명령어에포함되는영역 opcode : 연산종류모드 : 오퍼랜드지정방식주소 : 오퍼랜드위치, 메모리또는레지스터 암시모드 (implied mode) - Binary 명령어가 2개이하의주소포함시한주소는암시적 2 addr ADD T1, B M[T1] M[T1] + M[B] -- 결과주소는암시적 1 addr ADD B ACC ACC + M[B] -- ACC를암시적주소로사용 0 addr ADD TOS TOS + TOS 1 -- 스택의 TOS 가암시적주소 즉시모드 (immediate mode) - 상수값을갖는오퍼랜드를명령어에포함 LDA #100H ACC #100H Register mode /register indirect mode - 레지스터모드 : 명령어에서주소영역이특정, 임의레지스터를지정 LDA R1 ACC R1 - 레지스터간접모드 : 주소영역이레지스터를지정하고이레지스터의내용은오퍼랜드의메모리주소표현 LDA (R1) ACC M[R1] 직접메모리주소지정보다적은비트수사용 auto increment / auto decrement : 메모리에배열 (array) 형태의데이터가저장된경우, 배열에대한메모리주소를레지스터가지정한다. 레지스터의내용을자동 1 증가또는감소하므로써메모리배열에접근 ADD (R1)+, 3 M[R1] M[R1] +3, R1 R1 + 1 배열의모든원소에 3을더하는연산 (R1) 배열의첫번째주소지정, 주소접근후 R1을다음연산을위해자동 1 증가 5
직접어드레싱 (Direct addressing ) 모드 - 오퍼랜드가접근될메모리주소를직접사용 LDA ADRS ACC M[ADRS] 2 워드명령어, PC값은 2 증가 BRA ADRS if ACC=0 PC ADRS branch 명령 if ACC=0 PC PC+2 간접어드레싱 (Indirect addressing) 모드 - 유효주소 (effective address) 가저장된메모리주소지정 LDA [ADRS] ACC M[M[ADRS]] 상대어드레싱 (Relative addressing) 모드 - 특정레지스터 ( 예 :PC) 를사용하여이의내용에주소영역값을더하여유효주소계산유효주소 = 명령어의주소부분 + PC의내용 LDA $ADRS ACC M[ADRS + PC] ** 분기할주소가현재실행명령어와가까이있는경우, 전체메모리주소지정보다적은비트수로표현가능 indexed addressing mode - 인덱스레지스터사용유효주소 =index reg의내용 + 명령어주소부분 LDA ADRS (R1) ACC M[ADRS+R1] 이때 (R1) 값은 ADRS 값으로부터상대적인위치값 - 전용 index reg 또는임의의 CPU reg를 index reg로사용 - base-register mode : index reg 대신 base reg를사용하여유효주소 = base reg 내용 + 명령어주소부분이때명령어주소값은 base reg주소로부터의상대적위치값 6
- 어드레싱모드예 7
9-4 명령어세트구조 RISC(reduced instruction set computer) 구조 (1) 메모리접근은 load/store 명령어만가능, 데이터처리명령어는 reg-to-reg 모드만가능 (2) 제한된어드레싱모드 (3) 고정길이명령어포맷 (4) 명령어는기본적연산수행 - 많은데이터처리량과빠른처리속도를목적 - 메모리접근은시간이많이걸리므로 load/store외다른명령어에서는배제 - 큰레지스터파일을사용하여데이터처리 - 단순한제어장치구조로하드와이드방식사용 - 파이프라인구조를기본적구조로사용 CISC (Complex instruction set computer) 구조 (1) 직접메모리접근이가능한명령어가많다 (2) 다양한어드레싱모드 (3) 가변길이의명령어포맷 (4) 기본적연산과복합연산을포함하는명령어세트 - 프로그램규모를줄여메모리사용을줄이는명령어 - 메모리접근이용이하므로레지스터파일은비교적작다. - 복잡한명령어에대한제어논리회로는마이크로프로그래밍방식사용 up 제어회로는내부적으로 RISC의기본연산실행과같이파이프라인으로처리 CPU의기본연산명령어군 (CISC 및 RISC 모두에포함 ) (1) 데이터전송명령어 (2) 데이터처리명령어 (3) 프로그램처리명령어 8
9-5 데이터전송명령 - 데이터이동 : 데이터내용불변 - 전송장소메모리-레지스터, CPU 레지스터-입출력레지스터, 레지스터- 레지스터메모리-메모리 스택명령어 - 프로시져호출과복귀, interrupt 시상태정보저장 - 메모리스택과레지스터사이의데이터전송 : push/pop - SP(stack pointer) 현재의스택주소, TOS 스택에저장된데이터는 pop 동작으로제거되는것이아니고 SP값만감소 push SP SP-1 pop R1 M[SP] M[SP] R1 SP SP+1 - 스택증가가주소값이증가하는형태의스택구성방식 : push SP SP+1 pop R1 M[SP] M[SP] R1 SP SP-1 - SP 가 TOS 의다음위치지정형태 ( 스택주소증가방식 ) push M[SP] R1 pop SP SP-1 SP SP+1 R1 M[SP] 입출력명령어 : CPU 레지스터와입출력장치의전송 - 독립 I/O (independent d I/O) 시스템 : isolated I/O configuration i 메모리와입출력포트의주소가분리, 특정 I/O 포트를지정하기위한명령어지원 - 메모리-매핑 I/O (memory mapped I/O) 시스템메모리주소의일부를 I/O포트주소로할당독립적 I/O 명령어가없고 load/store 명령사용, 명령어가단순 9
9-6 데이터처리명령어 - 산술, 논리와비트처리, 자리이동 산술명령어 :add, sub, mult, div,. - 부호화된정수, unsigned 정수구분 - 2진수, 10진수, 부동소수점 - 연산에대한레지스터의비트수 double precision은기본레지스터의 2배수 논리연산, 비트처리명령어 - 오퍼랜드의각비트에대한독립적인논리연산 - A=1010 1101 B=1111 0000 A AND B = 1010 0000 A OR B = 1111 1101 A XOR B = 0101 1101, 이때 B의역할은 mask, bit clear bit set bit complement 자리이동명령어 A SHR 2 = 0010 1011 A SHL 3 = 0110 1000 논리자리이동빈자리를 0 으로채움 A SHRA 2 = 1110 1011 A SHLA 3 = 0110 1000 산술자리이동, 왼쪽빈자리는 sign extension 형태 A ROR 1 = 1101 0110 A ROLC 3 = 1 0110 1010 Carry=0으로가정 - 자리이동명령어포맷 : OP REG TYPE RL COUNT OP : opcode REG : operand TYPE : 2 비트, 자리이동형태 RL : 1비트 left/right 방향 COUNT : k비트, 0~2 k -1의자리이동수 10
9-7 부동소수점 (Floating point) 계산 - 가수 (fraction) 와지수 (exponent) 로표현 10진수 +.6132789 +04 F x 10 E = +.6132789 x 10 +4 F및 E만저장 2진수1001.11 01001110 000100 F x 2 E = +(0.1001110) 2 x 2 +4 부호가수지수정규화 - 정규화 (normalized) : 정밀도증가 ex) 0.0035 0.350 48비트레지스터에저장된수가정할때, 1비트부호사용정수의범위 +-(2 47 1) +- 10 14 부동소수 범위 +-(1-2 -35 )x2 +2047 +- 10 615 [12 비트지수, 35 비트가수 ] 가수비트를크게하면정확도증가, 지수비트를크게하면수의범위증가 산술연산 - 두수의덧셈및뺄셈 : 지수를같게하기위해 radix point 위치정렬필요.5372400 x 10 2.5372400 x 10 2 +.1580000 x 10-1 +.0001580 x 10 2.5373980 x 10 2 결과의가수는다시자리이동으로정규화한다. - 두수의곱셈과나눗셈 : radix point 정렬불필요 곱셈 : 두가수는곱하고지수끼리더한후정규화 나눗셈 : 두가수는나누고지수끼리뺀후정규화 바이어스된지수 - 가수 : 부호- 크기방식표현 - 지수 : 초과수를더하여 biased 지수표현, 지수부호제거 예 : 초과bias=99 경우, e=e+99 E: 실제지수 E=-99 e = 0 E=+99 e=198 0 ~ 198의양의지수로표현 지수계산시부호고려불필요 11
표준오퍼랜드포맷 - single precision: 32비트, FS double precision : 64 비트, FL(floating-point long) ADDF : floating ADD 명령어 - IEEE standard 1배정확도부동소수점표현 23비트 s : 부호 1비트 f : 가수 23비트 1.f 1 f 2 f 23 형식실제 24비트값 1.111 11 ~ 1.000 00 significand, 유효자리값, 항상정규화됨 e: 지수 8비트, 127 초과바이어스값유효지수범위 : -126 ~ + 127 등비수열합정규화된수표현 : (-1) s e -127 x (1.f) 최대수 s=0, e=254 f=1.11..111 (1+1-2 -23 ) +2 127 x (2-2 -23 ) 최소양및음의수 e=1 f=1.00..000 =+-2-126 f field significand 십진수 100 00 010 00 000 00 1.100 00 1.010 00 1.000..00 1.50 1.25 1.00 특수수표현 e=255, f=0 +- infinity e=255, f=0 NaN (Not a Number), 유효하지않은연산 e=0, f=0 +0-0 e=0, f=0 denormalized, 정규화된수보다작은수 12
9-8 프로그램제어명령어 - 프로그램명령어는메모리에연속저장되고한번지씩읽어실행 - 메모리의주소는 PC로부터, 메모리가읽힐때마다자동 1 증가 - 프로그램의실행순서 ( 주소 ) 를바꾸는명령어 : 분기 (branch) 와점프 (jump) 명령어분기명령어 : 상대어드레싱점프명령어 : 직접, 간접어드레싱조건명령어조건이만족될때분기 / 점프, 유효주소를 PC에로드아닐때는 PC의연속된다음주소실행 skip 명령어실행예 : skip on C jump addr1 ADD R1 조건이만족하면다음명령어 skip (PC 증가 ), 아니면무조건분기 jump 명령어보다비효율적, 2 개명령어실행비교명령어 : 두오퍼랜드의뺄셈에의하여비교, 이때레지스터, 상태비트의변화로조건분기를발생 test 명령어 : 두오퍼랜드의 ANDing 결과로레지스터, 상태비트변화로조건분기발생조건명령어 : PSR 비트값을조건으로하여유효주소값변경 BZ, BNZ : ALU 연산결과가 0인지 PSR의 Z 비트로검사 BC, BNC : ALU에서의캐리, 자리이동레지스터의캐리 BN, BNN : 부호비트, ALU 의최상단왼쪽비트 BV, BNV : 부호화된수의산술연산의자리수넘침 (overflow) A-B : 부호없는두수의뺄셈 A-B 연산기 상태비트 C ( 캐리또는 borrow ), Z 변화 13
- 부호없는수의조건분기명령어 A-B 와같은연산을실행하여 ALU 값과 PSR 의 C, Z 비트사용 BLE ( A <= B ) : C=1 or Z=1 C+Z=1 BH (A > B) : BLE 의 complement, C+Z=0 - 부호화된수의조건분기명령어 A-B 와같은연산을실행하여 ALU 값과 PSR 의 N, V, Z 비트사용 A >= B : N=0 V=0 뺄셈의부호 +, not overflow, A >= B N=1 V=1 부호반전, 양의값결과, A>=B N xor V = 0 A<B: A>= B 의 complement A > B : 결과는양수이고 not zero (N xor V) + Z = 0 A <= B : A>B의 complement 프로시주어호출과복귀명령어서브루틴을실행 (CALL)) 하기위해시작하는위치로분기한후서부루틴실행이끝나면주푸로그램으로복귀 (RET) CALL addr1 다음명령어의주소를임시장소에저장 : return 주소 LD R1 addr1 을 PC 에로드 - return 주소저장장소 : 메모리의고정된위치, 프로세서레지스터, 메모리스택스택사용시 : 연속된 call 주소를스택에저장, 프로그래머가복귀주소관리불필요 call SP SP-1 return PC M[SP] (LD R1 주소 ) M[SP] PC (LD R1 주소 ) SP SP + 1 PC 유효주소 (addr1) 한국기술교육대학교 14 정보기술공학부장영조
9-9 프로그램가로채기 (Interrupt) - 정상적인프로그램의진행순서에서벗어나외부또는내부에서발생한요구에따른서비스프로그램실행내부 / 외부에서예측할수없는시점에서발생서비스프로그램의주소는하드웨어처리로결정 interrupt 발생시, PC외상태레지스터값도저장 - 가로채기발생시해당서비스프로그램실행전에현재실행되는프로그램의실행을완료후, 복귀주소, PSR 등을저장한후서비스프로그램을실행하고복귀시는저장된레지스터값을복원 - 컴퓨터의 2가지동작모드 : PSR 또는특정비트로결정시스템모드 : 운영체제의프로그램실행시, 시스템모드특권명령어, 사용자는접근불가사용자모드 : 사용자프로그램실행상태, 시스템특권명령어실행불가 - 가로채기발생시현재값저장하드웨어형태 PC 값만저장하는기능하드웨어- 가로채기서비스프로그램에서필요레지스터내용저장기능를포함해야함가로채기발생시필요레지스터내용을자동적으로저장 alternate 레지스터세트를가진형태 : 모드세트로두레지스터세트를교대로사용 - 가로채기처리하드웨어형태프로세서레지스터내용을메모리스택에저장하고서비스프로그램의첫번째명령어하드웨어주소를 PC에로드서비스프로그램의시작주소를하나의메모리위치에할당가로채기각소스에대하여별도의독립적인주소할당가로채기소스하드웨어자체에서서비스루틴의주소제공서비스루틴으로분기하기위한주소를선택하게하드웨어처리과정을거치는경우 - 가로채기발생시대부분, 현재실행중인명령어가완료되기까지가로채기에응답하지않는다. 15
- 가로채기형태외부가로채기, 내부가로채기, 소프트웨어가로채기 - external interrupt : 하드웨어, 입출력장치, 타이밍장치, 파워공급등외부요인에의한발생 - Internal interrupt : 하드웨어, 명령어나데이터의잘못된사용등으로 trap 발생이라고함산술 overflow, 0 으로나눌때, 잘못된연산코드실행, 메모리스택 overflow, protection violation( 메모리접근금지영역을접근하려고할때 ) - software interrupt : 사용자가명령어를실행하여 interrupt 를의도적으로발생입출력전송이필요한경우시스템모드로변환시켜전송을시스템모드가실행하게하는 sw intr 발생 외부가로채기하드웨어형태여러개의 intr 소스사용가능 EI (intr enable) 세트레지스터 ENI, DSI 명령어로세트 / 리세트 - 가로채기마이크로명령어실행단계 SP SP 1 M[SP] PC M[SP] SP 1 M[SP] PSR EI 0 INTACK 1 PC IVAD 16