1 Prof. Young Jin Nam, Daegu University 컴퓨터 구조 (Computer Architecture) 명령어 세트 : 특성과 기능 남영진
2 Prof. Young Jin Nam, Daegu University 강의내용 기계 명령어 특성 명령어 세트 설계 이슈 오퍼랜드 형태 펜티엄 & PowerPC 데이터 형식 연산 종류 펜티엄 & PowerPC 연산 유형 어셈블리 언어
3 Prof. Young Jin Nam, Daegu University 명령어 세트 (Instruction Set) 프로세서 (CPU) 의 동작은 실행하는 명령어들에 의해서 결정 이 명령어를 기계 명령어 (machine instruction) or 컴퓨터 명령어 (computer instruction) 이때, 프로세서가 실행하는 명령어들의 집합을 명령어 세트 기계어 코드 & 이진수 형태로 표현 어셈블리 코드로 표현
4 Prof. Young Jin Nam, Daegu University 기계어 명령어 구성 요소 (Elements) 연산 코드 (operation code) 수행될 연산을 지정 ( 예 : ADD, MUL, … ) “ do this ” 를 표현하며, opcode 라고 불리는 2 진 코드 형태로 저장 원천 오퍼랜드 참조 (source operand reference) 각 연산은 입력으로 한 개 or 그 이상의 오퍼랜드를 가짐 “ to this ” 를 표현 결과 오퍼랜드 참조 (result operand reference) 연산은 결과를 발생 “ put the answer here ” 를 표현 다음 명령어 참조 (next instruction reference) 현재 명령이 완료된 후에 다음 명령어를 인출할 위치를 알려줌 “ when you have done that, do this... ” 를 표현
5 Prof. Young Jin Nam, Daegu University 명령어 사이클 상태 다이어그램 Example: 100: ADD M(200), M(201) /* M(201) = M(200) + M(201) */ 명령어 저장 위치 : M(200) (ADD …) ADD 201 M(201) M(200)+ M(201) 201 M(201) = 결과
6 Prof. Young Jin Nam, Daegu University Source/Result 오퍼랜드가 저장되는 장소 주기억장치 (main memory) 가상 기억장치 (virtual memory): 주기억장치 or 2 차 기억장치 프로세서 (CPU) 레지스터 I/O 장치
7 Prof. Young Jin Nam, Daegu University 명령어 (Instruction) 표현 각 명령어는 일련의 비트를 통하여 표현 기계 명령어를 2 진수를 통하여 표현 “hard to read/understand” 기계 명령어의 기호 표현 (symbolic representation) Example: LOAD M(X), JUMP+M(X,0:19), etc 연산코드 (operator) 들은 그 연산을 지정하는 니모닉 (mnemonics) 으로 표현 Example: ADD, SUB, MPY, DIV, LOAD, STOR
8 Prof. Young Jin Nam, Daegu University 명령어 형식 (Format)
9 Prof. Young Jin Nam, Daegu University 기계 명령어 특성 실행 (Execution) 사이클 – 명령어 해석에 따른 동작분류 [Chap.3] 프로세서 - 주기억장치 : CPU 와 주기억장치간 데이터 전송 프로세서 -I/O: CPU 와 I/O 모듈간 데이터 전송 데이터 처리 (Data processing): 데이터에 대한 산술 / 논리적 연산 제어 (Control): 실행순서 변경 (PC 레지스터 값 변경 ) 명령어 종류 데이터 처리 : 산술 및 논리 명령어 데이터 저장 : 기억장치 명령어 데이터 이동 : I/O 명령어 제어 : 검사와 분기 명령어
10 Prof. Young Jin Nam, Daegu University 명령어 주소 개수 3-Address (3-Operand) Addresses: operand 1, operand 2, result 상당히 긴 명령어 형식을 필요 Not commonly used(???) C A + B; ADD C, A, B; Example: Y = (A – B) / (C + D x E)
11 Prof. Young Jin Nam, Daegu University 명령어 주소 개수 2-Address (2-Operand) Addresses: operand 1(result), operand 2 주소 하나가 오퍼랜드 주소와 결과 주소를 모두 지정해야함 저장 장소의 크기를 줄어들지만, 불편함 오퍼랜드 값의 변경을 막기 위해서 연산 수행 전에 그 결과 값을 결 과의 주소 or 임시 주소에 옮기는 작업이 필요함 C A + B; MOV C, A; ADD C, B; Example: Y = (A – B) / (C + D x E)
12 Prof. Young Jin Nam, Daegu University 명령어 주소 개수 1-Address (1-Operand) Accumulator 가 일반적으로 “ implicit ” second address 임 Common on early machines C A + B; LOAD A; ADD B; STOR C; Example: Y = (A – B) / (C + D x E)
13 Prof. Young Jin Nam, Daegu University 명령어 주소 개수 0-Address (0-Operand) 스택 (last-in-first-out) 이라는 특별한 기억장치 조직을 이용함 스택은 미리 알려진 공간에 위치하며, 스택의 최상위에 있는 두 개의 값을 사용함 C A + B; PUSH A; PUSH B; ADD; POP C; Example: Y = (A – B) / (C + D x E) (*) Stack 기능 : 교재 부록 10A 스택 참조
14 Prof. Young Jin Nam, Daegu University 설계 이슈 – How Many Addresses? More addresses More complex (powerful?) instructions More registers (inter-register operations are quicker) Fewer instructions per program Fewer addresses Less complex (powerful?) instructions More instructions per program Faster fetch/execution of instructions
15 Prof. Young Jin Nam, Daegu University 명령어 세트 설계 이슈 연산 종류 (Operation Repertoire) How many ops? What can they do? How complex are they? 데이터 형식 (Data Type) [this chapter] 연산이 수행될 데이터의 여러 가지 형태 주소, 수, 문자, 논리 데이터 명령어 형식 (Instruction Format) [Chap.11] 명령어 길이 (Length of opcode field) 주소의 수 (# of addresses)
16 Prof. Young Jin Nam, Daegu University 명령어 세트 설계 이슈 레지스터 (Register) 명령어들에 의해 사용될 CPU 레지스터들 수 용도 (which operations can be performed on which registers?) 주소지정 (Addressing) [Chap.11] 오퍼랜드의 주소를 지정하는 방식 Immediate (A 99), direct(LOAD M[99]), indirect(LOAD M[M[99]]) CISC vs. RISC [Chap.12]
17 Prof. Young Jin Nam, Daegu University 오퍼랜드 형태 ( 데이터 형태 ) 주소 (Addresses) 주기억장치 or 가상기억장치의 주소를 결정하기 위해서 사용됨 부호 없는 정수 (unsigned integer) 로 간주됨 수 (Numbers) 정수 or 고정소수 (integer or fixed point) 부동 소수 (floating point) 10 진수 (decimal) – BCD (Binary Coded Decimal) –packed decimal –10 진 digit 는 4 비트 코드로 표현됨 – 항상 8 비트의 배수로 이루어짐 – 음수는 좌측끝 or 우측끝에 4-bit 부호 digit 를 포함시킴 (1111 for “-”) –Example: 246 =
18 Prof. Young Jin Nam, Daegu University 오퍼랜드 형태 ( 데이터 형태 ) 문자 ANSI 에서 발표한 ASCII (American Standard Code for Information Interchange) 코드 ( 교재 p.213, 표 7.1 참조 ) – 각 문자는 고유 7 비트 패턴으로 표현됨 –128 가지의 서로 다른 문자를 표현함 (including 제어문자 ) – 여덟번째 bit 는 parity 비트로 이용할 수 있음 (even or odd parity) –011XXXX 에 대해서, 0 부터 9 까지의 숫자들은 우측 네 bit 에 위치함 ( 4-bit packed decimal 코드로의 변환이 용이함 ) EBCDIC (Extended Binary Coded Decimal Interchange Code) –IBM S/390 에서 사용됨 –packed decimal 코드로의 변환이 용이함 – ~ 0~9
19 Prof. Young Jin Nam, Daegu University 오퍼랜드 형태 ( 데이터 형태 ) 논리 데이터 (logical data) n-bit 단위를 각 항목이 0 or 1 을 가지는 n 개의 1-bit 데이터 항목으로 간주함. “T” or “F” 값만을 저장하는 Boolean 을 저장할 때 유용함.
20 Prof. Young Jin Nam, Daegu University 펜티엄 & PowerPC 데이터 형식 Big-Endian 가장 하위 바이트 주소 (lowest address) 에 최상위 바이트를 저장함 Example: Motorola 680x0, Sun SPARC, 대부분의 RISC 기계 등 Little-Endian 가장 하위 바이트 주소 (lowest address) 에 최하위 바이트를 저장함 Example: Intel 80x86, 펜티엄, VAX, Alpha 등 Example: 0x Big-endian Little-endian
21 Prof. Young Jin Nam, Daegu University Example: C 데이터 구조와 Endian 배치 (Big: MSB –> Low)
22 Prof. Young Jin Nam, Daegu University 펜티엄 데이터 형식 (1 of 3) 길이가 8( 바이트 : byte), 16( 단어 : word), 32(2 중 단어 : doubleword) 및 64(4 중 단어 : quadword) 비트인 데이터 형식들을 취급 단어들이 짝수 주소에 배열될 필요 없음 ( 기억장치 이용률 ) Intel 80x86 기계와 같이 little-endian 방식을 이용
23 Prof. Young Jin Nam, Daegu University 펜티엄 데이터 형식 (2 of 3)
24 Prof. Young Jin Nam, Daegu University 펜티엄 데이터 형식 (3 of 3) 부호를 가진 정수 형식 : 2 의 보수 (16, 32, 64bit) 부동소수점 형식 : IEEE 754 표준
25 Prof. Young Jin Nam, Daegu University PowerPC 데이터 형식 길이가 8( 바이트 : byte), 16( 반단어 : half word), 32( 단어 : word) 및 64(2 중 단어 : doubleword) 비트인 데이터 형식들을 취급 Big- or little-endian 고정 소수점 부호 없는 unsigned byte: 논리 및 정수 산술 연산 부호 없는 half word: 16-bit size ( 위와 동일 ) 부호 있는 half word: 산술연산 부호 없는 word: 논리 연산 & 주소 포인터 부호 있는 word: 산술 연산 부호 없는 2 중단어 : 주소 포인터 바이트 스트링 : 길이가 0~128 바이트 부동 소수점 IEEE 754 Single or double precision 을 지원
26 Prof. Young Jin Nam, Daegu University 연산 종류 연산의 전형적인 분류 데이터 전송 (data transfer) 산술 (arithmetic) 논리 (logic) 변환 (conversion) 입출력 (input/output) 시스템 제어 (system control) 제어의 이동 (transfer of control)
27 Prof. Young Jin Nam, Daegu University 데이터 전송 기계의 명령어 중에서 가장 기본적인 형태 명시해야 할 사항 : source & destination 오퍼랜드의 위치 전송될 데이터 길이 오퍼랜드의 주소 지정 방식 보편적인 명령어 세트 연산
28 Prof. Young Jin Nam, Daegu University 데이터 전송 – IBM S/390 데이터 전송 동작 예 전송될 데이터 의 크기 (8,16,32,64bit) or 전송의 source 및 destination 에 따라, 여러 종류의 명 령어들이 존재 할 수 있음
29 Prof. Young Jin Nam, Daegu University 데이터 전송 – CPU 동작 측면 Source 와 destination 이 모두 register 인 경우 : ( 예 : mov eax ecx) CPU 내부에서만 동작이 발생함 두 오퍼랜드 중에서 하나 or 둘 모두가 기억장치 내에 존재할 경우 : 1. 주소지정 방식에 근거하여 기억장치 주소 계산 2. if 주소 == 가상기억장치 주소, 그 주소를 실제 기억장치 주소로 변환 3. 원하는 주소의 내용일 캐쉬에 존재하는지 확인 4. if 캐쉬 miss, 기억장치 모듈로 명령을 보냄
30 Prof. Young Jin Nam, Daegu University 산술 연산 덧셈, 뺄셈, 곱셈 & 나눗셈과 같은 기본 산술 연산 제공 부호 가진 정수 ( 고정 정수 ) 및 부동 소수점에 대한 연산 뿐만 아니라, Packed-BCD 에 대해서도 산술 연산을 지원 다양한 단일 - 오퍼랜드 : absolute, negate, inc, dec 보편적인 명령어 세트 연산
31 Prof. Young Jin Nam, Daegu University 논리 연산 Boolean 연산에 기반을 둠 ( 교재 부록 A 참조 ) 기본적인 논리 연산
32 Prof. Young Jin Nam, Daegu University 논리 연산 보편적인 명령어 세트 연산
33 Prof. Young Jin Nam, Daegu University 논리 연산 Shift & Rotate
34 Prof. Young Jin Nam, Daegu University 논리 연산 Shift & Rotate 예
35 Prof. Young Jin Nam, Daegu University 변환 (Conversion) 데이터의 형식을 변환함 ( 예 : 10 진수 → 2 진수 ) 8 비트 code 를 다른 코드로 변환함 ( 예 : ASCII → EBCDIC)
36 Prof. Young Jin Nam, Daegu University 입력 / 출력 Isolated I/O, memory-mapped I/O, DMA 등
37 Prof. Young Jin Nam, Daegu University 시스템 제어 일반적인 privileged 명령어 프로세서가 privileged 상태에서 동작 중이거나 기억장치의 privileged 영역 내에 있는 프로그램을 수행 중일 동안만 실행 가능 ( 예 : Kernel 모드 )
38 Prof. Young Jin Nam, Daegu University 제어 이동 – 분기 명령어 대부분 조건 분기 (conditional branch) 어떤 연산의 결과로써 set 되는 한 비트 혹은 여러 bits 들로 이루어 진 조건 code( 사용자에게 보이는 register 형태 ) 를 보고 분기 결정 예 : BRP X, BRN X, BRZ X, BRO X 혹은, 3-operand 방식을 이용 예 : BRE R1, R2, X
39 Prof. Young Jin Nam, Daegu University 제어 이동 – 분기 명령어 분기 명령어 Example
40 Prof. Young Jin Nam, Daegu University 제어 이동 – Skip 명령어 묵시적 주소 ( 다음 명령어 주소 + 한 명령어 길이 ) 를 포함 Destination address 가 필요하지 않음 Example: ISZ (increment-and-skip-if-zero) 301 … 309ISZ R1 310BR
41 Prof. Young Jin Nam, Daegu University 제어 이동 – Procedure( 프로시저 ) 호출 Procedure 는 여러 곳으로부터 호출될 수 있음 Procedure 호출은 procedure 내에서 일어날 수 있음 (nesting of procedure) 호출된 프로그램 내에는 각 procedure 호출 (CALL) 에 대응되는 복귀 명령어 (RETURN) 가 반드시 있어야 함 CPU 는 복귀가 적절히 이루어지도록 복귀주소 (return address) 를 저장해야 함 ( 레지스터, procedure 의 시작부분, stack 의 top)
42 Prof. Young Jin Nam, Daegu University 제어 이동 – Nesting of Procedure & 스택 사용 스택 사용 : “Re-entrant procedure” 를 가능
43 Prof. Young Jin Nam, Daegu University 제어 이동 스택을 이용한 파라메터 전송 (1 of 3) SP BP Local Variables Frame pointer to previous record Return address Call Parameters Local Variables Frame pointer to previous record Return address Call Parameters
44 Prof. Young Jin Nam, Daegu University 제어 이동 스택을 이용한 파라메터 전송 (2 of 3) Caller: –push parameters on stack. (1st parameter is on TOP of the stack) –call subroutine (JSR) Callee: –create a current frame ptr (push BP, which points to the previous record) –reserve space for locals & save registers used for locals –execute: Parameters and locals are accessed from stack using BP as the base pointer –release space for locals & restore registers used for locals –restore the previous frame pointer (pop BP) –return from subroutine (RTS) Caller: –remove the parameters from the stack.
45 Prof. Young Jin Nam, Daegu University 제어 이동 스택을 이용한 파라메터 전송 (3 of 3)
46 Prof. Young Jin Nam, Daegu University 재진입 (Re-entrant) 가능 함수 하나 이상의 태스크에서 호출될 수 있고, 함수 수행 도중에 태스크를 전환해도 언제나 올바르게 동작 Example: Re-entrancy 를 보장 못하는 경우
47 Prof. Young Jin Nam, Daegu University 재진입 (Re-entrant) 가능 함수 재진입 (Re-entrant) 인지를 결정하기 위한 규칙 1. 스택 변수 or 그 태스크에서만 유일하게 사용하는 경우를 제외하고 는, atomic 하지 않는 방법으로 변수들을 사용하지 않음 2. 재진입이 가능하지 않은 어떠한 함수도 호출하지 않음
48 Prof. Young Jin Nam, Daegu University The end of “ 명령어 세트 ” Part of Homework #3: 연습문제 10.3, (10.6,) 10.24