Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

5장 비트 패턴으로 문자를 표현하기 CHAPTER 5 — Representing Characters with Bit Patterns

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-05/ass05_1.html

비트는 0과 1의 2가지 패턴만을 가지지만 이들을 구조적으로 재구성함으로써 많은 형태(type)을 표현할 수 있습니다. 알파벳 27개의 패턴으로 엄청나게 다양한 형태(문학/과학/수학/예술)를 표현할 수 있는 것과 마찬가지다. 이 장에서는 비트 패턴이 어떻게 문자를 표현하는가를 논해 봅니다.

이번 장에서 다룰 주제들:
  • 아스키코드 ASCII
  • 제어문자 Control characters
  • 텔레타입기 Teletype Machines
  • .asciiz 와 null로 끝맺음하는 글자(strings) .asciiz and null terminated strings
  • 디스크 파일 Disk files
  • 텍스트 파일 Text files
  • 바이너리 파일 Binary files
  • 실행 파일 Executable files
질문: 문자와 숫자 이외에 어떤 것을 비트 패턴으로 표현할 수 있을까요?

문자를 표현하기 Representing Characters

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-05/ass05_2.html

답 : 여러 가지 답이 있을 수 있다. 예를 들어 기계 명령(machine instructions)을 표현할 수 있다. 심볼(symbol)로 표현할 수 있는 것은 무엇이든지 비트 패턴으로 나타낼 수 있다. 그래픽,음악, 소수점 숫자들,url,video 등등.

8 bit으로 묶인 그룹을 우리는 바이트(byte)라고 부른다. 영어로 표현할 때 1문자는 1 byte로 표현할 수 있다. 미국 표준 위원회(American Standard Comittee)가 비트 패턴이 영어의 어떤 글자를 나타 내는 가를 표준안으로 만들었다. 그 표준안을 영어로 아세키(ASC) 또는 아세키아이아이(ASCII American Standard Code for Information Interchange)라고 한다. 대부분의 마이크로 컴퓨터와 많은 메인 프레임 컴퓨터들이 이 표준안을 따른다.

ASCII 표준에 따라 만든 프린터는 콘트롤 코드와 함께 "A"라는 아세키 코드 패턴을 입력 받으면 "A"라는 문자를 인쇄한다. 프린터가 특별한 종류의 메인프레임 프린터로 ASCII 표준을 따르지 않는다면 똑같은 ASCII "A" 코드 패턴을 입력 받았더라도 전혀 다른 문자를 인쇄할 수 있다.

대부분의 현대적인 프린터는 그림에서 보여지는 컴퓨터보다 훨씬 복잡하다. 현대적인 프린터는 한번에 전체 프린팅 정보를 하나의 파일로 받아서 인쇄를 한다. 전송 받은 파일은 페이지 레이아웃(layout)이라던가 페이지의 내용에 대한 정보를 담고 있다. ASCII 문자는 그 파일 안에 담겨진 정보의 일부분을 표현한다.

질문: DOS의 명령어 중 TYPE은 ASCII 코드 문자를 담은 파일을 처리할 수 있습니까?

DOS의 TYPE 명령어

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-05/ass05_3.html

답: 처리할 수 있다.

도스(DOS) 명령어중 TYPE은 구식 프린터와 같습니다. Type 명령은 전송받은 바이트를 한자 한자 해석해서 컴퓨터 스크린에 출력합니다. 그림은 type 명령으로 문서파일을 출력한 것 입니다.

질문: 어떤 파일은 문자 이외의 것을 표현하는 비트 패턴을 담을 수 있습니까?

잘못된 종류의 데이터 Wrong Type of Data

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-05/ass05_4.html

답 : 요즘에는 순수하게 ASCII로만 구성된 파일은 드물다.

대부문의 파일은 ASCII 와는 다른 특정한 형식을 사용해서 정보를 담고 있다. 윈도우에서 exe 파일 연장자 이름을 가지고 있는 실행파일(executable file)은 기계 명령을 담고 있다. DOS의 TYPE 명령어를 사용해서 문자 데이터처럼 실행파일의 정보를 해석할 수 는 없다. 그림은 실행파일을 TYPE 명령어를 사용해서 출력했을 경우 이다.

바이트 패턴에서 일정하게 제한된 부분만 ASCII 문자에 해당한다. 나머지 패턴은 출력할수 없는 문자이다. 응용프로그램에 따라선 출력할 수 없는 문자들이 특수한 목적의 문자로 사용되거나 특수한 기하 도형으로 표현하기도 한다.

