한빛출판네트워크 - 연습문제 공개용 ...dw.hanbit.co.kr/exam/4321/answer.pdf · 2020. 6. 16. · - 1 -
[TAOCP] 1.3.1 MIX 설명, 짝수 연습문제 풀이
-
Upload
- -
Category
Technology
-
view
1.170 -
download
7
Transcript of [TAOCP] 1.3.1 MIX 설명, 짝수 연습문제 풀이
1.3.1MIX 설명 Description of MIX
짝수 연습문제 풀이
ohyecloudy http://ohyecloudy.com
아꿈사 http://cafe.naver.com/architect1.cafe
2011.03.12
TAOCP
MIX에서 값 하나가 99999999까지 클 수 있다면,
이를 나타내는 데에는
몇 개의 연속된 바이트들이 필요한가?
2
226 < 99999999 < 227
MIX에선 1 byte가 6 bit
5 byte가 필요
6 장소 3000이 다음을 담고 있다고 하자. 다음 명령의 결과는 무엇인가? (a) LDAN 3000 (b)LD2N 3000(3:4) (c) LDX 3000(1:3) (d)LD6 3000 (e) LDXN 3000(0:0)
3000 + 5 1 200 15
3000 + 5 1 200 15
rA - 5 1 200 15
(a) LDAN 3000 rA에 장소 3000을 부호 바꿔서 적재
3000 + 5 1 200 15
rI2 - 200
(b) LD2N 3000(3:4) rI2에 장소 3000을 부호 바꿔서 적재
두 번째 색인 레지스터
3000 + 5 1 200 15
rX + 0 0 5 1 ?
(c) LDX 3000(1:3) rX에 장소 3000을 적재
부호까지 포함해서 적재를 안 한다면 기본 +
나머지는 0을 채운다
3000 + 5 1 200 15
rI2 ? ?
(d) LD6 3000 rI6에 장소 3000을 적재
6개를 3개에 쑤셔 넣으려니 들어가나? 정의되지 않음
3000 + 5 1 200 15
rX - 0 0 0 0 0
(e) LDXN 3000(0:0) rX에 장소 3000을 부호 바꿔서 적재
나머지는 0을 채운다
8 170쪽에 나온 DIV 명령의 마지막 예에서
“이전 rX”를 교체.
DIV 명령이 수행된 후 레지스터 A, X 내용은?
+ 1235 0 3 1
- 1234 0 3 1
- 0 이전 rA
+ 1235 0 3 1 이전 rX
- 0 0 0 2 0 칸 1000
DIV 1000 + 0 617 ? ? 이후 rA
- 0 0 0 ? 1 이후 rX
170쪽 일단 설명
- 0 이전 rA
+ 1235 0 3 1 이전 rX
- 0 0 0 2 0 칸 1000
DIV 1000 + 0 617 ? ? 이후 rA
- 0 0 0 ? 1 이후 rX
- 0 1235 0 3 1
부호는 rA 껄 사용 rA
rX
- 0 이전 rA
+ 1235 0 3 1 이전 rX
- 0 0 0 2 0 칸 1000
DIV 1000 + 0 617 ? ? 이후 rA
- 0 0 0 ? 1 이후 rX
나머지. 부호는 이전 rA 부호
몫
- 0 이전 rA
- 1234 0 3 1 이전 rX
- 0 0 0 2 0 칸 1000
DIV 1000 + 0 617 0 1 이후 rA
- 0 0 0 1 1 이후 rX
바뀐 부호는 의미 없다. rA 부호를 따라가기 때문 ?가 사라졌다. 필드가 깨지는 경우가 없음
12 rI3의 현재 내용에 2를 곱하고
그 결과를 rI3에 남겨두는 효과를 내는
하나의 명령을 찾아라.
INC3 0,3 0에 rI3를 적용한 값을 rI3에 더한다.
0에 rI3를 적용
결국 rI3 X 2를 한 값을 rI3에 적재한다.
16 메모리의 0000-0099칸들을 모두 0으로 설정
(a)최대한 짧은 프로그램
(b)최대한 빠른 프로그램
STZ 0
ENT1 1
MOVE 0(49)
MOVE 0(50)
(a) 최대한 짧은 프로그램
장소 0을 0으로 채운다.
rI1에 1을 적재한다.
장소 0을 rI1이 가리키는 1로 복사. 49개 워드
CONTENTS(0) -> CONTENTS(1) CONTENTS(1) -> CONTENTS(2) … CONTENTS(48) -> CONTENTS(49)
끝나고 난 뒤 rI1도 변경. rI1 = 1 + 49
1 byte로 99를 표현 못해서 나눔 - MIX에선 6bit라네~
(b) 최대한 빠른 프로그램
STZ 0
STZ 1
…
STZ 99
18 다음의 “넘버 원” 프로그램을 수행했을 때
레지스터들과 토글, 지시자, 메모리에 생기는 변화를 예측
STZ 1 ENNX 1 STX 1(0:1) SLAX 1 ENNA 1 INCX 1 ENT1 1 SRC 1 ADD 1 DEC1 -1 STZ 1 CMPA 1 MOV -1,1(1) NUM 1 CHAR 1 HLT 1
이게 넘버 원 프로그램 갈 길이 멀어 보인다. 고고~
STZ 1 ENNX 1 STX 1(0:1) SLAX 1 ENNA 1 INCX 1 ENT1 1 SRC 1 ADD 1 DEC1 -1 STZ 1 CMPA 1 MOV -1,1(1) NUM 1 CHAR 1 HLT 1
1 + 0 0 0 0 0
rX - 0 0 0 0 1
STZ 1 ENNX 1 STX 1(0:1) SLAX 1 ENNA 1 INCX 1 ENT1 1 SRC 1 ADD 1 DEC1 -1 STZ 1 CMPA 1 MOV -1,1(1) NUM 1 CHAR 1 HLT 1
1 - 1 0 0 0 0
rX - 0 0 0 0 1
STZ 1 ENNX 1 STX 1(0:1) SLAX 1 ENNA 1 INCX 1 ENT1 1 SRC 1 ADD 1 DEC1 -1 STZ 1 CMPA 1 MOV -1,1(1) NUM 1 CHAR 1 HLT 1
1 - 1 0 0 0 0
rA ? ? ? ? ? 0
rX - 0 0 0 1 0
STZ 1 ENNX 1 STX 1(0:1) SLAX 1 ENNA 1 INCX 1 ENT1 1 SRC 1 ADD 1 DEC1 -1 STZ 1 CMPA 1 MOV -1,1(1) NUM 1 CHAR 1 HLT 1
1 - 1 0 0 0 0
rA - 0 0 0 0 1
rX - 0 0 0 1 0
STZ 1 ENNX 1 STX 1(0:1) SLAX 1 ENNA 1 INCX 1 ENT1 1 SRC 1 ADD 1 DEC1 -1 STZ 1 CMPA 1 MOV -1,1(1) NUM 1 CHAR 1 HLT 1
1 - 1 0 0 0 0
rA - 0 0 0 0 1
rX - 0 0 0 0 63
STZ 1 ENNX 1 STX 1(0:1) SLAX 1 ENNA 1 INCX 1 ENT1 1 SRC 1 ADD 1 DEC1 -1 STZ 1 CMPA 1 MOV -1,1(1) NUM 1 CHAR 1 HLT 1
1 - 1 0 0 0 0
rA - 0 0 0 0 1
rX - 0 0 0 0 63
rI1 + 0 0 0 0 1
STZ 1 ENNX 1 STX 1(0:1) SLAX 1 ENNA 1 INCX 1 ENT1 1 SRC 1 ADD 1 DEC1 -1 STZ 1 CMPA 1 MOV -1,1(1) NUM 1 CHAR 1 HLT 1
1 - 1 0 0 0 0
rA - 63 0 0 0 0
rX - 1 0 0 0 0
rI1 + 0 0 0 0 1
STZ 1 ENNX 1 STX 1(0:1) SLAX 1 ENNA 1 INCX 1 ENT1 1 SRC 1 ADD 1 DEC1 -1 STZ 1 CMPA 1 MOV -1,1(1) NUM 1 CHAR 1 HLT 1
1 - 1 0 0 0 0
rA - 0 0 0 0 0
rX - 1 0 0 0 0
rI1 + 0 0 0 0 1
위넘침 토글 O
STZ 1 ENNX 1 STX 1(0:1) SLAX 1 ENNA 1 INCX 1 ENT1 1 SRC 1 ADD 1 DEC1 -1 STZ 1 CMPA 1 MOV -1,1(1) NUM 1 CHAR 1 HLT 1
1 + 0 0 0 0 0
rA - 0 0 0 0 0
rX - 1 0 0 0 0
rI1 + 0 0 0 0 2
위넘침 토글 O
STZ 1 ENNX 1 STX 1(0:1) SLAX 1 ENNA 1 INCX 1 ENT1 1 SRC 1 ADD 1 DEC1 -1 STZ 1 CMPA 1 MOV -1,1(1) NUM 1 CHAR 1 HLT 1
1 + 0 0 0 0 0
rA - 0 0 0 0 0
rX - 1 0 0 0 0
rI1 + 0 0 0 0 2
비교 지시자 E L G
위넘침 토글 O
STZ 1 ENNX 1 STX 1(0:1) SLAX 1 ENNA 1 INCX 1 ENT1 1 SRC 1 ADD 1 DEC1 -1 STZ 1 CMPA 1 MOV -1,1(1) NUM 1 CHAR 1 HLT 1
1 + 0 0 0 0 0
2 + 0 0 0 0 0
rA - 0 0 0 0 0
rX - 1 0 0 0 0
rI1 + 0 0 0 0 3
비교 지시자 E L G
위넘침 토글 O
STZ 1 ENNX 1 STX 1(0:1) SLAX 1 ENNA 1 INCX 1 ENT1 1 SRC 1 ADD 1 DEC1 -1 STZ 1 CMPA 1 MOV -1,1(1) NUM 1 CHAR 1 HLT 1
1 + 0 0 0 0 0
2 + 0 0 0 0 0
rA - 10000
rX - 1 0 0 0 0
rI1 + 0 0 0 0 3
비교 지시자 E L G
위넘침 토글 O
STZ 1 ENNX 1 STX 1(0:1) SLAX 1 ENNA 1 INCX 1 ENT1 1 SRC 1 ADD 1 DEC1 -1 STZ 1 CMPA 1 MOV -1,1(1) NUM 1 CHAR 1 HLT 1
1 + 0 0 0 0 0
2 + 0 0 0 0 0
rA - 30 30 30 30 30
rX - 31 30 30 30 30
rI1 + 0 0 0 0 3
비교 지시자 E L G
위넘침 토글 O
22 장소 2000에 어떤 정수 X. 𝑋13을 계산하고 그 결과를 레지스터 A에 남겨둔 채로 종료하는 프로그램을 두 개 작성 (a) 사용하는 MIX 메모리 장소들의 수가 최소 (b)수행 시간이 가능한 한 최소 𝑋13값은 하나의 워드를 넘지 않는다고 가정한다.
(a) 사용하는 MIX 메모리 장소들의 수가 최소
3000 ENT4 12
LDA 2000
3002 MUL 2000
SLAX 5
DEC4 1
J4P 3002
HLT 0
공간 : 7 시간 : 171u
rI4에 12를 저장
rA에 X를 저장
rA와 X를 곱한 값을 rA,rX에 적재
rX에 저장된 값을 rA로 옮김
rI4를 1 감소
rI4가 0보다 크면 3002로 점프
(b) 수행 시간이 가능한 한 최소
입력은 무조건 정수. 𝑋13을 구하면 된다. 𝑋 범위만 알 수 있다면 메모이제이션을 사용 - 미리 계산해 저장해 놓고 사용
𝑋13 < 𝑏5
𝑙𝑜𝑔2 𝑋13 < 𝑙𝑜𝑔2𝑏
5 13𝑙𝑜𝑔2 𝑋 < 5𝑙𝑜𝑔2𝑏 13𝑙𝑜𝑔2 𝑋 < 5𝑙𝑜𝑔22
6, ∵ 𝑏 < 26
𝑙𝑜𝑔2 𝑋 < 3013 = 2.307…
𝑙𝑜𝑔25 = 2.321… 𝑙𝑜𝑔26 = 2.584… ∴ 𝑿 ≤ 𝟒
주의! 책이랑 다름. 책에선 5보다 작거나 같다고 설명한다.
3000 LD1 2000
LDA 3500,1
HLT 0
3496 (−4)13
3497 (−3)13
3498 (−2)13
3499 (−1)13
3500 013
3501 113
3502 213
3503 313
3504 413
장소 2000에 있는 정수를 rI1에 적재
3500에 rI1값을 더한 주소값을 rA에 적재
3500에 0이 있다. 2000에 -1이 저장되어 있다면 3500 – 1, 즉 3499에 저장된 값이 rA에 적재
공간 : 12 시간 : 4u - LD1 : 2u - LDA : 2u
24
24. 변경하는 프로그램 두 개를 작성.
(a) 최소의 메모리 공간
(b)최소의 수행 시간
rA + 0 a b c d
rX + e f g h i
rA + a b c d e
rX + 0 f g h i
(a) 최소의 메모리 공간
DIV 3500
(3500) +10000
+ 0 a b c d e f g h i
DIV +10000
rA + a b c d e
rX + 0 f g h i
몫
나머지
(b) 최소의 수행 시간
rA + 0 a b c d
rX + e f g h i
rA + f g h i 0
rX + a b c d e
rA + 0 f g h i
rX + a b c d e
rA + a b c d e
rX + 0 f g h i
SRC 4
SRA 1
SLC 5