책/컴퓨터 구조

컴퓨터 구조 Ch02_"Language of the Computer-3"

RyoTTa 2021. 1. 20. 19:35
반응형

2.9 문자와 문자열

 오늘날 대부분의 컴퓨터는 8bit 로 문자를 표현하며, 거의 모든 컴퓨터가 ASCII를 사용한다.

ASCII 표현

 문자 데이터는 보통 여러 개가 모여 문자열(String)을 이루는데, 문자열의 길이는 가변적이다.

 가변길이 문자열을 표현하는 방법은 아래 세가지가 존재한다.

 1) 문자열 맨 앞에 길이를 표시하는 방법

 2) 같이 사용되는 변수에 그 길이를 표시하는 방법(구조체 처럼)

 3) 마지막에 문자열의 끝을 표시하는 특수 문자를 두는 방법

 

 C언어는 문자열 끝에 0값(Null)을 두는 세번째 방법을 사용한다. 따라서 "Cal"은 67,97,108,0 의 4바이트로 표현한다. 

 

2.10 긴 수치와 주소를 위한 LEGv8의 주소지정 방식

 LEGv8의 명령어 길이를 32비트로 고정한 덕택에 하드웨어가 간단하지만, 32비트 이상의 상수나 주소를 사용하게 되면 편리한 경우도 있다. 이러한 것을 지원하는 방법과 분기 명령어에서 사용되는 명령어 주소의 최적화 방법

 

큰 수치 피연산자

 프로그램에서 사용하는 상수는 대체로 작아 12bit필드로 충분하지만 상황에 따라 큰 상수값이 필요한 경우도 있다.

 LEGv8은 레지스터에 16bit 상수값을 넣는 MOVZ, MOVK 명령어를 제공한다. 

 MOVZ는 레지스터의 나머지 부분을 0으로 채우는 명령어이며, MOVK는 나머지 비트들은 전혀 영향을 받지 않는 명령어 이다.

 16bit 값이 들어갈 필드의 위치는 LSL과 상수로 지정한다. 64bit 워드의 넣는 부분에 따라 0,16,32,48 중 하나를 LSL 뒤에 쓴다. 이러한 32bit 명령어 두개를 사용하면 32bit 상수를 만들 수 있다.

MOVZ, MOVK 명령어 결과

분기 명령에서의 주소지정

 LEGv8에서 가장 간단한 주소지정 방식은 분기 명령에서 사용하는 것이다. 분기 명령은 6bit의 Operation 필드와 26 bit의 주소 필드로 구성되는 B-type 명령어를 사용한다.

ex) B 10000

B-type 명령어

 조건부 분기명령에는 분기 주소 외에 한 개의 피연산자가 더 있다. 이러한 형식을 CB-type 명령어라 한다.

ex) CBNZ X19, Exit

CB-type

 만일 프로그램에서 사용하는 모든 주소가 19bit 필드에 들어가야 한다면 어떠한 프로그램도 2^19보다 커질수 없다.

 대안으로 레지스터를 지정해 그 값을 분위 변위와 더하도록 하는 것이다.

 즉, PC = 레지스터 + 분기주소

 조건부 분기문은 주로 순환문이나 조건문에서 사용되므로 가까이 있는 명령어로 분기하는 경향이 존재한다.

 따라서, PC레지스터에서 +-2^19 이내 떨어진 곳으로 분기 하는 방법을 사용한다. 이를 PC-상대 주소지정방식(PC-relative addressing)이라 한다.

 

 대신 B-type 형식 명령어는 다른 방법을 사용한다. 명령어 길이는 항상 4byte 이므로 PC-상대주소 지정방식에서 분기할 거리를 바이트 단위가 아닌 워드 수로 나타내면 더 먼 거리까지를 분기할 수 있다. 즉 분기 거리를 4배로 늘릴 수 있다.

 

LEGv8 주소지정 방식 요약(Addressing mode)

 1. 수치(Immediate) 주소지정 :  연산자는 명령어 내에 있는 상수이다.

 2. 레지스터 주소지정 : 피연산자는 레지스터이다.

 3. 베이스(Base) or 변위(Displacement) 주소지정 : 메모리 내용이 피연산자이다. (메모리주소 = 레지스터+상수)

 4. PC-상대 주소지정 : PC값과 명령어 내 상수의 합을 더해서 주소를 구한다.

4가지 주소지정 방식
LEGv8 명령어 형식 

 

반응형