2010년 10월 28일 목요일

06. Low-Level Programming Languages and Pseudocode

PEP/8로 작성한 Bubble sorting


사실 말이 버블정렬이지 pep/8은 처음 해보기두 하구

게다가 assembly language라 메모리에 올리는 법도 모르겠고

인덱스를 활용하고 싶어도 활용하는 방법도 모르겠고

찾아봐도 .......나오질않고

나와도............................모르겠고


결국 알아낸건

레지스터가 A말고도 X가 하나 더있다는걸 알아냈습니다

사실.........................큰 소용은 없었지만 사실 쓰지 않아도 되지만

그냥 써봅니다.


일단 Bubble sorting은 Swap을 기본으로합니당

A<->B를 맞교환하는 것이죠

첫번째와 두번째를 비교해서 순서대로 교환,  두번째와 세번째를 비교하고
 교환, 교환, 교환, 교환, 교환!!!! 해서 결국 모든 정렬이 완성됩니다.

잘 모르겠다구요? 그럼 참고자료 나가요~~~~~~~~~~~







i번째 원소는 i-1번 비교됩니다~

따라서  n개의 원소의 나열일 경우 시그마 1부터....n-1까지의 합이니까 ..

총 n(n-1)/2번의 비교를 하겠네용???????????

알고리즘은 다음과 같아요

간단하죠????????????????

그리고 C로 짜면 이렇게 되겠네요



간단 간단 간단 해보이죠? for문이 두번 돌아가네요

사실 이 때문에 다른 Sorting Algorithm에 비해 매우 비효율적입니다. 수행시간이 길어져버려요.

for문을 계속해서 계속해서 계속해섬ㄴ이ㅏㅁㄴ이러아으가으가으가으아ㅓ아어민알 계~~~~~~~~~~~속해서 돌려야 되기 때문에 매우 느려요 느려.

그래서 이 길고 .. 긴 .. .. 멍청한 sorting  방법은 하나 하나 말해줘야 알아듣는 비효율적인 어셈블리어에게 딱입니다. .....가 농담일지 진담일지... 알아봐야겠네요.
이 비효율적인 sorting 을 왜 쓰는걸까요?

그림을 보면 알다시피 매우 직관적이죠?

그래서 한줄 한줄 직접 말을 해줘야 알아듣는 기계에게 명령하기 딱인sorting 방법입니다.

보자마자 '아!!!!! 이거구나' 하고 직관적으로 알기가 쉬워서 우리가 바로 low-level language로 짜기두 쉽구요.

그렇다면

이 sorting 을 이용할 수 밖에 없는 어셈블리어가 얼마나 비효율적인지 그림에 보이는 그대로 짜봤습니다.

먼저 3개짜리입니다.

BR      main
check: .WORD 0x0000
a1:    .BLOCK  2
a2:    .BLOCK  2
a3:    .BLOCK  2
main:    DECI   a1,d
         DECI   a2,d
         DECI   a3,d
         BR      loop112

loop112:  LDA a1, d
         SUBA a2, d
         BRLT ex112
         BR loop123
       
ex112:    LDA a1, d
         LDX a2, d
         STA a2, d
         STX a1, d          
         BR loop123
loop123: LDA a2, d
         SUBA a3, d
         BRLT ex123
         BR loop212
ex123:   LDA a2, d
         LDX a3, d
         STA a3, d
         STX a2, d
         BR loop212
loop212:  LDA a1, d
         SUBA a2, d
         BRLT ex212
         BR sort
       
ex212:   LDA a1, d
         LDX a2, d
         STA a2, d
         STX a1, d          
         BR sort
sort:   DECO a1, d
         DECO a2, d
         DECO a3, d
         BR finish
finish: STOP
.END

짜잔 ㅋ.........................................................

아까 버블소팅이 input의 개수가 n개일때 n(n-1)/2라고했죠

3개짜리 sorting은 그러니까 3(2)/2 니까 3번 비교를 해야되요.

loop가 3개가 나와있는걸 알 수 있습니다.


그럼 과감하게 5개짜리를 sorting 해 볼까요 ~~~~~~~?


