SlideShare a Scribd company logo
1 of 32
TAOCP 1 1.4.1 서브루틴 연습문제 아꿈사 이영권 whiletrue0222@gmail.com
1. [10] (4)는 서브루틴 1.3.2M의 특성들을 서술한 것이다.그것을 참고해서 서브루틴 (5)의 특성들을 서술하라.
1. [10] (4)는 서브루틴 1.3.2M의 특성들을 서술한 것이다.그것을 참고해서 서브루틴 (5)의 특성들을 서술하라. 1.4.1 (4) p233호출 명령열: JMP MAXIMUM들어올 때 조건: 	rI1 = n; n ≥ 1이라고 가정.나갈 때 조건: rA= max{1≤k≤n} CONTENTS(X + k) = CONTENTS(X + rI2);	rI3 = 0 ; rJ와 CI도 영향을 받음. 차이점: n이 100일 경우의 진입점만 추가되었다.
1. [10] (4)는 서브루틴 1.3.2M의 특성들을 서술한 것이다.그것을 참고해서 서브루틴 (5)의 특성들을 서술하라. 1.4.1 (4) p233호출 명령열: JMP MAXIMUM들어올 때 조건: 	rI1 = n; n ≥ 1이라고 가정.나갈 때 조건: rA= max{1≤k≤n} CONTENTS(X + k) = CONTENTS(X + rI2);	rI3 = 0 ; rJ와 CI도 영향을 받음. 해답:호출 명령열: 	JMP MAXN; 또는 만일 n = 100이면 JMP MAX100들어올 때 조건: 	MAXN 진입점의 경우 rI3 = n (n ≥ 1 이라고 가정).나갈 때 조건: (4)에서와 같음.
2. [10] JSJ 명령을 사용하지 않고 (6)과 같은 일을 하는 코드를 제시하라.
2. [10] JSJ 명령을 사용하지 않고 (6)과 같은 일을 하는 코드를 제시하라. 1.4.1.(6) MAX50		ENT3	50 JSJ	MAXN MAX100		ENT3	100 MAXN		STJ	EXIT 		JMP	2F 		.. 		..
2. [10] JSJ 명령을 사용하지 않고 (6)과 같은 일을 하는 코드를 제시하라. 1.4.1.(6) MAX50		ENT3	50 JSJ	MAXN MAX100		ENT3	100 MAXN		STJ	EXIT 		JMP	2F 		.. 		.. 1.4.1.(6) MAX50		STJ	EXIT ENT3	50 		JMP	2F MAX100		ENT3	100 MAXN		STJ	EXIT 		JMP	2F 		.. 		.. rJ를 미리 저장하고 JUMP한다.
3. [M15] 서브루틴 수행의 결과로 레지스터 J와 비교 지시자에 어떤 일이 생기는지를 명시적으로 밝힘으로써 (4)의 정보를 완성하라. 또한 레지스터 I1이 양의 값이 아닐 때 어떤 일이 생기는지도 말하라.
4. [21] r과 n이 매개변수이고 a가 a ≡ n (modulo r)인, 다시 말해서 a = 1 + (n - 1) mod r인 양수라고 할 때,X[a], X[a+r], X[a+2r], ..., X[n]의 최대값을 구하는 서브루틴이 되도록 MAXN을 일반화하라.r = 1 인 경우에 대한 특별한 진입점도 제공할 것. 또한, 일반화한 서브루틴의 특성을 (4)처럼 서술하라.
4. [21] r과 n이 매개변수이고 a가 a ≡ n (modulo r)인, 다시 말해서 a = 1 + (n - 1) mod r인 양수라고 할 때,X[a], X[a+r], X[a+2r], ..., X[n]의 최대값을 구하는 서브루틴이 되도록 MAXN을 일반화하라.r = 1 인 경우에 대한 특별한 진입점도 제공할 것. 또한, 일반화한 서브루틴의 특성을 (4)처럼 서술하라. n = 7 r = 3 a = 1 n = 8 r = 3 a = 2
4. [21] r과 n이 매개변수이고 a가 a ≡ n (modulo r)인, 다시 말해서 a = 1 + (n - 1) mod r인 양수라고 할 때,X[a], X[a+r], X[a+2r], ..., X[n]의 최대값을 구하는 서브루틴이 되도록 MAXN을 일반화하라.r = 1 인 경우에 대한 특별한 진입점도 제공할 것. 또한, 일반화한 서브루틴의 특성을 (4)처럼 서술하라. SMAX1		ENT1		1	r = 1SMAX		STJ		EXIT	그 외의 r.		JMP		2F	이전과 같은 방식으로 진행		...DEC3		0,1	r만큼 감소.		J3P		1BEXIT		JMP		*	나간다.
4. [21] r과 n이 매개변수이고 a가 a ≡ n (modulo r)인, 다시 말해서 a = 1 + (n - 1) mod r인 양수라고 할 때,X[a], X[a+r], X[a+2r], ..., X[n]의 최대값을 구하는 서브루틴이 되도록 MAXN을 일반화하라.r = 1 인 경우에 대한 특별한 진입점도 제공할 것. 또한, 일반화한 서브루틴의 특성을 (4)처럼 서술하라.
5. [21] MIX에 J레지스터가 없다고 가정하고, 레지스터 J를 사용하지 않는 서브루틴 연계를 위한 수단을 고안하라. 그리고 그러한 고안의 실용 사례로, (1)과 사실상 동등한 MAX100 서브루틴을 작성하라. 그 서브루틴의 특성을 (4)처럼 서술하라. (MIX의 자기 수정 코드 방식은 유지할 것.)
5. [21] MIX에 J레지스터가 없다고 가정하고, 레지스터 J를 사용하지 않는 서브루틴 연계를 위한 수단을 고안하라. 그리고 그러한 고안의 실용 사례로, (1)과 사실상 동등한 MAX100 서브루틴을 작성하라. 그 서브루틴의 특성을 (4)처럼 서술하라. (MIX의 자기 수정 코드 방식은 유지할 것.) 다른 레지스터를 사용해서 수동으로 JUMP주소를 기록한다. 호출 코드 ENTA  *+2JMP          MAX100 서브루틴 코드 MAX100    STA     EXIT(0:2) 	    .. MAX100	     STJ     EXIT      JMP    2F 	     ..
6. [26] MIX에 MOVE 연산자가 없다고 가정하고,호출 명령열"JMP MOVE; NOP A,I(F)"가 "MOVE A,I(F)"(MOVE 명령이 허용된다고 할 때)와 같은 효과가 되는 서브루틴 MOVE를 작성하라.레지스터 J에 대한 영향과 서브루틴이 하드웨어 명령보다 당연히 더 많은 시간과 공간을 차지한다는 사실에서만 차이가 나야한다.
6. [26] MIX에 MOVE 연산자가 없다고 가정하고,호출 명령열"JMP MOVE; NOP A,I(F)"가 "MOVE A,I(F)"(MOVE 명령이 허용된다고 할 때)와 같은 효과가 되는 서브루틴 MOVE를 작성하라.레지스터 J에 대한 영향과 서브루틴이 하드웨어 명령보다 당연히 더 많은 시간과 공간을 차지한다는 사실에서만 차이가 나야한다. MOVE	A,I(F) JMP	MOVE NOP	A,I(F)
호출 프로그램 / 메모리 영역 정의 	ENTA	55		rA, rI2는 사용중이었다고 가정 	ENT2	11 	ENT1	3		복사목적지 주소 	JMP	MOVE 	NOP 	1(2)		원본주소(복사크기)
MOVE	STJ	3F 	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4) 	J2Z	1F	DECA	0,2	STA2F(0:2)	DEC1	0,2	ST16F(0:2)2H	LDA	*,26H	STA	*,2	INC2	1	J2N	2B1H	LDA	4F5H	ENT2	*3H	JMP	* 4H	CON	0
MOVE	STJ	3F 	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4) 	J2Z	1F	DECA	0,2	STA2F(0:2)	DEC1	0,2	ST16F(0:2)2H	LDA	*,26H	STA	*,2	INC2	1	J2N	2B1H	LDA	4F5H	ENT2	*3H	JMP	* 4H	CON	0 rA와 rI2를 저장 레지스터 저장
MOVE	STJ	3F 	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4) 	J2Z	1F	DECA	0,2	STA2F(0:2)	DEC1	0,2	ST16F(0:2)2H	LDA	*,26H	STA	*,2	INC2	1	J2N	2B1H	LDA	4F5H	ENT2	*3H	JMP	* 4H	CON	0 rI2에 NOP 1(2) 명령이 저장된 주소를 읽음 NOP A,I(F) 읽기
MOVE	STJ	3F 	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4) 	J2Z	1F	DECA	0,2	STA2F(0:2)	DEC1	0,2	ST16F(0:2)2H	LDA	*,26H	STA	*,2	INC2	1	J2N	2B1H	LDA	4F5H	ENT2	*3H	JMP	* 4H	CON	0 명령열NOP 1(2) A,I 에서 A,I를 읽고 *+2에 저장함. NOP A,I(F) 읽기
MOVE	STJ	3F 	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4) 	J2Z	1F	DECA	0,2	STA2F(0:2)	DEC1	0,2	ST16F(0:2)2H	LDA	*,26H	STA	*,2	INC2	1	J2N	2B1H	LDA	4F5H	ENT2	*3H	JMP	* 4H	CON	0 rI2를 복구 NOP 1,2(2) 이럴경우쓰기때문임. ENTA로 원본주소를 읽음. NOP A,I(F) 읽기
MOVE	STJ	3F 	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4) 	J2Z	1F	DECA	0,2	STA2F(0:2)	DEC1	0,2	ST16F(0:2)2H	LDA	*,26H	STA	*,2	INC2	1	J2N	2B1H	LDA	4F5H	ENT2	*3H	JMP	* 4H	CON	0 다시 NOP 0(2) <- 명령이 저장된 주소를 읽음 복사되는 크기를 음수로 읽음. NOP A,I(F) 읽기
MOVE	STJ	3F 	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4) 	J2Z	1F	DECA	0,2	STA2F(0:2)	DEC1	0,2	ST16F(0:2)2H	LDA	*,26H	STA	*,2	INC2	1	J2N	2B1H	LDA	4F5H	ENT2	*3H	JMP	* 4H	CON	0 복사크기가 0이면 종료 MOVE 0은 아무동작 안함. 인수 검사
MOVE	STJ	3F 	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4) 	J2Z	1F	DECA	0,2	STA2F(0:2)	DEC1	0,2	ST16F(0:2)2H	LDA	*,26H	STA	*,2	INC2	1	J2N	2B1H	LDA	4F5H	ENT2	*3H	JMP	* 4H	CON	0 rA가 소스영역끝주소+1을 가르키도록 한다. rI1은 복사영역끝주소+1을 가르키도록 한다. 소스주소 – (- 크기) 인덱스 지정
MOVE	STJ	3F 	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4) 	J2Z	1F	DECA	0,2	STA2F(0:2)	DEC1	0,2	ST16F(0:2)2H	LDA	*,26H	STA	*,2	INC2	1	J2N	2B1H	LDA	4F5H	ENT2	*3H	JMP	* 4H	CON	0 소스를 읽고 값을 쓴다. 인덱스 감소 인덱스가 음수면 다시 값 복사 / 반복
MOVE	STJ	3F 	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4) 	J2Z	1F	DECA	0,2	STA2F(0:2)	DEC1	0,2	ST16F(0:2)2H	LDA	*,26H	STA	*,2	INC2	1	J2N	2B1H	LDA	4F5H	ENT2	*3H	JMP	* 4H	CON	0 rA와 rI2를 복구하고 종료 레지스터 복구
7. [20] 오늘날의 관점에서 자기 수정 코드가 문제가 되는 이유는 무엇인가? 프로그램 블록들이 "읽기 전용"임을 알고 있다면 운영체제는 고속 메모리를 좀 더 효율적으로 할당할 수 있다. 명령들이 변하지 않는다면 하드웨어의 명령 캐시(cache)가 더 빠르고 저렴해진다. (2)에서 "캐시" 대신 "파이프라인"이라고 해도 마찬가지. 어떤 명령이 파이프라인에 진입한 후에 변경되었다면 파이프라인은 비워져야 한다. CPU 회로가 이러한 조건을 점검하려면 더 복잡해져야 하며, 시간도 더 소비한다. 자기 수정 코드는 한 번에 한 프로세스에서만 사용할 수 있다. 자기 수정 코드는 점프 추적 루틴을 실패하게 만들 수 있다(연습문제 1.4.3.2-7). 점프 수정 루틴은 "프로파일링"(각 명령의 수행 횟수를 계산하는 것)을 위한 중요한 진단 도구이다.
7. [20] 오늘날의 관점에서 자기 수정 코드가 문제가 되는 이유는 무엇인가? 프로그램 블록들이 "읽기 전용"임을 알고 있다면 운영체제는 고속 메모리를 좀 더 효율적으로 할당할 수 있다. 명령들이 변하지 않는다면 하드웨어의 명령 캐시(cache)가 더 빠르고 저렴해진다. (2)에서 "캐시" 대신 "파이프라인"이라고 해도 마찬가지. 어떤 명령이 파이프라인에 진입한 후에 변경되었다면 파이프라인은 비워져야 한다. CPU 회로가 이러한 조건을 점검하려면 더 복잡해져야 하며, 시간도 더 소비한다. 자기 수정 코드는 한 번에 한 프로세스에서만 사용할 수 있다. 자기 수정 코드는 점프 추적 루틴을 실패하게 만들 수 있다(연습문제 1.4.3.2-7). 점프 수정 루틴은 "프로파일링"(각 명령의 수행 횟수를 계산하는 것)을 위한 중요한 진단 도구이다. MIX가 멀티태스킹 환경이면 자기 수정 코드는 다른 프로세스 동작에 영향을 준다.
7. [20] 오늘날의 관점에서 자기 수정 코드가 문제가 되는 이유는 무엇인가? 프로그램 블록들이 "읽기 전용"임을 알고 있다면 운영체제는 고속 메모리를 좀 더 효율적으로 할당할 수 있다. 명령들이 변하지 않는다면 하드웨어의 명령 캐시(cache)가 더 빠르고 저렴해진다. (2)에서 "캐시" 대신 "파이프라인"이라고 해도 마찬가지. 어떤 명령이 파이프라인에 진입한 후에 변경되었다면 파이프라인은 비워져야 한다. CPU 회로가 이러한 조건을 점검하려면 더 복잡해져야 하며, 시간도 더 소비한다. 자기 수정 코드는 한 번에 한 프로세스에서만 사용할 수 있다. 자기 수정 코드는 점프 추적 루틴을 실패하게 만들 수 있다(연습문제 1.4.3.2-7).점프 수정 루틴은 "프로파일링"(각 명령의 수행 횟수를 계산하는 것)을 위한 중요한 진단 도구이다. 1.4.3 발표하시는 분이..
감사합니다. :D