TYPE 명령은 입력된 바이트를 문자로만 해설할 수 있기 때문에 실행파일을 입력했을때 대부분이 공백이다. 그림에서 어떤 부분은 입력된 바이트가 특수 목적의 문자와 우연하게 일치하기 때문에 특수문자로 출력되었다. ASCII 코드에 상응하는 바이트는 글자로 출력되었다.

질문 : 실행파일의 어떤 부분은 ASCII 코드로 쓰여진(encoded) 정보를 담을 수도 있습니까?

제어 문자 Control Characters

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-05/ass05_5.html

답 : 일반적으로 파일은 데이터에 따라 데이터의 종류에 맞는 방법으로 다양하게 쓰여질 수 있다.

ASCII 코드중에 일부는 출력을 위한 문자가 아니다. 예를 들어 패턴 0x00(또는 0000 0000)는 NUL 문자 이다. NUL은 데이터의 묶음을 표시하는데 자주 사용한다. 패턴 0x0A는 라인피드(linefeed) 또는 LF 문자이다. LF문자가 프린터에 전송되면 프린터는 줄을 바꾸라는 신호로 받아들인다. 패턴 0x00부터 0x1F까지 제어 문자이고 제어문자는 입력과 출력 장치를 제어하는데 사용된다. 제어문자의 정확한 용법은 출력하는 장치에 따라 다르다. 이런 제어 문자들중 대다수가 원래는 텔리타입기계(teletype machine)의 기계적 기능을 제어하는데 사용 되었다.

질문 : 컴퓨터 터미널도 기계 장치(mechanical device)라고 볼 수 있습니까?

텔리타입머신 Teletype Machines

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-05/ass05_6.html 답 : 기계 장치라고 볼 수 있습니다.

텔리타입 머신은 1910년부터 대략 1980년대까지 글자를 텔리그래프선을 통해 주고 받는 데에 사용 되었다. 텔레타입머신은 전기적인 부품과 기계적인 부품으로 만들어 졌다. 텔레타입 기계는 글자를 두루마리 종이에 인쇄했다. 텔리타입머신은 텔리그래프선을 통해 제어문자를 받고 그 제어문자의 해석에 따라 다양한 기계적 작동을 할 수 있다. 일반적인 제어 신호중 하나가 "케리지 리턴(CR)"과 그 뒤에 부쳐지는 라인피드(LF)" 이었다.

소형컴퓨터들의 초기시대(1972-1982)에서는 텔리타입이 컴퓨터로 입출력할 수 있었던 유일한 방법이었다. 이러한 tty(텔리타입 teletype) 기계들은 전기 타입라이터처럼 고정된 크기의 문자를 인쇄했다. HTML의 테그(tag)중에서 고정된 크기의 폰트를 사용할때 <tt> tag를 사용한다.<tt> ... </tt>로 표현하며 문단을 고정된 폰트를 사용하도록 지정한다. tt의 유래는 teletype에서 왔다.

텔리타입이 사용했던 몇가지 모델들은 오프라인에서도 사용할 수 있다. 유저는 메세지나 또는 프로그램을 천천히 타입할 수 있고 타입한것은 종이테입 같은것에 구멍을 만들어 기록할 수 있다. 사진에서 왼편에 있는 것이 종이테입 입출력장치(paper taype reader/puncher)이다. 페이퍼테입이 정확한 것이라 확인한 후 텔리타입머신(tty)을 텔리그래프선에 연결했다. 테리타입머신은 페이퍼 테입에 저장된 내용을 빠르게 읽어냈다. 그 당시에는 페이퍼 테입이 대용량 저장장치(mass storage)였다.

북미 통신 박물관 웹페이지 링크/는 텔리타입에대한 더자세한 정보를 담고 있다. 관심있는 분은 참조하자.

질문: 문자를 나타내는 비트 패턴이 다른 문맥에선 문자가 아닌 다른것을 표현할 수 도 있습니까?

ASCII 표

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-05/ass05_7.html

답: 표현할 수 있다.