BR      main
check: .WORD 0x0000
a1:    .BLOCK  2
a2:    .BLOCK  2
a3:    .BLOCK  2
a4:    .BLOCK  2
a5:    .BLOCK  2
main:    DECI   a1,d
         DECI   a2,d
         DECI   a3,d
         DECI   a4,d
         DECI   a5,d
         BR      loop112
loop112:  LDA a1, d
         SUBA a2, d
         BRLT ex112
         BR loop123
       
ex112:    LDA a1, d
         LDX a2, d
         STA a2, d
         STX a1, d          
         BR loop123
loop123: LDA a2, d
         SUBA a3, d
         BRLT ex123
         BR loop134
ex123:   LDA a2, d
         LDX a3, d
         STA a3, d
         STX a2, d
         BR loop134
loop134:  LDA a3, d
         SUBA a4, d
         BRLT ex134
         BR loop145
       
ex134:    LDA a3, d
         LDX a4, d
         STA a4, d
         STX a3, d          
         BR loop145
loop145: LDA a4, d
         SUBA a5, d
         BRLT ex145
         BR loop212
       
ex145:   LDA a4, d
         LDX a5, d
         STA a5, d
         STX a4, d          
         BR loop212
loop212: LDA a1, d
         SUBA a2, d
         BRLT ex212
         BR loop223
       
ex212:    LDA a1, d
         LDX a2, d
         STA a2, d
         STX a1, d          
         BR loop223
loop223:  LDA a2, d
         SUBA a3, d
         BRLT ex223
         BR loop234
       
ex223:    LDA a2, d
         LDX a3, d
         STA a3, d
         STX a2, d          
         BR loop234
loop234:  LDA a3, d
         SUBA a4, d
         BRLT ex234
         BR loop312
       
ex234:    LDA a3, d
         LDX a4, d
         STA a4, d
         STX a3, d          
         BR loop312

loop312:  LDA a1, d
         SUBA a2, d
         BRLT ex312
         BR loop323
       
ex312:    LDA a1, d
         LDX a2, d
         STA a2, d
         STX a1, d          
         BR loop323
loop323:  LDA a2, d
         SUBA a3, d
         BRLT ex323
         BR loop412
ex323:    LDA a2, d
         LDX a3, d
         STA a3, d
         STX a2, d          
         BR loop412
loop412: LDA a1, d
         SUBA a2, d
         BRLT ex412
         BR sort       
ex412:   LDA a1, d
         LDX a2, d
         STA a2, d
         STX a1, d          
         BR sort
sort:   DECO a1, d
        DECO a2, d
        DECO a3, d
        DECO a4, d
        DECO a5, d
        BR finish
finish: STOP
.END


이건 input이 5개니까 5(4)/2 = 10

즉 10개의 loop를 볼 수가 있어요.

이렇게 C에서는 for문 한 줄이면 될 것을

어셈블리어에서는 loop하나하나를 다 구현해주었습니다.

사실 짜라고하면 input10개 짜리 sorting도 할 수 있겠지만

.............................. 우리들의 지식인 네이버에서 조차 나오지않는 PEP/8을 찾는데 많은 시간을 허비하느라 매우 피곤하여 ......10개 짜리는 여러분들의 상상력에 맡기며 넘어가도록 하겠습니다.


아마 instruction을 더욱 많이 알고 사용법을 자세히 알게 되면 위의 C 에서 짠 것과 같이 코드의 길이가 반의반의반의반의반의반의반의 반으로 화아아ㅏ아아아아ㅏㅏㅏㅏㅏ악 줄어들겠죠.

Bubble sorting 말고도 다른 효율적인 알고리즘들도 어셈블리어로 구현해낼수 있겠죠?

아마 그럴거에요. 그러지않고서야 저 긴 ..코드들을 다 써줄리가.

일단 PPT에 있는 inst로 만들 수 있는 건 저정도뿐이네요 ㅜ.ㅜ 잉잉


분명 더 많이 공부하면 길이 있을 것입니다.

공부는............ 좋은 거니까요.


하지만 ..............................................................................

이번 블로깅 마감날짜도 다가오고

Computer Organization and Design 과 Algorithm과 교직과 Programming language와 multimedia system 등 등 등의 몰아치는 과제로 인해.. ㅠㅠㅠ


PEP에 관해 더 알아 보고 싶지만 아쉽지만 아쉽지만 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

