[smart]이재우-20140320
2014. 03. 20 수업 및 과제
1 Hexa View
- 주소/문자/A - 주소(address)범위: 4 byte, 32bit, 16진수 FFFF FFFF, 10진수(4,294,967,295)
- CPU BUS 라인에 따라 메모리 처리 용량이 결정
2 IEEE 754 - floating point (부동소수점)
IEEE 754는 컴퓨터에서 소숫점을 표현하기 위한 방법이다.
single precision은 32비트 즉 1워드에 저장하고
double precision은 64비트 즉 2워드에 저장한다.
이 비트를 3부분으로 나누어 부호, 소수부분, 지수부분으로 인식한다.
(-1)^s * (1 + F) * 2^E |
F : fraction
앞쪽 비트부터 2^-1, 2^-2... 를 의미한다.
E : exponent
지수부분 기본적으로 unsigned 이며 single precision에선 127, double에선 1023을 뺀다
S : sign
부호 0이면 양수, 1이면 음수
single [sign : 1bit][exponent : 8bit][fraction : 23bit]
double [sign : 1bit][exponent : 11bit][fraction : 52bit]
이 수를 single precision으로 보고 해석하면
1 0111 1110 1000 0000 0000 0000 0000 000 | ||
부호비트 |
|
|
1 |
0111 1110 |
1000 0000 0000 0000 0000 000 |
이 수를 single precision으로 보고 해석하면
1 : 음수
0111 1110 = 126
E = 126 - 127 = -1
1000 0000 0000 0000 0000 000 = 2^(-1) = 0.5 => 1.5
답은 -1 * 1.5 * 2^(-1) = -0.75 가 된다.
[예제]
실수 : 3.25의 값 계산
메모리 실제 저장 값 |
00 00 50 40 (Little Addian 방식으로 저장 Intel PC) | ||
숫자 정리 |
40 50 00 00 | ||
2진수 변환 |
4 0 5 0 0 0 0 0 0100 0000 0101 0000 0000 0000 0000 0000 => 4byte | ||
bit 별 기능 |
부호비트 1bit |
지수부(2^E) => 8bit |
가수부(1 + F) => 23bit |
0 |
1000 0000 |
1010 0000 0000 0000 0000 000 | |
+ |
128 64 32 16 8 4 2 1 승수 128-127= 1 =>2^1승 |
.1010 0000 0000 0000 0000 000 => 1.1010 0000 0000 0000 0000 000 | |
십진수로 변환 |
부호^s * (1 + F) * 2^E = 2^1 승 * 1.1010 0000 0000 0000 0000 000 = 11.010 = 1*(2^1)+1*(2^0).1*(2^-2) = 2+1.(1/4) = 3.25 |
3 함수
[Code(함수), Data(전역변수), BSS(전역변수), Heap(동적할당), Stack(지역변수)]
메모리의 영역 5종류
Code(함수) |
Data(전역변수) |
BSS(전역변수) |
Heap(동적할당) |
Stack(지역변수) |
남이 만든 함수를 가져오는 것(링크한다.)
C에서 만든 함수는 어셈블리로 가면 _언더바가 붙는다(규칙).
따라서 _언더바 없이 해석한다.
함수도 심볼 테이블(형식 Type, 변수 Name, 주소 Address)에 들어 간다.
변수 및 함수들의 주소는 한 곳에 몰려 있다.
3.1 Simbol Table(심볼 테이블)
Type 형식 |
Name 변수, 함수 이름 |
Address 주소 |
컴파일 처리 순서
*.c > *.i >*.asm >*.obj >*.exe
*.c > *.i > 심볼 테이블에 해당
3.2 리눅스에서 함수의 형식을 알수 있는 방법
리눅스에서 함수의 형식을 알수 있는 방법 | |
명령어 |
설명 |
man 숫자 함수명 |
메뉴얼 보기 *manual 약어 / 숫자:몇장(chpter) / 함수이름 예) man 3 printf ->printf(3) 장을 열다. |
q |
메뉴얼 끝내기 |
/abc |
단어 찾기 |
3.3 int printf(cons char *format, ....);
화면에 출력한 갯수를 반환한다.
int main(void);
int: 반환값의 Type
main: 이름
():인수/인자