More Related Content

What's hot

[Live coding] 2회 5 23 (camp-exam_javalanguage)
[Live coding] 2회 5 23 (camp-exam_javalanguage)[Live coding] 2회 5 23 (camp-exam_javalanguage)
[Live coding] 2회 5 23 (camp-exam_javalanguage)동욱 하
 
Pgday bdr 천정대
Pgday bdr 천정대Pgday bdr 천정대
Pgday bdr 천정대PgDay.Seoul
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성NAVER D2
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?NAVER D2
 
Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706Yong Joon Moon
 
비전공자의 자바스크립트 도전기
비전공자의 자바스크립트 도전기비전공자의 자바스크립트 도전기
비전공자의 자바스크립트 도전기jeong seok yang
 
thread_seminar
thread_seminarthread_seminar
thread_seminarU.g. Yong
 
스톰 미리보기
스톰 미리보기스톰 미리보기
스톰 미리보기June Yi
 
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현NAVER D2
 
[2015 05-29] Oracle Lock
[2015 05-29] Oracle Lock[2015 05-29] Oracle Lock
[2015 05-29] Oracle LockSeok-joon Yun
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요NAVER D2
 
Free rtos seminar
Free rtos seminarFree rtos seminar
Free rtos seminarCho Daniel
 
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSStartup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSCirculus
 
