Transcript chap1

Chap1-1
컴퓨터란?
Chap1-2
PC 하드웨어/소프트웨어
Chap1-3
어셈블리 언어
• 마이크로프로세서
– 컴퓨터의 산술, 논리, 제어기능 담당
– 각종 전자소자의 집적
• Intel 8008, 8086, 8088, 80186, 80286, 80386, 80486,
Pentium(586), PentiumPro(686)..
• 기계어
– 프로세서가 이해 할 수 있는 고유의 명령어 집합
– 이진수로 표현됨으로 프로그램하기 곤란
• 어셈블리 언어
– 기계 명령어를 사람이 좀더 이해하기 쉬운 기호로 표현
• 기계어와 1대1 대응 (0000000100001000 <=> ADD)
– 어셈블리언어 프로그램 => 기계어 명령 (어셈블러)
Chap1-4
어셈블리언어
• 고급언어 Vs. 저급언어
– 고급언어 : C, Basic등 기계어와 상관없는 프로그램언어
• 고급언어프로그램 => 기계어 (컴파일러)
• 장점 : 프로그램하기 용이
• 단점 :
– 자동번역으로 인한 비효율적 기계어 생성 가능성
– 하드웨어의 직접적인 제어 불가능
– 저급언어 : 어셈블리언어
• 단점 : 프로그램하기 어려움
• 장점 :
– 효율적인 프로그램 작성 가능
– 하드웨어의 직접적인 제어
– 컴퓨터의 내부 작동원리 이해
Chap1-5
1. PC H/W의 기본 특성
•
•
•
•
•
비트와 바이트
프로세서
메모리
세그먼트와 주소지정
레지스터
Chap1-6
비트와 바이트
• 비트
– 컴퓨터 상에 데이터 표현의 최소 단위
– 0/1
• 바이트
– 9개의 비트로 구성
• 8개 비트는 데이터 표현에 사용
• 1개 비트는 parity로 사용 (홀수, 짝수 parity)
– 데이터 표현: ‘A’
비트 내용
비트 번호
0 1 0 0 0 0 0 1
7 6 5 4 3 2 1 0
1
홀수패리티
Chap1-7
비트와 바이트 (계속)
• 다른 데이터 표현 단위
–
–
–
–
–
–
–
–
word
doubleword
quadword
paragraph
kilobyte
megabyte
gigabyte
terabyte
: 2 바이트
: 4 바이트
: 8 바이트
: 16 바이트 (경계)
: 2**10
: 2**20
: 2**30
: 2**40
• 메모리의 각 바이트는 유일한 주소를 갖는다
Chap1-8
이진수 16진수 10진수
• 2진수
– 기계에 사용되는 수의 단위
– 큰 수 표시하고 이해하기에 곤란
• 16진수
– 이진수를 보다 함축적으로 표시가능
– 이진수 <=> 16진수 변환 용이
• 10진수
– 인간이 사용하는 수의 단위
– 2진수(16진수) <=> 10진수 변환 불편
• 연습 (연습문제)
– 진수간의 변환 및 진수연산
– 이진법을 사용한 음수의 표현 (2의 보수)
Chap1-9
16 진수 표현
binary: 0101 1001 0011 0101 1011 1001 1100 1110
hexa:
– 이진수의 축약 표현 방법
– 메모리 주소, 기계어 표현시 사용
– 어셈블리 프로그램 상에서 16진수 표현
25H
cf) 이진수의 표현:
01001100 혹은 01001100B
십진수의 표현:
75
Chap1-10
이진 산술(binary arithmetic)
• 덧셈/뺄셈
decimal
65
+ 42
binary
01000001
+ 00101010
60
- 53
-
Chap1-11
16진 산술(Hexadecimal arithmetic)
• 덧셈
decimal
165
+ 42
binary
10100101
+ 00101010
hexa-decimal
A5
2A
153
- 60
-
-
Chap1-12
음의 이진수(negative binary number)
• 음수 표현
– 부호 비트(가장 왼쪽에 위치한 비트)가 1이다
– 2의 보수 표기법 사용:
“모든 비트를 역전시키고 1을 더한다”
+ 65:
비트를 역전:
1을 더한다:
-65:
01000001
Chap1-13
음의 이진수
• 음수의 절대값 구하기: 2의 보수 사용
-65:
비트를 역전시킴:
1을 더함:
+65:
10111111
decimal
+ 65
- 65
binary
00
Chap1-14
이진 산술
• 뺄셈
– 빼고자 하는 수의 2의 보수를 취하고 그 수를 더하시오
65
+ (-42)
01000001
+
23
* 42의 2의 보수: + 42
- 42
00101010
Chap1-15
이진수의 표현
Decimal
…..
+3
+2
+1
0
-1
-2
-3
…..
binary
00000000
…..
Chap1-16
프로세서
• PC H/W 구성 요소
– 내부: 마이크로프로세서, RAM, ROM,버스,확장슬롯 등
– 외부: 키보드, 모니터, 프린터, 디스크 등
• PC 성능
– 프로세서 속도, 메모리 용량, 레지스터, 데이터 버스
프로세서
레지스터
데이터 버스 특징
8088/80188
8086/80186
80286
80386
80486
Pentium
PentiumPro
16비트
16비트
16비트
32비트
32비트
32비트
8비트
16비트
16비트
32비트
32비트
64비트
주소 24비트
주소 32비트
부동소수연산
슈퍼스칼라
내장 캐쉬
Chap1-17
EU: Execution Unit
BIU: Bus Interface Unit
...
세그먼트
레지스터
레지스터
버스
제어
장치
ALU
제어장치
flag 레지스터
IP
...
명령어 큐
Chap1-18
메모리 유형 및 구조
960K
64K ROM: 컴퓨터의 기본 기능
768K
192K ROM: BIOS
640K
128K RAM: video display
0
640K RAM
Chap1-19
메모리 상에 데이터의 표현
• 데이터는 메모리에 역순으로 표현됨
– 낮은 순서 바이트는 낮은 메모리 주소에, 높은 순서 바
이트는 높은 메모리 주소에 저장된다.
– 예제: 0529H
레지스터
05
29
메모리
29
05
주소
7612
Least significant byte
7613
most significant byte
Chap1-20
세그먼트와 주소 지정
• 세그먼트
– paragraph boundary 상에서 시작되는 특정 메모리 영역
– 세그먼트의 크기는 최대 64K 바이트
• 세그먼트 종류
– 코드 세그먼트
• 기계 명령어를 포함하는 영역
– 데이터 세그먼트
• 프로그램에서 정의된 데이터, 상수, 작업 공간 등을
포함하는 영역
– 스택 세그먼트
• 임시 공간 혹은 부프로그램 호출시 사용되는 영역
Chap1-21
세그먼트 경계
레지스터
SS
DS
CS
스택 세그먼트
데이터 세그먼트
코드 세그먼트
* 세그먼트 시작 주소는 16즉 hex 10으로 나누어지기
때문에 항상 주소의 오른쪽 끝 숫자는 0이다
* 세그먼트 주소 038E0는 038E로 저장된다,
필요할 경우에는 038E[0]으로 표현한다.
Chap1-22
세그먼트 옵셋
• 프로그램의 모든 메모리 주소는 세그먼트의 시작
주소에 상대적이다.
세그먼트
시작 주소
옵셋
(offset)
. . .
특정 주소
. . .
예: DS 세그먼트 주소:
옵셋:
실제주소:
038E0H
0032H
?
Chap1-23
레지스터
• 세그먼트 레지스터
– CS 레지스터:
• 프로그램 코드의 시작 주소를 가리킨다
• 다음 실행될 명령어 주소: CS + IP
– DS 레지스터
• 데이터 세그먼트의 시작 주소
• 특정 주소: DS + 명령어 상에 명시된 옵셋 값
– SS 레지스터
• 스택 세그먼트의 시작 주소
• 특정 주소: SS + SP
– ES (extra segment) 레지스터
• 스트링 연산시 사용
• DI (인덱스) 레지스터와 함께 사용
Chap1-24
레지스터
• 포인터 레지스터
– IP(instruction pointer) 레지스터
예) CS = 39B4[0]H, IP = 514H 일 때, 다음에 실행될 명
령어의 주소는?
– SP(stack pointer) 레지스터
예) SS = 4BB3[0], SP = 412H 일 때, 현재 처리되고 있는
스택 상의 데이터 주소는?
– BP(base pointer) 레지스터
• 매개변수 참조시 사용
• 매개변수 주소: SS + BP
Chap1-25
레지스터
• 범용 레지스터
– AX 레지스터
• 입/출력, 산술 연산시 누산기(accumulator)로 사용
AX:
AH
AL
– BX 레지스터
• 주소 지정시 인덱스로 사용: base 레지스터
– CX 레지스터
• 루프 반복 회수 계산시 사용: count 레지스터
– DX 레지스터
• 입/출력, 곱셈 , 나눗셈 연산시 사용: data 레지스터
* 덧셈, 뺄셈에 대해서 위의 모든 범용 레지스터 사용 가능
Chap1-26
레지스터
• 인덱스 레지스터
– SI 레지스터
• DS와 함께 스트링 연산에 사용
– DI 레지스터
• ES와 함께 스트링 연산에 사용
• 예제:
MOV
ADD
MOV
MOV
AX, 61B2
BX, AX
CL, 0B2
CH, 061
Chap1-27
플래그 레지스터
• 처리 결과나 컴퓨터의 현재 상태를 보여준다
•
•
•
•
•
•
•
•
•
OF(overflow): 오버플로우 발생시 설정
DF(direction): 문자열의 이동이나 비교 순서 결정
IF(interrupt): 외부 인터럽트 발생시 설정
TF(trap): 단일 스텝 모드시 설정(DEBUG 사용시)
SF(sign): 산술 연산 결과 명시(양수/음수)
ZF(zero): 산술이나 비교 연산 결과 명시(0 여부)
AF(auxiliary carry): 특정 산술에서 캐리 발생 여부
PF(parity):even or odd 패러티 명시
CF(carry): 산술, 쉬프트 연산시 캐리 발생 여부
O D I
11
T S Z
A
P
C
6
4
2
0
Chap1-28
연습문제