논리의 표현 진법과 숫자 표현 2진수와 10진수 문자의 표현 논리수학과 표현 논리의 표현 진법과 숫자 표현 2진수와 10진수 문자의 표현 dolicom@naver.com http://blog.naver.com/dolicom
숫자와 문자의 표현 방식 숫자의 표현 ASCII 코드 KS-5601 UNICODE 2진수 보수 체계 – 정수형 Floating Point - 실수형 ASCII 코드 미국의 컴퓨터 문자 표현 ( 1바이트) KS-5601 한국어 지원을 위한 완성형 표준안 (2바이트가 한글자) UNICODE 다국어 지원을 위한 표현(2바이트)
진수 2진수 : 0과 1로 두가지 상태로 표현 8진수 : 0~7로 표현 10진수 : 인간의 대표적 숫자 표현 CPU의 내부의 디지털 회로에 의해 처리 8진수 : 0~7로 표현 10진수 : 인간의 대표적 숫자 표현 16진수 : 4비트를 한 자리로 표현 0~15까지를 0,1,2, … , 9,A,B,C,D,E,F로 표현 기계어 및 C의 숫자 표현에 많이 사용 한다. 어셈블리 1BH, 0FEH등으로 C에서는 0x1b, 0xFE등으로 사용
2진수 한 비트는 디지털 회로에서 0과 1로 표현 여러 비트의 자릿수로 표현 마지막 비트는 2로 나눗 나머지 값이다. 2진수 0 1 1 0 3 2 1 자릿수의 값 2 2 2 2 8 4 2 1 8x0+4x1+2x1+1x0 => 4+2 => 6 마지막 비트는 2로 나눗 나머지 값이다.
10진수 인간이 일상적으로 사용하는 수 마지막 자리는 10으로 나눗 나머지 값이다. 5 0 4 3 3 2 1 자릿수의 값 10 10 10 10 1000 100 10 1 10진수 1000x5+1000x0+100x4+1x3 => 5043 마지막 자리는 10으로 나눗 나머지 값이다. 5043 / 10 => 몫 504, 나머지 3
16진수 2진수 4비트를 16진수 한자리로 표현 마지막 자리는 16으로 나눗 나머지 값이다. A 1010 10 B 1011 11 C 1100 12 D 1101 13 E 1110 14 F 1111 15 16진수 3 0 E A 3 2 1 자릿수의 값 16 16 16 16 4096 256 16 1 10진수 4096x3+256x0+16x14+1x10 => 30352 마지막 자리는 16으로 나눗 나머지 값이다. 30352 / 16 => 몫 1576, 나머지 10 (=A)
2진수의 표현 전자의 디지털 공학은 2진수의 표현을 사용 논리 1과 0은 2진수 상태를 전압으로 표시 초기의 논리는 5V 전압을 기준으로 표현 1 = 5V -> 3.3V 0 = 0V -> 0V 3.3V로 바뀌는 추세 동작 속도 및 전력 감소 효과 전압은 점점 낮아지는 추세이나 디지털 회로를 구성하는 소자의 특성에 따라 한계가 있다. 디지털 회로로 구성되어 칩은 정해진 전압에 의해 구동되며 회로 설계 시 동작 전압을 확인 해야 한다.
논리의 부울대수 AND : 논리 and – 입력 모두 1일때 출력1 OR : 논리 or – 하나라도 1입력이면 1출력 NOT : 논리 not – 입력의 반대 출력 XOR : 논리 XOR – 2입력이 다르면 1출력 AND OR XOR NOT A B Y A B Y A Y A B Y 0 0 0 0 1 1 0 1 1 1 1 0 1 1 0 0 0 0 0 1 1 0 1 1 1 0 0 0 0 0 1 0 0 0 1 1 1 eXclusive OR
논리 기호 기본 논리 A A Y=A.B Y=A.B B B A A Y=A+B Y=A+B B B A Y = A A A =AB+AB B B
전자회로 구현-TTL 74LS00(NAND) Y = A & B = not (A and B) R 100오옴 1 = 4.xV 논리처리 A 논리 처리 A&B 1 = 4.xV 0 = 0.2V 토템폴 출력 B
논리 회로의 선 연결 5V 4.7K Vcc 4.7K
논리의 전자적 표현(개념모델) 5V S1 switch 1 = 5V 입력 0 = 0V 처리 입력 Z = 플로팅 상태 로직 출력부 S1 switch 입력 처리 로직 1 = 5V 0 = 0V Z = 플로팅 상태 (어떤 전압 상태도 아님) 입력 S2 switch 0V GND
로직 구현 논리의 표현
전압과 전류 V = IR 오옴의 법칙 디지털 회로는 표현에서 전압은 고정하고 전류 변화 전류는 회로의 구성에 따라 자동으로 결정 된다. 디지털 회로의 구현은 위의 법칙에 따라 TR, FET등으로 구성 한다.
논리 1 출력 5V 로직내부(칩) 전류 S1 = ON 입력처리 및 스위치제어 입력 1 = 5V S2 = OFF 0V GND
논리 회로에서 전류 1 전류=0 1 1 1 1=4.xV 0=0.2V 5V Vcc ON OFF OFF ON OFF OFF ON 4.7K 전류=0 1 1 1 Vcc 4.7K ON OFF 1=4.xV 전류=출력에따라 ON OFF OFF 0=0.2V ON OFF ON OFF OFF ON OFF ON
논리 회로에서 전류 2 1 1 전류 1=4.xV 0=0.2V 5V 5V Vcc Vcc OFF ON ON OFF OFF ON 4.7K 4.7K 1 1 전류 Vcc Vcc 4.7K 4.7K OFF ON 1=4.xV 전류=출력에따라 OFF ON ON 0=0.2V OFF ON OFF OFF ON OFF ON OFF
논리 0 출력 5V S1 = OFF 입력처리 및 스위치제어 입력 0 = 0V 전류 S2 = ON 0V GND
논리 1 입력 5V 5V 전류 S1 = ON S1 = OFF NOT 동작 입력 예 0 = 0V 전류 S2 = OFF 출력 입력 5V 5V 전류 S1 = ON S1 = OFF NOT 동작 예 입력 0 = 0V 전류 S2 = OFF S2 = ON 0V GND 0V GND
논리 회로의 선 연결 5V 4.7K Vcc 4.7K
논리 0 입력 5V 5V 전류 S1 = OFF S1 = ON NOT 게이트 동작 예 0 = 0V 입력 전류 S2 = ON 0V GND 0V GND
논리 Z – Floating Point 5V S1 = OFF 입력처리 전류 = 0 및 입력 스위치제어 어느 전압 OE 5V Y=A, OE=1 Y=Z, OE=0 A OE S1 = OFF Y=A, OE=1 Y=Z, OE=0 A 입력처리 및 스위치제어 전류 = 0 입력 어느 전압 OE S1 = OFF 0V GND
논리의 전자적 표현- 한 개의 SW 5V 5V 칩 내부 입력 처리 입력 1 = 5V로 유지 S1 switch 0 = 0V Z = 불가능 S1 switch 0V GND
논리 1 – Open Collector 5V 5V 칩 내부 전류 R 저항 4.7K 10K 입력처리 및 입력 스위치제어 S1 = OFF 0V GND
논리 0 – Open Collector 5V 5V 칩 내부 전류1 R 저항 4.7K 10K 입력처리 및 입력 스위치제어 전류2 S1 = ON 0V GND
Open Collector 예 A B Y C
오픈 컬렉터와 토템폴 출력 오픈 컬렉터 -출력쪽에 풀업 저항을 사용 -TTL의 내부에서 보면 TR의 에미터가 내부 풀업이 없는 상태 : IC의 출력핀에 연결 -외부에서 이 에미터(IC의 출력핀)에 전원을 공급 -출력을 다른 전압으로 구동 가능 – (예) 12V로 풀업 가능, 전압은 IC마다 다름 -쓰임새는 wired-or로 사용 (오픈 콜렉터 출력끼리는 서로 직접 연결) 두개의 출력이 하나는 "로우“, 하나는 "하이" 이더라도 쇼트되지 않음 토템폴 출력 -토템풀: 북아메리카 인디언들의 조상의 혼을 기리는 상징물로서 두개 이상의 비슷한 조각상이 하나의 기둥(Pole)에 세겨진것을 말함 -일반적 TTL(7404)의 출력이 TR이 출력핀을 중심으로 상하고 두개 겹쳐진 모양 -출력에 Pull-up 저항이 없이 동작 -절대로 출력을 출력끼리 접속해서는 안됨 : 두개 출력의 논리가 반대일 때, 내부 출력스위칭 TR은 전원에 대해 쇼트와 같이 되어 큰전류로 출력 TR이 파괴
토템폴 출력의 문제 – 출력 끼리 연결 출력을 두 개 묶으면 논리가 반대로 출력되면 과전류가 흐른다. 전류1 전류2 전류 A 5V S1=ON S2=OFF 1 = 5V A Y 전류1 B A Y 전류2 5V S1 = OFF 5V 0 = 0V B S2 = ON 전류
출력 끼리 연결 사용 예 출력을 두 개 묶고 한 출력은 Z으로 설정하고 나머지에서 출력으로 사용 전류1 전류2 CA A Y B 5V S1=OFF S2=OFF Z = open 전류1 B CA CB A Y 전류2 5V 5V S1 = OFF CB 0 = 0V B S2 = ON
출력 끼리 연결 사용 예 - 충돌 출력을 두 개 묶고 한 출력은 Z으로 설정하고 나머지에서 출력으로 사용 전류1 전류2 CA Y 5V 5V S1=ON S2=OFF 1 = 5V 전류1 B CA CB A Y 전류2 5V 5V S1 = OFF CB 0 = 0V B S2 = ON
로직 구현 FET을 사용한 논리 구현
FET(CMOS)을 사용 할 경우 5V p-channel A 논리 처리 1 = 4.xV 0 = 0V B n-channel
FET(CMOS) NOT 게이트(gate) Y = A 5V p-channel 1 = 4.xV 0 = 0V Vin Vout n-channel
CMOS NOT 게이트(gate) A=0V A C X B Y tDa=수nsec 지연 구간 X의 전압과 전류 A C B 입력신호 1 C B 1 1 A=0V 1=4.xV 0 = 0.xV 입력신호 C B 1 tDb
CMOS NOT 게이트(gate) A=5V A C X B Y tDa=수nsec 지연 구간 Y의 전압과 전류 A B C C B 1 5V B 1 1 0 = 0.xV A=5V C C B 1 1=4.xV 입력신호 tDb
TTL과 CMOS 신호 전압
TTL과 CMOS-동작속도와 소비전력
논리 표현 비트와 바이트
CPU의 데이터 처리 단위 Bit : 한 상태를 나타내는 최소의 단위 . Byte :한 문자를 나타내는최소의 단위 ( 8 Bit). Word : 한 단어를 나타내는최소의 단위. (CPU의 비트 수와 연관) 소형CPU : 2 Byte = 16bit 대형CPU : 4 Byte = 32bit 1bit : 어느 한 상태를 나타냄. (1) ON (0) OFF 1byte = 8 Bit : 256가지상태를 나타냄. 0 1 0 1 1 0 0 1
1byte 단위 처리 예 - 8051 8비트 단위로 저장 데이터 버스 A = 0 B . . . . . . FLAG 설정 25 명령어 해석 02 Oprand 버퍼 A = 0 B . . . . . . FLAG 설정 00 02 ALU 8비트 단위로 계산 02
1byte 단위 처리 예 - 메모리 메모리는 1, 8, 16, 32단위로 엑세스 할수 있음 칩을 만들 때 처리 단위는 결정되어 있다. 8단위의 칩 주소 7 6 5 4 3 2 1 0 0000 0001 0002 0003 0004 0005 . . . 7FFF
1byte 단위 메모리 읽기 8비트 단위 칩은 한번 무조건 8 비트 단위로 엑세스 A2 A1 A0 0 0 1 1 2 3 4 5 0 0 1 주소 7 6 5 4 3 2 1 0 1 2 3 4 D7 D6 D5 D4 D3 D2 D1 D0 5 6 7 MUX
1byte 단위 메모리 -바이트단위만 특정 1비트만은 처리가 불가능 A2 A1 A0 0 0 1 1 2 3 4 5 6 7 MUX 0 0 1 주소 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 MUX
1byte 단위 메모리 쓰기 8비트 단위 칩은 한번 무조건 8 비트 단위로 엑세스 정해진 비트 수 단위로만 처리 A2 A1 A0 주소 0 0 1 7 6 5 4 3 2 1 0 1 2 3 저장신호 발생 4 5 6 7
메모리의 필요한 신호선-SRAM 8x8bit=64bit 메모리 Vcc GND Vcc GND 전원 D7 A2 D6 A1 D5 CS D1 RD/WR D0 Vcc GND Vcc GND 전원
숫자와 논리 계산 숫자의 표현
숫자의 표현과 프로그램 정수는 8비트 단위의 계산을 한다. C int는 몇 개의 레지스터를 묶어 16비트로 표현 한다. 레지스터 사용 방식은 컴파일러마다 틀림 숫자의 계산은 레지스터 값이 ALU 통해 계산 한다. 실수형 자료(Floating Point) 32비트를 처리를 위해 2바이트의 변수를 사용한다. 내부적으로 실수 계산을 불가능 하기 때문에 별도의 함수로 처리
C에서의 숫자 표현 C에서 2,10,16진수는 개발자의 표현에 의해 컴파일러가 2진수로 변환하여 사용 한다. int cnt16; char cnt8; cnt8 = 0xFE; cnt16 = -2; 0xFE는 컴파일러에 의해 2진수 1111 1110로 표현되어 프로그램 코드에 붙는다. 8051의 예: ; cnt8 = 0xFE; 74 FE MOV A,0FEH => 01110100 11111110 F5 A0 MOV 0A0H,A => 11110101 10100000 결국 위의 프로그램은 01110100 11111110처럼 변형되어 ROM/FLASH에 들어 가서 프로그램이 실행된다.
정수형 표현 체계 I 2진수의 숫자 표현법-각 CPU의 처리 단위에 따라 비트는 다름. 2의 보수 체계를 사용 정수형 계산은 CPU 내의 ALU을 이용 직접 계산 된다.
10진수와 2진수의 변화 – 방법1 원리 마지막 비트는 2로 나눈 나머지다. 2로 나누면 전체 비트가 오른쪽으로 한 비트 shift 된다. 1. 0111 - 마지막 비트(LSB) 1은 2로 나눈 나머지 값이다. 2. 7 / 2 = 3 -> 나머지 1 3. 3은 7을 오른 쪽으로 1비트 쉬프트 한 값이다.
2진수를 10진수로 변환 각 자리는 2의 승수 2진수 0 1 0 0 1 1 0 1 7 2 2 2 2 2 2 2 2 6 5 4 3 2 1 128 64 32 16 8 4 2 1 01001101(2진수) = 64+8+4+1 = 77(10진수)
2로 나누어 나머지 얻기 3 2 7 6 1 --- 1 ( LSB) 1 2 3 2 1 --- 1 2 1 1 ---- 1 2 7 6 1 --- 1 ( LSB) 1 2 3 2 1 --- 1 2 1 1 ---- 1 7 = 111
2로 나누어 나머지 얻기 2 2 5 4 1 --- 1 ( LSB) 1 2 2 0 --- 0 2 1 1 ------1 2 5 4 1 --- 1 ( LSB) 1 2 2 0 --- 0 2 1 1 ------1 5 = 101
2로 나누어 계산 – 표기법 변환 2 1 --- 1 (MSB) 2 3 --- 1 2 7 --- 1 ( LSB) 5 = 101
38 => 100110 0 1 2 1 0 2 2 0 2 4 1 2 9 1 2 19 0 2 38 38 = 100110
보수 1의 보수 : 각 비트 값을 다른 값으로 바꾼것. 2의 보수 : 2의 보수 값에 1을 더한 값. 0010 0110 1101 1001 1의 보수 0000 0001 + 1101 1010 2의 보수
정수의 표현 - 2진수 표현 4비트 8비트 16비트 +7 0111 6 0110 … 3 0011 2 0010 1 0001 0 0000 -1 1111 -2 1110 -3 1101 -4 1100 -5 1011 -8 1000 +127 0111 1111 126 0111 1110 … 3 0000 0011 2 0000 0010 1 0000 0001 0 0000 0000 -1 1111 1111 -2 1111 1110 -3 1111 1101 -4 1111 1100 -5 1111 1011 -128 1000 0000 +32767 0111 1111 1111 1111 32766 0111 1111 1111 1110 … 3 0000 0000 0000 0011 2 0000 0000 0000 0010 1 0000 0000 0000 0001 0 0000 0000 0000 0000 -1 1111 1111 1111 1111 -2 1111 1111 1111 1110 -3 1111 1111 1111 1101 -4 1111 1111 1111 1100 -5 1111 1111 1111 1011 -32767 1000 0000 0000 0001 -32768 1000 0000 0000 0000
4비트 정수 + 8비트 정수 + 정수형 자료의 계산 4+3 = 7 4 0100 + 3 0011 7 0111 4 0100 + 3 0011 7 0111 8비트 정수 + 4 0000 0100 + 3 0000 0011 7 0000 0111
4비트 정수 연산 원리 (뺄셈) 정수형 자료의 계산 뺄셈 (예) 5-3 = 2 연산 순서 1. -3 값의 2의 보수를 구한다. +7 0111 6 0110 5 0101 4 0100 3 0011 2 0010 1 0001 0 0000 -1 1111 -2 1110 -3 1101 -4 1100 -5 1011 -6 1010 -7 1001 -8 1000 (예) 5-3 = 2 연산 순서 1. -3 값의 2의 보수를 구한다. +3 : 0011 1의 보수 : 1100 1을 더함 : 0001 1101 => -3 2. 연산 5 + (-3)을 한다. +5 0101 + (-3) 1101 2 0010
8비트 정수 연산 -뺄셈 (예) 5-3 = 2 연산 순서 1. –3은 +3값의 2의 보수를 구한다. +3 : 0000 0011 +127 0111 1111 126 0111 1110 … 3 0000 0011 2 0000 0010 1 0000 0001 0 0000 0000 -1 1111 1111 -2 1111 1110 -3 1111 1101 -4 1111 1100 -5 1111 1011 -128 1000 0000 (예) 5-3 = 2 연산 순서 1. –3은 +3값의 2의 보수를 구한다. +3 : 0000 0011 1의 보수 : 1111 1100 1을 더함 : 0000 0001 1111 1101 => -3 2. 연산 5 + (-3)을 한다. +5 0000 0101 + (-3) 1111 1101 2 10000 0010
16, 32 비트 계산 1. –3은 +3값의 2의 보수를 구한다. 2. 연산 5 + (-3)을 한다. 32 비트 계산 0000 0000 0000 0011 1111 1111 1111 1100 -> 1의 보수 0000 0000 0000 0001 + 1 1111 1111 1111 1101 2의 보수 = -3 2. 연산 5 + (-3)을 한다. 0000 0000 0000 0101 1111 1111 1111 1101 1 0000 0000 0000 0010 => 2 32 비트 계산 0000 0000 0000 0000 0000 0000 0000 0101 1111 1111 1111 1111 1111 1111 1111 1101 1 0000 0000 0000 0000 0000 0000 0000 0010
C언어의 숫자 표현과 CPU내의 표현 C의 변수는 메모리의 내용을 CPU의 레지스터로 가져와 ALU을 이용하여 계산. 정수형 연산 기계어로 값을 계산 정수형 변수 int는 2의 보수 체계를 이용 정수형 변수 unsigned int는 마이너스 부분이 없어 2진수 체계로 계산 정수형 변수 int의 비트는 CPU마다 다름 8비트 CPU : 거의 16비트 정수형 사용 16/32비트CPU : 거의 32비트 정수형 사용
C의 unsigned int 표현 8비트 표현(C에서는 거의 사용안함) 16비트 표현 255 1111 1111 254 1111 1110 253 1111 1101 … 130 1000 0010 129 1000 0001 128 1000 0000 127 0111 1111 126 0111 1110 3 0000 0011 2 0000 0010 1 0000 0001 0 0000 0000 65535 1111 1111 1111 1111 65534 1111 1111 1111 1110 65533 1111 1111 1111 1101 … 130 0000 0000 1000 0010 129 0000 0000 1000 0001 128 0000 0000 1000 0000 127 0000 0000 0111 1111 126 0000 0000 0111 1110 3 0000 0000 0000 0011 2 0000 0000 0000 0010 1 0000 0000 0000 0001 0 0000 0000 0000 0000
문자 문자의 표현
문자의 표현 ASCII 코드 KS-5601 초기 컴퓨터 개발이 미국에서 발전. 문자 표현을 정의 하고 표준화 함. 알파벳과 기타 문자를 한 바이트로 정의 컴퓨터가 세계화 되면 다양한 문자 표현 필요 UNICODE로 표현 KS-5601 한글의 문자를 컴퓨터에서 처리 조합형 문자 코드
ASCII 코드와 CPU내의 처리 보통 문자는 여러 문자(string)을 처리 하는 경우가 많음. 메모리에 순차적으로 문자를 배열하여 처리 어셈블러 ASCTBL: DB '0123456789ABCDEF‘ DB 00H C printf(“Hello!\n”);
String의 표현 “홍길동” 홍 : 0xC8AB 길 : 0xB1E6 동 : 0xB5BF “Hello” “104” ‘H’ char *pmsg = “Hello”; printf(“Hello”); Assembly MsgH : DB ‘Hello’ char *pmsg = “홍길동”; printf(“홍길동”); “홍길동” “Hello” ‘H’ ‘e’ ‘l’ ‘l’ ‘o’ 0x00 “홍” “길” “동” 0x00 0x48 0x65 0x6C 0x6C 0x6F 0x00 0xC8 0xAB 0xB1 0x6C 0xB5 0xBF 0x00 홍 : 0xC8AB 길 : 0xB1E6 동 : 0xB5BF “104” ‘1’ ‘0’ ‘4’ 0x00 0x31 0x30 0x34 0x00 0xXX 0xXX
2진수 계산 연습 1. 예 1 char inum1, inum2, ret; void main() { inum1 = 5; ret = inum1+inum2; } 이 때 ret을 계산하는 과정을 2진법으로 바꾸어 계산 하라. 계산 과정을 모두 표시하고 계산값을 10진수의 계산 결과와 같은 지를 생각한다. 2. 예 2 int inum1, inum2, ret; inum1 = 53; inum2 = -6; 위와 같은 과정으로 2진수 계산을 하여 ret값을 구하라. 3. 예 3 정수형 두수를 각자 원하는 값을 설정하여 계산 하라. 5가지 이상을 계산 하라.