PostgreSQL 공간관리 살펴보기 이근오
PostgreSQL 공간관리 살펴보기 이근오PostgreSQL 공간관리 살펴보기 이근오
PostgreSQL 공간관리 살펴보기 이근오PgDay.Seoul
 
android_thread
android_threadandroid_thread
android_threadhandfoot
 
[Gpg2권 박민근] 1.13 스택 와인딩
[Gpg2권 박민근] 1.13 스택 와인딩[Gpg2권 박민근] 1.13 스택 와인딩
[Gpg2권 박민근] 1.13 스택 와인딩MinGeun Park
 

What's hot (20)

[Live coding] 2회 5 23 (camp-exam_javalanguage)
[Live coding] 2회 5 23 (camp-exam_javalanguage)[Live coding] 2회 5 23 (camp-exam_javalanguage)
[Live coding] 2회 5 23 (camp-exam_javalanguage)
 
Pgday bdr 천정대
Pgday bdr 천정대Pgday bdr 천정대
Pgday bdr 천정대
 
Gcd ppt
Gcd pptGcd ppt
Gcd ppt
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
 
Iocp advanced
Iocp advancedIocp advanced
Iocp advanced
 
Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706
 
비전공자의 자바스크립트 도전기
비전공자의 자바스크립트 도전기비전공자의 자바스크립트 도전기
비전공자의 자바스크립트 도전기
 