안녕펩......






이만 블로깅을 마치겠습니다.



그럼안뇽~~~~~~~~~~~~~~~~~~~~~~~~~~~~~♡


bubble sorting 도 알고 assembly language도 알고 1석 2조였죵 '-^ ㅋ 꺅




마지막으루 직접 돌려본 화면과

출처 - http://blog.naver.com/redwave102?Redirect=Log&logNo=80073404467



그럼 정말루 끗 ^^*

2010년 10월 24일 일요일

05. Computing Components

세상에서 가장 비싼 컴퓨터



용도는 말그대로

세상에서 가장 비싼 컴퓨터 입니다

http://shop.danawa.com/baropc/estimate/estimate_prod.php?nSetEstimateListSeq=357642

컴퓨터 한번 보는 김에

기분이라도 내보려고ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

나는 돈많은 여자 이얏호





가격은 1억을 넘는군요.


다나와 사이트에 견적 올리는 란이 활성화가 되있지 않길래 거기에서는 코멘트를 안받고

고려대학교 컴퓨터 교육과에 재학중인 김ㅇㅇ선배님께 의견을 들어보았습니다.


무슨 용도로 사용하시는지는 모르겠지만..
중요한 일을 하시는거 같은데 기왕이면 같은 걸로 하나 더 사셔서 RAID 구성하시구요
정확한 스펙비교는 못하겠지만 다른 부품들의 성능에 비해서 메인보드가 충분히 제 역할을 해줄 수 있을지 모르겠네요



그래서 메인보드를 바꿨습니다

삼십만원에서 오백만원짜리로

그래서 컴퓨터는 1억을 넘게되었습니다

이야호 ㅋ

컴퓨터가 100만원인줄로만 알았던 우리들에게

새로운 인식을 심어준 좋은 경험이었습니다.


1억짜리컴퓨터는누가쓸까요?







정답 : 내가 ㅋㅋ


그럼 오늘은 요기까지! 수업시간에 뵈용~



P.S : ㅇㅇ아고마웡

2010년 10월 7일 목요일

04. Gates and Circuits

Circuit은 어떻게 이루어졌을까?
 
정답은?
 
Circuit > Logic gate > TRANSISTOR!

Circuit 회로는 Logic gate들로 구성되죠.
Logic gate는 수업시간에 배웠다시피 and, or, nand, xor등등의 gate들이 있어요!
그렇다면 이 gate들은 어떻게 만들어질까요?

바로 트랜지스터입니다! 두둥

트렌지스터는 하나의 포트와 두 개의 전압과 이어진 부분, 즉 3개의 부분으로 나뉘어 있어요.


이렇게 스위치(gate)부분과
이것과 이어진 drain, source라는 두가지 terminal이 있지요.

이것은 트랜지스터를 간단히 그림으로 표현한 것이에요.


그렇다면 트렌지스터는 무엇으로 부터 만들어질까요?

바로 실리콘!
 
입니당. 반도체 생각하시면 되요~

실리콘은 도체가 아니에요 ㅠㅠ 그래서 전기가 통하지 않죠.
그러나 도핑된 실리콘은 전기가 흐를 수 있답니다.

도핑된 상태에 따라서 n-type과 p-type으로 나눠집니다.

n-type 은 전자가 자유롭게 이동하는 형식이구요.
p-type 은 양공(정공이라고도불 러요)이 자유롭게 변하는 형식입니다.




 
모두들 고등학교 과학시간에 한번쯤 들어보셨죠 ^^?
 

이제 본격적으로 트렌지스터에 대해 알아볼까요?

흔히 사용하는 트랜지스터를 MOS transistor라고 해요.

MOS Transistors  = Metal oxide silicon (MOS) transistors의 약자 입니다.

-메탈을 사용한 Polysilicon gate
-Oxide (silicon dioxide) 로 이루어진 절연체
-Doped Silicon 기반 물질

이 바로 그것인데요.

gate에 전압이 가해졌을때 한쪽은 반도체, 한쪽은 통로 역할을 하는 절연체 역할을 하게 되어 전류를 적절히 조절할 수 있습니다.

전류는 전자가 이동하거나 정공이 변화하면서 흐르게되요^^


  

그렇다면 이 MOS트렌지스터는 어떤 종류가 있을까요?