HexCharHexCharHexCharHexChar
00nul20sp40@60`
01soh21!41A61a
02stx 22"42B62b
. . .. . .. . .. . .. . .. . .. . .. . .
0Alf2A*4AJ6Aj
. . .. . .. . .. . .. . .. . .. . .. . .
1Ers3E>5E ^7E~
1Fus3F?5F_7Fdel
위에 표는 ASCII에서 사용되는 몇가지 비트 배턴을 보여 준다. (완전한 차트는 appendix를 참조하자) 첫번째 인쇄 가능한 문자는 SP(space 여백) 문자이다. 비트 패턴 0010 0000으로 SP 문자를 나타낸다. 여백 영어로 Space도 다른 문자처럼 하나의 문자이다. 위에 요약한 표에서는 생략했지만, 알파벡 대문자는 대문자 순서대로(A,B,C,D,.....,X,Y,Z) ASCII 코드로 정해져 있다. 영어 대문자와 소문자 사이에 몇가지 다른 문자들이 들어가 있다. 소문자도 소문자 순서대로(a,b,c,....,x,y,z) 정해져 있다.

ASCII코드의 마지막 패턴은 0x7F 바이너리로 0111 1111이다. 이것은 DEL(삭제 delete) 문자이다. 완벽한 ASCII 코드표는 색인을 참조하자.

질문: 8비트로 표현할 수 있는 문자의 수 중에서 몇개가 ASCII 코드로 표현 되었습니까? (힌트 DEL이 ASCII 코드의 마지막 코드다 DEL 코드의 비트 패턴을 참조하자)

ASCII 순서(sequences)

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-05/ass05_8.html

답: 8 비트로 표현할 수 있는 숫자의 반이 사용되었다. 8 비트로 256개 표현 가능하고 그 중에서128개가 ASCII 코드로 표현 되었다.

ASCII 표는 7 비트 패턴으로 표현 가능하다. 8 비트 패턴은 정확히 7 비트 패턴으로 표현할 수 있는 수의 두배이다. 어떤 컴퓨터들은 추가적인 비트를 다양한 것들을 표현하는데 사용했다. 예를 들어 구형 MS 윈도우 계열의 PC는 추가적인 비트 패턴을 심볼이나 그래픽 문자를 나타내는데 사용했다. 어떤 종류의 프린터들은 이런 추가적인 비트 패턴을 인쇄할 수 없었다.

어셈블러가 하는일 중에 하나가 사용자가 메모리에 ASCII 비트 패턴을 저장할 수 있도록 ASCII 패턴을 조립(assemble) 하는 일이다. 이것은 어셈블리 프로그램의 한부분이다.

.asciiz "ABC abc"

이것은 어셈블러가 오프젝트 모듈로 만들어낸 비트 패턴이다.

41 42 43 20 61 62 63 00

어셈블러는 소스코드에서 .asciiz부분에서 따옴표로 지정된 문자들을 ASCII 비트 패턴으로 컴파일(assemble) 한다. 첫번째 문자 "A"는 비트패턴을 16진수로 표현한 0x41에 해당한다. 두번째 문자 "B"는 비트패턴을 16진수로 표현한 0x42에 해당한다. 네번째문자 " "(space 여백)으로 16진수 0x20에 해당한다. 어셈블러는16진수 0x00(NUL)문자를 사용하여 문자들(string)의 끝임을 나타낸다.

질문: 이와같은 어셈블러 코드는 어떤 식의 비트 패턴으로 컴파일 되겠습니까?

.asciiz "A B"

파일 Files

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-05/ass05_9.html 답: 41 20 42 00

파일은 0과 1의 비트 패턴을 담고 있는 바이트들로 구성 되어있다. 비트 패턴은 하드디스크나 테입과 같이 자기적인(magnetic) 미디어에 기록된다. 실제 물리적인 배열은 미디어에 따라 다를지 모르지만, 하나의 파일을 연속적인 바이트들의 단위물(block)이라고 생각해 볼 수 있다. DOS에서 DIR 명령은 디렉토리에 있는 각각의 파일의 정보와 함게 바이트의 수를 나열해서 보여준다.

운영체제마다 파일 시스템을 구현한 것은 다를 수 있다. 그러한 구현상의 세부사항들을 무시하고 볼때, 파일이란 것은 자기적 미디어에 순서적으로 쓰여진 바이트들이다라고 정의할 수 있다. 각각의 바이트들에는 무엇을 담을 수 있을까? 주저장장치의 1 개의 바이트처럼, 자기 디스크(magnetic disk)에서 1개의 바이트도 2^8(=256)개의 가능한 비트 패턴을 담을 수 있다. 디스크에서 읽어들인 1개의 바이트가 복사되서 주저장장치의 1개의 바이트로 올려진다.(실제로는 효율성 때문에 디스트의 읽고 쓰기는 항상 128 bytes나 그 이상의 단위로 한번에 이루어 진다)

주메모리가 비트 패턴을 담고 있는 것처럼 파일도 비트 패턴을 담고 있다. 비트 패턴을 어떻게 사용하느냐에 따라 파일의 비트 패턴이 무엇을 나타내는 것인가가 결정된다. 예를들어 파일은 ASCII 코드에 따라 문자들을 나타내는 바이트들을 담고 있을 수 있다.이러한 파일을 문서(text) 파일 이라고 부르거나 또는 ASCII 파일 이라고 부른다. 파일을 문서 파일로 규정할 수 있는 것은 그 파일이 어떤 식으로 만들어지고 어떻게 사용 되었는가를 우리가 알고 있기 때문이다. (역주- 그런지식이 없다면 파일은 그냥 나열된 바이트 덩어리이다.)

질문: 여러분이 영어만 알고 있는 컴퓨터 응용 프로그램이라고 상상해 봅시다. 그리고 책방에서 옛날책 한권을 줏어서 펼쳐보았다고 가정합시다. 책은 다음과 같은 글을 담고 있습니다.

Non sum qualis eram bonae sub regno Cynarae.

여러분이 영어만 알고 있는 응용 프로그램이라고 가정할 때 이 책을 사용할 수 있겠습니까?

문서 파일 Text Files

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-05/ass05_10.html

답 : 사용할 수 없을 것입니다. 각 문자들은 여러분이 알고 있는 영어 알파벳으로 쓰였지만 그 책 자체의 내용은 영어가 아닌 다른 문맥(context)을 담고 있습니다. 컴퓨터의 응용 프로그램은 그 응용 프로그램이 사용하는 입출력 파일들의 비트 패턴에 대한 문맥(context)을 제공 한다고 할 수 있다. (역주- 응용 프로그램은 프로그램이 출력한 파일의 바이트가 무엇을 의미 하는지 알고 출력한 파일을 읽어들일 때 어떻게 해석해야할 것인가를 알고 있다.) 문서파일처럼 누구나 알고있는 표준적인 문맥(context)도 있지만 대부분의 응용 프로그램은 그 프로그램만이 이해할 수 있는 자체적인 문맥을 사용한다. 만일 여러분이 하드디스크의 표면을 검색할 수 있다거나 또는 특정한 파일에 저장된 비트 패턴을 볼 수 있더라도, 비트 패턴이 무엇을 의미하는 것인가는 추가적인 지식없이는 알 수 없다.

사람들이 문서 파일, MS 워드 파일과 실행파일을 마치 전혀 다른 것들처럼 말하는 것을 보곤한다. 그렇지만 그렇게 말할 경우의 표현은 축약된 표현이거나 정확한 표현이 아닐 때가 많다. 사람들이 문서파일이라고 말할 때 문서파일은 실제로는 다음과 같은 것을 의미한다.

문서 파일: 일련의 바이트들을 담고 있는 어떤 파일이다. 각 바이트는 인쇄할 수 있는 글자를 나타내는 비트 배턴을 담고 있거나 또는 ASCII 코드에 따른 제어 문자중에 하나를 담고 있을 수 도 있다. 모는 종류의 제어문자가 허용되는 것은 아닐 수 도 있다. 문서 편집기로 파일을 열어볼 수 있고 ASCII 문자 코드를 다룰 수 있는 기계장치에 출력할 수 도 있다.

파일이 ASCII 코드에 따라 인쇄할 수 있는 문자를 담고 있는 바이트들로 쓰여졌다면 그 파일은 바이트로 표현할 수 있는 가능한 패턴의 반을 사용하였다. 대개 텍스트 파일을 처리할 줄 아는 소프트웨어는 ASCII 패턴을 처리할 수 있지만 다른 패턴은 잘 다룰 수 없다.

질문: 파일 압축 프로그램은 파일을 입력받고 입력받은 파일보다 더효율적으로 비트 패턴을 사용해서 작아진 파일을 출력합니다. 압축된 파일의 압축을 풀면은 원래의 파일로 회복할 수 있습니다. ASCII 파일이 압춥되었을때 압축된 파일은 ASCII 문자를 담고 있을까요?

실행 파일 Executable Files

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-05/ass05_11.html

답 : 담고 있지 않다. ASCII 문자들은 8비트중에 7비트만을 사용한다. 나머지 비트는 낭비 하는거다. 압축된 파일은 비트 패턴을 더 효율적으로 사용한다. 압축된 파일의 바이트는 ASCII 코드의 바이트와 다르다.

사람들이 일반적으로 실행파일이라고 말할 때 다음과 같은 것을 의미 한다.

실행파일: 일련의 바이트를 담고 있는 하나의 파일. 각각의 바이트는 특정 프로세서의 기계 명령의 일부분을 나타내는 비트패턴을 담고 있을 수 있다. 운영체제는 이런 실행파일을 주메모리에 올리고(load) 프로그램을 실행할 수 있다. 실행 파일의 1개의 바이트는 8 비트로 표현할 수 있는 비트 패턴중에 어느 하나를 담을 수 있다. 이런 파일을 우리는 바이너리(binary) 파일이라고도 부른다. 바이너리 파일이란 용어는 오해의 여지가 있다. 모든 파일은 바이너리 패턴 형태로 정보를 표현하기 때문에 오해가 가능하다. 어떤 사람이 MS 워드 파일 이라고 말할 경우 그 사람은 다음과 같은 것을 의미한다.

워드파일: MS 워드 프로그램에 의해 만들어진 비트 패턴을 담고 있는 일련의 바이트들로 구성된 파일이다. MS 워드 파일은 MS 워드 프로그램이나 비슷한 종류의 프로그램에서만 처리가 가능하다.

여러가지 종류의 파일들이 있지만 특별할 것은 없습니다. 각 파일은 일련의 바이트를 담고 있을 뿐이고 각각의 바이트는 비트패턴을 담고 있다. 대개 파일에서 1개의 바이트는 256개의 가능한 패턴중에 하나를 담을 수 있다. 어떤 종류의 파일은 128개나 그 보다 적은 패턴만 담을 수 있는 것도 있다. 파일에서 8비트 이외에 더긴 비트 패턴이 필요한 경우에는 비트패턴은 연속되는 여러 바이트로 저장 된다.

질문: 파일 압축기로 문서 파일을 압축 했다고 가정해 봅시다. 최소한의 효율성을 가정하고 어느정도의 압축률을 기대할 수 있겠습니까?

바이너리 파일 Binary File

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-05/ass05_12.html

답 : 7 비트만 사용하는 ASCII 문서파일을 8 비트를 모두 사용하도록 가정 한다면 원래의 크기를 7/8만큼 줄일 수 가 있습니다. 실제로 압축프로그램은 그보다 더효율적으로 앞축을 합니다. 문서파일은 대개 원래 파일 크기의 반으로 압축할 수 있습니다.

모든 파일이 0과1의 바이너리 패턴을 담고 있는 일련의 바이트 묵음이다. 하지만 사람들이 특정한 파일을 바이너리 파일이라고 지칭하는 것을 볼 수 있다. 그때 사람들이 바이너리 파일이라고 하는 의미는 다음과 같다.

바이너리 파일 : 문서 파일인 경우 ASCII 패턴을 사용한다고 가정 한다면 1 바이트는 128개의 패턴중에 한가지나 더적은 패턴 중에 하나를 담을 수 있다. 바이너리 파일의 경우 1 바이트는 256가지의 가능한 패턴중에 어느 하나를 담을 수 있습니다.

문서 파일을 제외한 워드파일,엑셀파일,실행파일 이 모든 파일들은 바이너리 파일이라고 부를 수 있다. 사람들이 바이너리 파일이라는 용어를 부주의하게 사용할때, 대개 사람들이 지칭하는 파일은 실행파일(executable file)을 의미 한다. DOS file utilites에서 텍스트 파일과 다른 파일들 사이에 구분을 두었기 때문에 바이너리 파일이라는 용어가 MS/DOS 사용자 사이에서 흔히 통용되었다.

응용프로그램에서 응용프로그램이 사용하는 종류의 파일이 아닌 다른 파일을 사용하면 혼동을 초래할 수 있다. 문서 편집기로 워드 파일을 열거나 실행파일을 프린터에 출력하지 마십시오. 어떤 응용프로그램은 여러종류의 파일을 처리할 수 있도록 프로그램 되었다. MS 워드는 문서파일과 다른 워드 프로세서의 파일들도 처리할 수 있다.

질문: 왜 워드프로세서 파일은 문서 파일이 아닐까요?

5장 끝

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-05/ass05_13.html

답: ASCII 문자 뿐만이 아니라 여러 종류의 데이터가 워드 파일에서 사용됩니다. 워드프로세서 파일은 폰트나 문자의 크기,포멧,색깔, 그래픽 같은것을 0과1의 비트 패턴으로 담아야만 합니다. 워드 프로세서 프로그램들은 이러한 ASCII 문자 이외의 여러 종류의 데이터를 담기위해 다양한 비트 패턴을 사용합니다.

사용된 용어들

  • ASCII
  • 텔리타입 머신 Teletype machines.
  • ASCII 표 ASCII chart.
  • .asciiz assembly language.
  • 문서파일 Text files.
  • 실행파일 Executable files.
  • 바이너리 파일 Binary files.

퀴즈를 꼭 풀어봅시다