thread_seminar
thread_seminarthread_seminar
thread_seminar
 
스톰 미리보기
스톰 미리보기스톰 미리보기
스톰 미리보기
 
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
 
[2015 05-29] Oracle Lock
[2015 05-29] Oracle Lock[2015 05-29] Oracle Lock
[2015 05-29] Oracle Lock
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
 
OracleHistory2
OracleHistory2OracleHistory2
OracleHistory2
 
Free rtos seminar
Free rtos seminarFree rtos seminar
Free rtos seminar
 
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSStartup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JS
 
PostgreSQL 공간관리 살펴보기 이근오
PostgreSQL 공간관리 살펴보기 이근오PostgreSQL 공간관리 살펴보기 이근오
PostgreSQL 공간관리 살펴보기 이근오
 
javascript02
javascript02javascript02
javascript02
 
android_thread
android_threadandroid_thread
android_thread
 
[Gpg2권 박민근] 1.13 스택 와인딩
[Gpg2권 박민근] 1.13 스택 와인딩[Gpg2권 박민근] 1.13 스택 와인딩
[Gpg2권 박민근] 1.13 스택 와인딩
 

Viewers also liked

소프트웨어 아키텍트가 알아야할 97가지
소프트웨어 아키텍트가 알아야할 97가지소프트웨어 아키텍트가 알아야할 97가지
소프트웨어 아키텍트가 알아야할 97가지Youngkwon Lee
 