위의 그림에서 보듯이 nMOS와 pMOS입니다!


                                                        nMOS Transistor

   Gate = 0 (OFF)                                     Gate = 1 (ON)
    (전류가 흐르지 않아요)                          (전류가 흐를 수 있어요)
 

  
pMOS Transistor 
 
Gate = 0 (ON)                 Gate = 1 (OFF)
(연결되었을 때)                (연결이 끊겼을때)
   
 
 
이렇게 두 가지의 transistor를 만지작 만지작 해서

탄생한 완벽한 트렌지스터를 CMOS라고 합니다.


 여기서 보듯이 nMOS는 0일때 전류를 흐르게 할 수 있어 전류가 통하지 않는 부분과 연결 되고, pMOS는 1일때 전류를 잘 흐르게 할 수 있어서 전압이 가해지는 부분가 연결되지요. CMOS는 이 두 가지 특성을 이용해서 gate를 구성합니다.

CMOS (Complementary MOS)
 



이제 transistor의 symbol을 알았으니 gate가 구체적으로 어떻게 만들어지는지 알아볼까요?

NOT Gate



우리가 알고 있는 NOT gate는 이런 symbol을 가지고 있어요.











 


 
 
 
 
   
  이것을 Transistor 기호로 표시하면?





짜잔!!







잠깐 다시 한번 떠올려 볼까요?


nMOS는 0일때 전류를 흐르게 할 수 있어 전류가 통하지 않는 부분(GND= 0값)과 연결 되고, pMOS는 1일때 전류를 잘 흐르게 할 수 있어서 전압이 흐르는 부분(VDD =1값)와 연결된다고 했지용?

위의 gate가 0일때 1일때 표를 보면 알기 쉬워요^^^^

잠깐 참고 ㅋㅋ

그렇다면 A가 0일때 P1(pMOS)는 연결(ON)되고 N1(nMOS)은 OFF되어 VDD(1의값을 가짐)로부터 전류가 흐르겠네요?

그래서 Y에는 1의 값이 들어오게되겠지요^^
A가 1일때는 그 반대에요.


 
 표를 보면 알기 쉬워요^^^^^^^^^^^^^^^^^^^^^*







그렇다면 NAND gate는 어떻게 될까요?
 

 
 

 
 
 
 
 
 
 
 
 
 
 

 


 
이제 이 표를 보고 Circuit을 조합해 볼까요?
 



























답은 ^^^^^^^^^^^^^^^^^^


짜잔!

이렇게 해서 오늘은 요기까지~~

안뇽안뇽ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ~

2010년 10월 3일 일요일

03. Data Representation

너무너무 재밌고 신기한 ASCII 코드


우리 함께 모두 everybody 다같이 ASCII코드에 알아보기 전에 기본적인 개념을 짚고 넘어가 보아요~


데이터표현이란?
 
숫자나 문자, 특수 기호를 사용하여 값과 묘사하는 데이터를 표현하는 것. 디지털 컴퓨터에서 모든 프로그램 명령과 데이터는 정해진 형태, 즉 이진 표기법이나 이진화 십진 표기법(BCD) 등으로 정리된 전기적인 신호로 기록된다.

라고 나와있네요^^

잠깐!!!!!!!!!!!!!!!!!!!!!!!! BCD가 뭘까요?
  
소수점을 쉽게 표기하기 위한 방법이에요 즉 Binary coded dicimal로서 2진법을 10진법
  처럼 간편하게 표기하여 한눈에 알아보기도 쉽고 소수점도 쉽게 표현할 수 있어요!
§BCD 는 각각의 10진수의 한자리(0~9) 당 4bit를 사용하여 나타내요!
 
 예를 들어볼게요.
 먼저 1.7의 경우 일의 자리수의 수인 1을 4bit를 써서 나타내면 0001 이죠
                         그 아래 소숫점은 7이네요 7 역시 4bit로 표현하면 0111이네요
 
따라서 1.7을 BCD수로 바꾸면~
                                     1.7 = 0001 . 0111
 
한가지 예를 더들어볼게요^^
                                     4.9 = 0100 . 1001
 
이때 소수점의 자리가 어디인지는 미리 임의적으로 정하는 것으로 걱정할 필요 없어요~
 
