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