Domain driven design_chapter2
Domain driven design_chapter2Domain driven design_chapter2
Domain driven design_chapter2Youngkwon Lee
 
Regex & property sheet
Regex & property sheetRegex & property sheet
Regex & property sheetYoungkwon Lee
 
Windows viac cpp_15장_16장
Windows viac cpp_15장_16장Windows viac cpp_15장_16장
Windows viac cpp_15장_16장Youngkwon Lee
 
HTML5&CSS3 8장. 눈을 즐겁게
HTML5&CSS3 8장. 눈을 즐겁게HTML5&CSS3 8장. 눈을 즐겁게
HTML5&CSS3 8장. 눈을 즐겁게Youngkwon Lee
 
아꿈사 2011 연말행사 자유발표 - 맥킨지, 발표의 기술
아꿈사 2011 연말행사 자유발표 - 맥킨지, 발표의 기술아꿈사 2011 연말행사 자유발표 - 맥킨지, 발표의 기술
아꿈사 2011 연말행사 자유발표 - 맥킨지, 발표의 기술Youngkwon Lee
 

Viewers also liked (7)

소프트웨어 아키텍트가 알아야할 97가지
소프트웨어 아키텍트가 알아야할 97가지소프트웨어 아키텍트가 알아야할 97가지
소프트웨어 아키텍트가 알아야할 97가지
 
Domain driven design_chapter2
Domain driven design_chapter2Domain driven design_chapter2
Domain driven design_chapter2
 
Regex & property sheet
Regex & property sheetRegex & property sheet
Regex & property sheet
 
Windows viac cpp_15장_16장
Windows viac cpp_15장_16장Windows viac cpp_15장_16장
Windows viac cpp_15장_16장
 
HTML5&CSS3 8장. 눈을 즐겁게
HTML5&CSS3 8장. 눈을 즐겁게HTML5&CSS3 8장. 눈을 즐겁게
HTML5&CSS3 8장. 눈을 즐겁게
 
아꿈사 2011 연말행사 자유발표 - 맥킨지, 발표의 기술
아꿈사 2011 연말행사 자유발표 - 맥킨지, 발표의 기술아꿈사 2011 연말행사 자유발표 - 맥킨지, 발표의 기술
아꿈사 2011 연말행사 자유발표 - 맥킨지, 발표의 기술
 
웹질팁
웹질팁웹질팁
웹질팁
 

Similar to Taocp 1.4.1 subroutine

Macro & compilation
Macro & compilationMacro & compilation
Macro & compilationIkhoon Eom
 
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기Kenu, GwangNam Heo
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법Terry Cho
 
Java jungsuk3 ch14_lambda_stream
Java jungsuk3 ch14_lambda_streamJava jungsuk3 ch14_lambda_stream
Java jungsuk3 ch14_lambda_stream성 남궁
 
SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8Sangmin Lee
 
제 7회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 7회 엑셈 수요 세미나 자료 연구컨텐츠팀제 7회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 7회 엑셈 수요 세미나 자료 연구컨텐츠팀EXEM
 
Java 8 & Beyond
Java 8 & BeyondJava 8 & Beyond
Java 8 & BeyondJay Lee
 
제 5회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 5회 엑셈 수요 세미나 자료 연구컨텐츠팀제 5회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 5회 엑셈 수요 세미나 자료 연구컨텐츠팀EXEM
 
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeJavascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeYoung-Beom Rhee
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가Vong Sik Kong
 
[아꿈사/110528] 멀티코어cpu이야기 5,6장
[아꿈사/110528] 멀티코어cpu이야기 5,6장[아꿈사/110528] 멀티코어cpu이야기 5,6장
[아꿈사/110528] 멀티코어cpu이야기 5,6장sung ki choi
 
Eddy_description.pptx
Eddy_description.pptxEddy_description.pptx
Eddy_description.pptxKim Sanghoon
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!WooYoung Cho
 
Assembly 스터디 2
Assembly 스터디 2Assembly 스터디 2
Assembly 스터디 2Jinkyoung Kim
 
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수유진 변
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규ChangKyu Song
 
Advanced nGrinder 2nd Edition
Advanced nGrinder 2nd EditionAdvanced nGrinder 2nd Edition
Advanced nGrinder 2nd EditionJunHo Yoon
 

Similar to Taocp 1.4.1 subroutine (20)

Macro & compilation
Macro & compilationMacro & compilation
Macro & compilation
 
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법
 