Decimal
BCD Digit
0
0000
1
0001
2
0010
3
0011
4
0100
5
0101
6
0110
7
0111
8
1000
9
1001


거의 4bit 를 base로 많이 사용하니까 요렇죠 ^^

BCD는 컴퓨터보다는 전자시계와 같은 혼자서 작동하는 디지털 회로에서 많이 사용되요
쉽고 편리하니까요 ^^^^^^^^^*
지나가다가 전자시계를 보면 저건 BCD 코드를 사용하겠구나 하시면되겠네요



이제 ~ 데이터를 표현하는 방법중 많은 문자를 2진법(혹은 숫자)으로 표현할 수 있는 아스키코드에 대해 알아볼까용^?^  컴퓨터도 문자를 인식하고 싶데요~
 

ASCII [ American Standard Code for Information Interchange ]

미국의 정보 교환용 표준 코드(부호)를 가리킨다. 7비트에 패러티 체크(데이터를 전송할 때 기계 내에서 자동적으로 시행하는 체크)용 1비트를 더한 8비트로 구성된 코드화 문자를 사용한다. 코드화된 문자에는 제어 문자와 도형 문자(알파벳, 숫자 등)가 있다.


우리는 컴퓨터 교육과니까 간단한 코딩 한 번 해볼까요 *.*?

ASCII코드를 출력해볼 수 있는 간단한 C코드에요
 
#include<stdio.h>
int main(void)
{
         int i;
          printf("ASCII (ISO646\n\n");
          for(i=0x00; i< 0x7f;i++){
                   if((i%16)==0){
                   printf("\n");
                        }
          printf("%3d: %c|",i,i);
         }
}
 
간단하죠? 한번 돌려보아요 ㅋ_ㅋ!

Build And Run ~~~~~~~~~~~~~~~~~~~~
 


위에건 간단한 거였고 좀더 알아보면 다음과 같아요
 
아스키 코드 테이블

 
우왕 너무 많아 ㅠㅠㅠ



잠깐!!!!!!!! 궁금한거 있지 않으세요? 
 
난 궁금했는데ㅋㅋ


ASCII 와 extended ASCII의 차이점말이에요.
 
기존의 ASCII code는 1Byte 중에 7bit를 이용해서 10진수 0에서 127까지 128개의 문자를 구성한 코드에요!!(2의 7승은 128.. 컴퓨터는 2진수를 사용하기 때문에 7bit 를 사용하면 128개의 경우를 만들 수 있다는건 아시죠??)
이 128개의 문자는 영어 알파벳과 대문자, 소문자, 보조문자, 제어문자를 포함하고 있는데 더 많은 문자의 필요성을 느껴 IBM에서 후에 나머지 한bit를 추가시켜 8bit로 문자를 확장시켰는데요, 이 코드가 Extended ASCII 입니다. 정식 명칭은 IBM Extended ASCII Code 이고요. 8bit로 문자를 표현했으니 이제 256개의 문자가 생성되겠지요? 이곳에는 비영어 문자와 그래픽 문자가 포함되어 있어요.

지금 흔히 ASCII Code라고 말하는 것은 Extended ASCII Code 라네요^^
 
참고로 요즘에는 2Byte를 이용해서 한글과 한자, 일본어까지 아우르는 유니코드도 사용중이지요.
 

그런데 헷갈리는 개념이 하나 더 있지요? 

ANSI와 ASCII!! 무슨 차이가 있을까요?

컴퓨터가 처음 생겼을 때는 american national standard institute 라는 미국 표준국에서 문자
맵핑을 주로 재정했죠. IBM이 미국 회사니 당연히 컴퓨터 문자의 맵핑도 영어 위주였지요.
그래서 처음 표준을 제정할때 사실 7비트를 썼지요.
128개의 숫자로 영어 알파벳,특수문자,숫자,콘트롤 문자를 모두 나타낼 수 있었읍니다.
그리고 8비트를 쓰면 256가지를 나타낼 수 있었지요. 당연히 영어만 쓴다면 문제가 없지요.
그러나 일본말,한국말,중국말 같은 문자를 나타내는 문제가 생겼어요. 그래서 2바이트로
나타내면 6만개 가까이 나타낼 수 있으므로 이러한 방식을 사용하는  맵핑을 이용하게 되었지요.  완성형이니 조합형이니 하는 것이 그런 종류라고 볼 수 있곘네요.

