본문 바로가기
Department/System software

시스템 소프트웨어 과제#4

by mean. 2020. 7. 14.
728x90
반응형

1) 교과서 Chapter 2. AssemblersExercises Section 2.3의 문제 1번부터 문제 5번까지 해답 구하시오.

문제1. 리터럴을 처리하기위해 그림2.4.의 알고리즘을 수정하시오.


문제2. 그림2.9의 프로그램의 135행과 145행에서 리터럴이 사용될 수 있을까? 여기에서 리터럴은 사용하지 않는 것이 왜 좋은가?

풀이 : 135~ 145행 부분은 읽어 들여온 레지스터 값을 저장된 갑의 INPUTRLOOP에 있는 값이 같다면 RD m을 이용해 값을 비교하는 것이기 과정이며, 해당하는 값이 상수가 아니라 계속 변하기 때문에 리터럴은 사용하지 않는 것이 좋다.


문제3. 문자 표기에 약간의 확장으로 리터럴 피연산자로서 갑 3의 한 워드를 지시하기위해 LDA =W'3' 같이 그림 2.955행 명령어를 작성할 수 있다. 이것은 좋은 생각인가?

풀이 : LDA =W'3'으로 표시할 수 있지만, 3의 값의 크기가 일반적으로 LTORG을 사용하는 경우인 큰상수가 아닌 작은 상수 이므로, LTORG 사용할 경우, 오히려 메모리 접근 속도로 인하여 시스템 연산 속도에 영향을 끼칠 수 있습니다.


문제4. 즉시 피연산자와 리터럴은 모두 원시 문장에서 피연산자 값을 지시하는 방법이다.
각각의 장점과 단점은 무엇인가? 각각은 언제 더 적당한가?

풀이 :

리터럴의 장점

1. 중복 사용의 경우 하나만 존재하여도 가능하다. 같은 주소를 참조하기 때문이다.
2. 프로그램의 다른 곳에 상수를 정의하고 레이블을 붙이는 불편을 덜어준다.
3. LTORG같은 어셈블러지시자는 리터럴 피연산자를 사용하는 명령어의 근처에 위치시키고 싶을 때 변위를 줄일 수 있다.

리터럴의 단점

1. LITTAB를 추가적으로 생성하여야 하기 때문에 추가적으로 메모리를 할당하여야한다.
2. 리터럴의 경우 중복되는지 안 되는지 검사 과정을 거쳐야하기 때문에 이것 과정을 구현하기 위해 프로그램의 복잡도가 더욱 커진다.
3. 메모리의 위치를 기억하고 있어야한다.

피연산자의 장점

1. 바로바로 계산을 하기 때문에 속도가 빠를 수 있다.

피연산자의 단점

1. 상수를 중복하여 많이 사용할 경우 일일이 라벨을 지정 해주어야하며, 이로 인해 상수의 수정의 경우에도 굉장한 노력을 요한다.


문제5. 리터럴을 제공하지 않는 2패스 SIX/XE 어셈블러를 갖고 있다고 가정 하자 이 어셈블러를 리터럴을 처리할 수 있도록 수정하려고 한다. 그러나 일반적으로 프로그램의 끝에 위치시키는 것과 달리 어셈블된 프로그램의 시작부분에 리터럴 풀을 위치시키고자 한다. (LTORG 문장을 염려할 필요는 없다. 어셈블러가 프로그램의 처음에 풀 안에 모든 리터럴을 항상 위치시킨다.) 이것을 구현하기 위해 어떻게 할 것인지를 설명하시오. 만약 가능하다면, 어셈블러에 대해 다른 패스를 추가시키지 않고 그렇게 해야 한다. 필요한 어떤 데이터 구조들에 관해서도 설명을 해야 하며 어셈블러 안에서 그들이 어떻게 사용되어지는 지도 설명해야 한다.

 

728x90
반응형