Java jungsuk3 ch14_lambda_stream
Java jungsuk3 ch14_lambda_streamJava jungsuk3 ch14_lambda_stream
Java jungsuk3 ch14_lambda_stream
 
강의자료 2
강의자료 2강의자료 2
강의자료 2
 
SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8
 
제 7회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 7회 엑셈 수요 세미나 자료 연구컨텐츠팀제 7회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 7회 엑셈 수요 세미나 자료 연구컨텐츠팀
 
Java 8 & Beyond
Java 8 & BeyondJava 8 & Beyond
Java 8 & Beyond
 
제 5회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 5회 엑셈 수요 세미나 자료 연구컨텐츠팀제 5회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 5회 엑셈 수요 세미나 자료 연구컨텐츠팀
 
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeJavascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가
 
[아꿈사/110528] 멀티코어cpu이야기 5,6장
[아꿈사/110528] 멀티코어cpu이야기 5,6장[아꿈사/110528] 멀티코어cpu이야기 5,6장
[아꿈사/110528] 멀티코어cpu이야기 5,6장
 
Eddy_description.pptx
Eddy_description.pptxEddy_description.pptx
Eddy_description.pptx
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!
 
Assembly 스터디 2
Assembly 스터디 2Assembly 스터디 2
Assembly 스터디 2
 
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)
 
Java tutorial
Java tutorialJava tutorial
Java tutorial
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규
 
Advanced nGrinder 2nd Edition
Advanced nGrinder 2nd EditionAdvanced nGrinder 2nd Edition
Advanced nGrinder 2nd Edition
 