이후에 유니코드라는 국제 표준 문자 체계를 만들어 기존의 중구난방인 맵핑 방법을 하나로 통일하게 되었는데 그것이 현재의 상태입니다.
 
ASCII는 American Standard Code for Information Interchange의 약자로 1963년에 처음
제정된 영문 맵핑 방법입니다.

후에 ANSI X3.4-1968, ANSI X3.4-1977, ANSI X3.4-1986와 같이 ANSI에서 표준을 재정하게 되었지요.

한마디로 ANSI는 조직! ASCII는 문자 표준 규격! 을 나타낸다고 보면돼요*_*

그리고 ANSI에서 만든 아스키에 대한 규격을 ANSI ~~~ 하고 나타내는 것이죠.

이제 의문이 다 풀렸나요? 
 
사전적 정의를 알아보자면 ^^!

ANSI [ American National Standards Institute ]
미국 내에서 기술표준 개발을 육성하기 위해 설립된 제1차 기관. ANSI는 산업계에 소속된 기술자 그룹들과 함께 일하며, 세계표준화기구인 ISO(International Organization for Standardization) 및 세계전자기술 위원회인 IEC(Internation Electro-technical Commission)의 일원이다. ANSI가 제정한 컴퓨터에 관한 표준 중 대표적인 것으로는 아스키가 있다.
 

라네요~

 
마지막 헷갈리는 개념 따~~~~악 한가지만 더 알아볼까요!?


유니코드와 아스키코드란??
 
ASCII코드는 0~127까지지만 유니코드는 훨씬 표현 범위가 넓답니다.
여러 나라의 언어들이 포함되어있구요.
그런데 유니코드는 아스키코드 이후에 만들어져서 아스키코드를 기반으로 하고 있답니다.
유니코드가 6만번이상 있더라도 아스키코드의 0~127의 코드와 유니코드의 0~127는 같답니다.
 
하지만 아직도 잘 모르겠죠!?
 

유니코드란?

UCS: Universal Code System  아후아후 영어 ㅠㅠ 패스패스 넘어가구

유니코드란 컴퓨터에서 세계 각국의 언어를 통일된 방법으로 표현할 수 있게 제안된 국제적인 문자 코드 규약이에요~~~~~~~~~~~~~~~~

데이터의 교환을 원활하게 하기 위하여 문자 1개에 부여되는 값을 16비트로 통일하였는데요, 코드의 1문자당 영어는 7비트, 비영어는 8비트, 한글이나 일본어는 16비트의 값을 지니는데, 이를 모두 16비트로 통일했네요. ISO/IEC 10646-1의 문자판에는 전세계에서 사용하고 있는 26개 언어의 문자와 특수기호에 대해 일일이 코드값을 부여하고 있어요.  당연히 ASCII코드보다 훨~~씬 많은 문자가 표현될 수 있을거에요. 최대로 수용할 수 있는 문자수는 6만 5,536자라고 하네요. 이 가운데 3만 8,885자는 주요 국가의 언어를 구현하는 용도로 이미 할당되어 있고 6400자는 사용자 정의 영역으로, 나머지는 2만여 자는 새로 추가될 언어 영역으로 각각 비워두고 있어요. 코드 할당비율을 보면 한자가 39.89%로 가장 많고, 한글 17.04%, 아스키 및 기호문자 10.39% 등의 순이에요.
 
미국의 애플 컴퓨터 회사, IBM사, 마이크로소프트사 등이 제안하여, 이를 추진하기 위하여 설립된 유니코드(Unicode)사가 1990년에 발표한 유니코드 버전을 ISO/IEC JTC 1에서 1995년 9월에 국제 표준으로 제정했다고 하네요.



이렇게 오늘은 ASCII 코드와 그와 관련된 몇가지 개념에 대해서 알아보았어요^^

어느정도 궁금증이 풀리셨나요?

만약 아직도 궁금한게있다면

우리들의 마스터 채정민교수님께 질문드려보아요 ^^!! 이야호

그럼 안녕 담에봐용 ♥.♥


- 출처 : 네이버 백과사전