Taocp 1.4.1 subroutine

  • 1. TAOCP 1 1.4.1 서브루틴 연습문제 아꿈사 이영권 whiletrue0222@gmail.com
  • 2. 1. [10] (4)는 서브루틴 1.3.2M의 특성들을 서술한 것이다.그것을 참고해서 서브루틴 (5)의 특성들을 서술하라.
  • 3. 1. [10] (4)는 서브루틴 1.3.2M의 특성들을 서술한 것이다.그것을 참고해서 서브루틴 (5)의 특성들을 서술하라. 1.4.1 (4) p233호출 명령열: JMP MAXIMUM들어올 때 조건: rI1 = n; n ≥ 1이라고 가정.나갈 때 조건: rA= max{1≤k≤n} CONTENTS(X + k) = CONTENTS(X + rI2); rI3 = 0 ; rJ와 CI도 영향을 받음. 차이점: n이 100일 경우의 진입점만 추가되었다.
  • 4. 1. [10] (4)는 서브루틴 1.3.2M의 특성들을 서술한 것이다.그것을 참고해서 서브루틴 (5)의 특성들을 서술하라. 1.4.1 (4) p233호출 명령열: JMP MAXIMUM들어올 때 조건: rI1 = n; n ≥ 1이라고 가정.나갈 때 조건: rA= max{1≤k≤n} CONTENTS(X + k) = CONTENTS(X + rI2); rI3 = 0 ; rJ와 CI도 영향을 받음. 해답:호출 명령열: JMP MAXN; 또는 만일 n = 100이면 JMP MAX100들어올 때 조건: MAXN 진입점의 경우 rI3 = n (n ≥ 1 이라고 가정).나갈 때 조건: (4)에서와 같음.
  • 5. 2. [10] JSJ 명령을 사용하지 않고 (6)과 같은 일을 하는 코드를 제시하라.
  • 6. 2. [10] JSJ 명령을 사용하지 않고 (6)과 같은 일을 하는 코드를 제시하라. 1.4.1.(6) MAX50 ENT3 50 JSJ MAXN MAX100 ENT3 100 MAXN STJ EXIT JMP 2F .. ..
  • 7. 2. [10] JSJ 명령을 사용하지 않고 (6)과 같은 일을 하는 코드를 제시하라. 1.4.1.(6) MAX50 ENT3 50 JSJ MAXN MAX100 ENT3 100 MAXN STJ EXIT JMP 2F .. .. 1.4.1.(6) MAX50 STJ EXIT ENT3 50 JMP 2F MAX100 ENT3 100 MAXN STJ EXIT JMP 2F .. .. rJ를 미리 저장하고 JUMP한다.
  • 8. 3. [M15] 서브루틴 수행의 결과로 레지스터 J와 비교 지시자에 어떤 일이 생기는지를 명시적으로 밝힘으로써 (4)의 정보를 완성하라. 또한 레지스터 I1이 양의 값이 아닐 때 어떤 일이 생기는지도 말하라.
  • 9. 4. [21] r과 n이 매개변수이고 a가 a ≡ n (modulo r)인, 다시 말해서 a = 1 + (n - 1) mod r인 양수라고 할 때,X[a], X[a+r], X[a+2r], ..., X[n]의 최대값을 구하는 서브루틴이 되도록 MAXN을 일반화하라.r = 1 인 경우에 대한 특별한 진입점도 제공할 것. 또한, 일반화한 서브루틴의 특성을 (4)처럼 서술하라.
  • 10. 4. [21] r과 n이 매개변수이고 a가 a ≡ n (modulo r)인, 다시 말해서 a = 1 + (n - 1) mod r인 양수라고 할 때,X[a], X[a+r], X[a+2r], ..., X[n]의 최대값을 구하는 서브루틴이 되도록 MAXN을 일반화하라.r = 1 인 경우에 대한 특별한 진입점도 제공할 것. 또한, 일반화한 서브루틴의 특성을 (4)처럼 서술하라. n = 7 r = 3 a = 1 n = 8 r = 3 a = 2
  • 11. 4. [21] r과 n이 매개변수이고 a가 a ≡ n (modulo r)인, 다시 말해서 a = 1 + (n - 1) mod r인 양수라고 할 때,X[a], X[a+r], X[a+2r], ..., X[n]의 최대값을 구하는 서브루틴이 되도록 MAXN을 일반화하라.r = 1 인 경우에 대한 특별한 진입점도 제공할 것. 또한, 일반화한 서브루틴의 특성을 (4)처럼 서술하라. SMAX1 ENT1 1 r = 1SMAX STJ EXIT 그 외의 r. JMP 2F 이전과 같은 방식으로 진행 ...DEC3 0,1 r만큼 감소. J3P 1BEXIT JMP * 나간다.
  • 12. 4. [21] r과 n이 매개변수이고 a가 a ≡ n (modulo r)인, 다시 말해서 a = 1 + (n - 1) mod r인 양수라고 할 때,X[a], X[a+r], X[a+2r], ..., X[n]의 최대값을 구하는 서브루틴이 되도록 MAXN을 일반화하라.r = 1 인 경우에 대한 특별한 진입점도 제공할 것. 또한, 일반화한 서브루틴의 특성을 (4)처럼 서술하라.
  • 13. 5. [21] MIX에 J레지스터가 없다고 가정하고, 레지스터 J를 사용하지 않는 서브루틴 연계를 위한 수단을 고안하라. 그리고 그러한 고안의 실용 사례로, (1)과 사실상 동등한 MAX100 서브루틴을 작성하라. 그 서브루틴의 특성을 (4)처럼 서술하라. (MIX의 자기 수정 코드 방식은 유지할 것.)
  • 14. 5. [21] MIX에 J레지스터가 없다고 가정하고, 레지스터 J를 사용하지 않는 서브루틴 연계를 위한 수단을 고안하라. 그리고 그러한 고안의 실용 사례로, (1)과 사실상 동등한 MAX100 서브루틴을 작성하라. 그 서브루틴의 특성을 (4)처럼 서술하라. (MIX의 자기 수정 코드 방식은 유지할 것.) 다른 레지스터를 사용해서 수동으로 JUMP주소를 기록한다. 호출 코드 ENTA  *+2JMP          MAX100 서브루틴 코드 MAX100 STA EXIT(0:2) .. MAX100 STJ EXIT JMP 2F ..
  • 15. 6. [26] MIX에 MOVE 연산자가 없다고 가정하고,호출 명령열"JMP MOVE; NOP A,I(F)"가 "MOVE A,I(F)"(MOVE 명령이 허용된다고 할 때)와 같은 효과가 되는 서브루틴 MOVE를 작성하라.레지스터 J에 대한 영향과 서브루틴이 하드웨어 명령보다 당연히 더 많은 시간과 공간을 차지한다는 사실에서만 차이가 나야한다.
  • 16.
  • 17. 6. [26] MIX에 MOVE 연산자가 없다고 가정하고,호출 명령열"JMP MOVE; NOP A,I(F)"가 "MOVE A,I(F)"(MOVE 명령이 허용된다고 할 때)와 같은 효과가 되는 서브루틴 MOVE를 작성하라.레지스터 J에 대한 영향과 서브루틴이 하드웨어 명령보다 당연히 더 많은 시간과 공간을 차지한다는 사실에서만 차이가 나야한다. MOVE A,I(F) JMP MOVE NOP A,I(F)
  • 18. 호출 프로그램 / 메모리 영역 정의 ENTA 55 rA, rI2는 사용중이었다고 가정 ENT2 11 ENT1 3 복사목적지 주소 JMP MOVE NOP 1(2) 원본주소(복사크기)
  • 19. MOVE STJ 3F STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP * 4H CON 0
  • 20. MOVE STJ 3F STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP * 4H CON 0 rA와 rI2를 저장 레지스터 저장
  • 21. MOVE STJ 3F STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP * 4H CON 0 rI2에 NOP 1(2) 명령이 저장된 주소를 읽음 NOP A,I(F) 읽기
  • 22. MOVE STJ 3F STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP * 4H CON 0 명령열NOP 1(2) A,I 에서 A,I를 읽고 *+2에 저장함. NOP A,I(F) 읽기
  • 23. MOVE STJ 3F STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP * 4H CON 0 rI2를 복구 NOP 1,2(2) 이럴경우쓰기때문임. ENTA로 원본주소를 읽음. NOP A,I(F) 읽기
  • 24. MOVE STJ 3F STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP * 4H CON 0 다시 NOP 0(2) <- 명령이 저장된 주소를 읽음 복사되는 크기를 음수로 읽음. NOP A,I(F) 읽기
  • 25. MOVE STJ 3F STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP * 4H CON 0 복사크기가 0이면 종료 MOVE 0은 아무동작 안함. 인수 검사
  • 26. MOVE STJ 3F STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP * 4H CON 0 rA가 소스영역끝주소+1을 가르키도록 한다. rI1은 복사영역끝주소+1을 가르키도록 한다. 소스주소 – (- 크기) 인덱스 지정
  • 27. MOVE STJ 3F STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP * 4H CON 0 소스를 읽고 값을 쓴다. 인덱스 감소 인덱스가 음수면 다시 값 복사 / 반복
  • 28. MOVE STJ 3F STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP * 4H CON 0 rA와 rI2를 복구하고 종료 레지스터 복구
  • 29. 7. [20] 오늘날의 관점에서 자기 수정 코드가 문제가 되는 이유는 무엇인가? 프로그램 블록들이 "읽기 전용"임을 알고 있다면 운영체제는 고속 메모리를 좀 더 효율적으로 할당할 수 있다. 명령들이 변하지 않는다면 하드웨어의 명령 캐시(cache)가 더 빠르고 저렴해진다. (2)에서 "캐시" 대신 "파이프라인"이라고 해도 마찬가지. 어떤 명령이 파이프라인에 진입한 후에 변경되었다면 파이프라인은 비워져야 한다. CPU 회로가 이러한 조건을 점검하려면 더 복잡해져야 하며, 시간도 더 소비한다. 자기 수정 코드는 한 번에 한 프로세스에서만 사용할 수 있다. 자기 수정 코드는 점프 추적 루틴을 실패하게 만들 수 있다(연습문제 1.4.3.2-7). 점프 수정 루틴은 "프로파일링"(각 명령의 수행 횟수를 계산하는 것)을 위한 중요한 진단 도구이다.
  • 30. 7. [20] 오늘날의 관점에서 자기 수정 코드가 문제가 되는 이유는 무엇인가? 프로그램 블록들이 "읽기 전용"임을 알고 있다면 운영체제는 고속 메모리를 좀 더 효율적으로 할당할 수 있다. 명령들이 변하지 않는다면 하드웨어의 명령 캐시(cache)가 더 빠르고 저렴해진다. (2)에서 "캐시" 대신 "파이프라인"이라고 해도 마찬가지. 어떤 명령이 파이프라인에 진입한 후에 변경되었다면 파이프라인은 비워져야 한다. CPU 회로가 이러한 조건을 점검하려면 더 복잡해져야 하며, 시간도 더 소비한다. 자기 수정 코드는 한 번에 한 프로세스에서만 사용할 수 있다. 자기 수정 코드는 점프 추적 루틴을 실패하게 만들 수 있다(연습문제 1.4.3.2-7). 점프 수정 루틴은 "프로파일링"(각 명령의 수행 횟수를 계산하는 것)을 위한 중요한 진단 도구이다. MIX가 멀티태스킹 환경이면 자기 수정 코드는 다른 프로세스 동작에 영향을 준다.
  • 31. 7. [20] 오늘날의 관점에서 자기 수정 코드가 문제가 되는 이유는 무엇인가? 프로그램 블록들이 "읽기 전용"임을 알고 있다면 운영체제는 고속 메모리를 좀 더 효율적으로 할당할 수 있다. 명령들이 변하지 않는다면 하드웨어의 명령 캐시(cache)가 더 빠르고 저렴해진다. (2)에서 "캐시" 대신 "파이프라인"이라고 해도 마찬가지. 어떤 명령이 파이프라인에 진입한 후에 변경되었다면 파이프라인은 비워져야 한다. CPU 회로가 이러한 조건을 점검하려면 더 복잡해져야 하며, 시간도 더 소비한다. 자기 수정 코드는 한 번에 한 프로세스에서만 사용할 수 있다. 자기 수정 코드는 점프 추적 루틴을 실패하게 만들 수 있다(연습문제 1.4.3.2-7).점프 수정 루틴은 "프로파일링"(각 명령의 수행 횟수를 계산하는 것)을 위한 중요한 진단 도구이다. 1.4.3 발표하시는 분이..