SlideShare une entreprise Scribd logo
1  sur  74
The Art of Computer Programming1.3.2 MIXAL 아키텍트를 꿈꾸는 사람들cafe.naver.com/architect1 현수명  soomong.net #soomong
MIXAL? MIXAL Structure MIXAL Example 	Hello World 	Algorithm M 	Algorithm P Rules
MIXAL MIXAL? MIX Assembly Language MIX Assembly Languaue MIX Assembler MIX Machine Languaue
MIXAL Structure Label : 기호는 1~10개의 영문자들과 숫자로 구성되는 문자열 MNEMONIC : MIX instruction set 이나 pseudo instruction ADDRESS : 평가되는 주소 INDEX : 평가되는 index. 기본값은 0. ADDRESS 가 있어야만 사용가능 MOD : instruction 의 mod COMMENT : 설명
MIXAL Structure Address M 계산법 (index 처리가 끝난 주소) I=0 일 경우 	M 주소는 ±AA I=1~6 일 경우 	M 주소는 ±AA 와rI1~6의 내용을 대수적으로 더한 결과
MIXAL Structure Example
Operation  의 주소 MIXAL 소스코드 어셈블된  Machine Language 몇번실행되었는가? profile
MIXAL Hello World * PROGRAM FOR ANDSTUDY. HELLO MIXAL WORLD PRINTER	EQU	18 		ORIG	3000 START	OUT	TEXT(PRINTER) 		HLT TEXT		ALF	HELLO 		ALF	 MIXA 		ALF	L WOR 		ALF	LD     		END	START
MIXAL Hello World * PROGRAM FOR ANDSTUDY. HELLO MIXAL WORLD PRINTER	EQU	18 		ORIG	3000 START	OUT	TEXT(PRINTER) 		HLT TEXT		ALF	HELLO 		ALF	 MIXA 		ALF	L WOR 		ALF	LD     		END	START  주석! * 로 시작 어셈블된 프로그램에 전혀 영향을 미치지 않는다
MIXAL Directives ORIG EQU CON ALF END * PROGRAM FOR ANDSTUDY. HELLO MIXAL WORLD PRINTER	EQU	18 		ORIG	3000 START	OUT	TEXT(PRINTER) 		HLT TEXT		ALF	HELLO 		ALF	 MIXA 		ALF	L WOR 		ALF	LD     		END	START  EQU 동치! 기호 PRINTER 와 수18은 동치equivalent이다. 유사연산pseudo-operation
MIXAL Directives ORIG EQU CON ALF END * PROGRAM FOR ANDSTUDY. HELLO MIXAL WORLD PRINTER	EQU	18 ORIG	3000 START	OUT	TEXT(PRINTER) 		HLT TEXT		ALF	HELLO 		ALF	 MIXA 		ALF	L WOR 		ALF	LD     		END	START  ORIG  이후 instruction 의 주소를지정. 3000부터 차례로 증가함을 의미. 유사연산pseudo-operation
* PROGRAM FOR ANDSTUDY. HELLO MIXAL WORLD PRINTER	EQU	18 		ORIG	3000 START	OUT	TEXT(PRINTER) 		HLT TEXT		ALF	HELLO 		ALF	 MIXA 		ALF	L WOR 		ALF	LD     		END	START  OUT  TEXT   PRINTER ADDRESS 는 TEXT MOD 는 (PRINTER)
* PROGRAM FOR ANDSTUDY. HELLO MIXAL WORLD PRINTER	EQU	18 		ORIG	3000 START	OUT	TEXT(PRINTER) HLT TEXT		ALF	HELLO 		ALF	 MIXA 		ALF	L WOR 		ALF	LD     		END	START  HLT 컴퓨터를 멈춘다!
MIXAL Directives ORIG EQU CON ALF END * PROGRAM FOR ANDSTUDY. HELLO MIXAL WORLD PRINTER	EQU	18 		ORIG	3000 START	OUT	TEXT(PRINTER) 		HLT TEXT		ALF	HELLO 		ALF	 MIXA 		ALF	L WOR 		ALF	LD     		END	START  ALF MIX 영수문자 코드로 된 5byte 짜리 상수를 만든다.
MIXAL Directives ORIG EQU CON ALF END * PROGRAM FOR ANDSTUDY. HELLO MIXAL WORLD PRINTER	EQU	18 		ORIG	3000 START	OUT	TEXT(PRINTER) 		HLT TEXT		ALF	HELLO 		ALF	 MIXA 		ALF	L WOR 		ALF	LD     END	START  END MIXAL 프로그램의 마지막에는 항상 END 가 있다. 주소필드는 프로그램이 메모리에 적재 된 후 수행을 시작할 장소이다.
Let’s assemble & run!
Algorithm M 알고리즘 M (최대값 찾기) M1. [초기화]  	j=1 , k=n-1, m=X[n] M2. [모두 검사했는가?]  	if( k > 0 ) 알고리즘 종료! M3. [비교]  	if( X[k] <= m ) 이면 M5 로 간다 M4. [m변경]  	j=k, m=X[k] (m은 새로운 현재 최대값) M5. [k감소]  	k-- , M2 로 간다
Algorithm M Implementation rI1=n 최대값을 찾는 data 비교 rI3=k M rA=m 최대값 J rI2=j 최대값의 index
Algorithm M Implementation * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X		EQU	1000 		ORIG	3000 MAXIMUM	STJ	EXIT	;SUBROUTINE LINKAGE INIT		ENT3	0,1	;M1: INITIALIZE K = N 		JMP	CHANGEM ;J = N,M = X(N),K = N-1 LOOP		CMPA	X,3	;M3: COMPARE 		JGE	*+3 CHANGEM	ENT2	0,3	;M4: CHANGE M. J = K 		LDA	X,3	;M = X(K) 		DEC3	1	;M5: DECREASE K 		J3P	LOOP	;M2: ALL TESTED? EXIT		JMP	*	;RETURN TO MAIN PROGRAM
Algorithm M Implementation * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X		EQU	1000 		ORIG	3000 MAXIMUM	STJ	EXIT	;SUBROUTINE LINKAGE INIT		ENT3	0,1	;M1: INITIALIZE K = N 		JMP	CHANGEM ;J = N,M = X(N),K = N-1 LOOP		CMPA	X,3	;M3: COMPARE 		JGE	*+3 CHANGEM	ENT2	0,3	;M4: CHANGE M. J = K 		LDA	X,3	;M = X(K) 		DEC3	1	;M5: DECREASE K 		J3P	LOOP	;M2: ALL TESTED? EXIT		JMP	*	;RETURN TO MAIN PROGRAM Subroutine rJ(Address EXIT) 알고리즘M 은이렇게 호출될것임! ENT1	100 JMP	MAXIMUM STA	MAX
Algorithm M Implementation * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X		EQU	1000 		ORIG	3000 MAXIMUM	STJ	EXIT	;SUBROUTINE LINKAGE INIT		ENT3	0,1	;M1: INITIALIZE K = N JMP	CHANGEM ;J = N,M = X(N),K = N-1 LOOP		CMPA	X,3	;M3: COMPARE 		JGE	*+3 CHANGEM	ENT2	0,3	;M4: CHANGE M. J = K 		LDA	X,3	;M = X(K) 		DEC3	1	;M5: DECREASE K 		J3P	LOOP	;M2: ALL TESTED? EXIT		JMP	*	;RETURN TO MAIN PROGRAM (Address 0 + rI1)    rI3
Algorithm M Implementation * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X		EQU	1000 		ORIG	3000 MAXIMUM	STJ	EXIT	;SUBROUTINE LINKAGE INIT		ENT3	0,1	;M1: INITIALIZE K = N 		JMP	CHANGEM ;J = N,M = X(N),K = N-1 LOOP		CMPA	X,3	;M3: COMPARE 		JGE	*+3 CHANGEM	ENT2	0,3	;M4: CHANGE M. J = K 		LDA	X,3	;M = X(K) 		DEC3	1	;M5: DECREASE K 		J3P	LOOP	;M2: ALL TESTED? EXIT		JMP	*	;RETURN TO MAIN PROGRAM 아무런 조건 없이 CHANGEM 으로 Jump
Algorithm M Implementation * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X		EQU	1000 		ORIG	3000 MAXIMUM	STJ	EXIT	;SUBROUTINE LINKAGE INIT		ENT3	0,1	;M1: INITIALIZE K = N 		JMP	CHANGEM ;J = N,M = X(N),K = N-1 LOOP		CMPA	X,3	;M3: COMPARE JGE	*+3 CHANGEM	ENT2	0,3	;M4: CHANGE M. J = K 		LDA	X,3	;M = X(K) 		DEC3	1	;M5: DECREASE K 		J3P	LOOP	;M2: ALL TESTED? EXIT		JMP	*	;RETURN TO MAIN PROGRAM (Address X + rI3)의 값 (Address 1000 + rI3)의 값과 rIA 비교 			comparison
Algorithm M Implementation Self *는 자신self 라고 읽으며  현재 명령이 있는 메모리 장소를 의미 현재 3004이면 *+3 은 3007 * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X		EQU	1000 		ORIG	3000 MAXIMUM	STJ	EXIT	;SUBROUTINE LINKAGE INIT		ENT3	0,1	;M1: INITIALIZE K = N 		JMP	CHANGEM ;J = N,M = X(N),K = N-1 LOOP		CMPA	X,3	;M3: COMPARE JGE	*+3 CHANGEM	ENT2	0,3	;M4: CHANGE M. J = K 		LDA	X,3	;M = X(K) 		DEC3	1	;M5: DECREASE K 		J3P	LOOP	;M2: ALL TESTED? EXIT		JMP	*	;RETURN TO MAIN PROGRAM Comparison 이 Greator or Equal 이면 Jump
Algorithm M Implementation * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X		EQU	1000 		ORIG	3000 MAXIMUM	STJ	EXIT	;SUBROUTINE LINKAGE INIT		ENT3	0,1	;M1: INITIALIZE K = N 		JMP	CHANGEM ;J = N,M = X(N),K = N-1 LOOP		CMPA	X,3	;M3: COMPARE 		JGE	*+3 CHANGEM	ENT2	0,3	;M4: CHANGE M. J = K LDA	X,3	;M = X(K) 		DEC3	1	;M5: DECREASE K 		J3P	LOOP	;M2: ALL TESTED? EXIT		JMP	*	;RETURN TO MAIN PROGRAM (Address 0 + rI3)    rI2
Algorithm M Implementation * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X		EQU	1000 		ORIG	3000 MAXIMUM	STJ	EXIT	;SUBROUTINE LINKAGE INIT		ENT3	0,1	;M1: INITIALIZE K = N 		JMP	CHANGEM ;J = N,M = X(N),K = N-1 LOOP		CMPA	X,3	;M3: COMPARE 		JGE	*+3 CHANGEM	ENT2	0,3	;M4: CHANGE M. J = K 		LDA	X,3	;M = X(K) DEC3	1	;M5: DECREASE K 		J3P	LOOP	;M2: ALL TESTED? EXIT		JMP	*	;RETURN TO MAIN PROGRAM (Address X + rI3)의 값 (Address 1000 + rI3)의 값rIA
Algorithm M Implementation * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X		EQU	1000 		ORIG	3000 MAXIMUM	STJ	EXIT	;SUBROUTINE LINKAGE INIT		ENT3	0,1	;M1: INITIALIZE K = N 		JMP	CHANGEM ;J = N,M = X(N),K = N-1 LOOP		CMPA	X,3	;M3: COMPARE 		JGE	*+3 CHANGEM	ENT2	0,3	;M4: CHANGE M. J = K 		LDA	X,3	;M = X(K) DEC3	1	;M5: DECREASE K J3P	LOOP	;M2: ALL TESTED? EXIT		JMP	*	;RETURN TO MAIN PROGRAM rI3 의 값을 1 decrease
Algorithm M Implementation * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X		EQU	1000 		ORIG	3000 MAXIMUM	STJ	EXIT	;SUBROUTINE LINKAGE INIT		ENT3	0,1	;M1: INITIALIZE K = N 		JMP	CHANGEM ;J = N,M = X(N),K = N-1 LOOPCMPA	X,3	;M3: COMPARE 		JGE	*+3 CHANGEM	ENT2	0,3	;M4: CHANGE M. J = K 		LDA	X,3	;M = X(K) 		DEC3	1	;M5: DECREASE K J3P	LOOP	;M2: ALL TESTED? EXIT		JMP	*	;RETURN TO MAIN PROGRAM rI3 가 positive 이면 LOOP 로!
Let’s assemble & run!
Algorithm P
Algorithm P getPrime
Algorithm P getPrime P1. [표를 시작]  	PRIME[1]=2, N=3, J=1 P2. [N은 소수]  	J++, PRIME[J]=N P3. [500개를 찾았는가?]  	IF(J==500), GOTO P9 P4. [다음N으로]  	N=N+2 P5. [K=2]  	K=2 P6. [PRIME[K]?] 	N 을 PRIME[K]로 나눈다. 몫은Q, 나머지는R 	IF(R==0), 소수가 아니므로 GOTO P4 P7. [PRIME[K]가 큰가?] 	IF(Q<=PRIME[K]),이경우 반드시 소수이므로 GOTO P2 P8. [다음K로] 	K++, GOTO P6
Algorithm P Implementation getPrime Memory J N rI2=n rI1=j 소수후보들 K rI3=k 소수를 만들기위해 나눠보는 아이들
Algorithm P Implementation Initial  table & buffers * INITIAL CONTENTS OF TABLES AND BUFFERS ORIG	PRIME+1 	CON	2 	ORIG	BUF0-5 TITLE	ALF	FIRST 	ALF	 FIVE 	ALF	 HUND 	ALF	RED P 	ALF	RIMES 	ORIG	BUF0+24 	CON	BUF1+10 	ORIG	BUF1+24 	CON	BUF0+10 	END	START 상수 2를 (Address PRIME+1)에 정의 상수 2를 (Address -1+1)에 정의
Algorithm P Implementation Initial  table & buffers * INITIAL CONTENTS OF TABLES AND BUFFERS 	ORIG	PRIME+1 	CON	2 	ORIG	BUF0-5 TITLE	ALF	FIRST 	ALF	 FIVE 	ALF	 HUND 	ALF	RED P 	ALF	RIMES ORIG	BUF0+24 	CON	BUF1+10 	ORIG	BUF1+24 	CON	BUF0+10 	END	START TITLE 문자열 정의
Algorithm P Implementation Initial  table & buffers * INITIAL CONTENTS OF TABLES AND BUFFERS 	ORIG	PRIME+1 	CON	2 	ORIG	BUF0-5 TITLE	ALF	FIRST 	ALF	 FIVE 	ALF	 HUND 	ALF	RED P 	ALF	RIMES ORIG	BUF0+24 	CON	BUF1+10 	ORIG	BUF1+24 	CON	BUF0+10 END	START 두 버퍼는 각자 상대 버퍼를 가리킨다
Algorithm P Implementation getPrime * EXAMPLE PROGRAM ... TABLE OF PRIMES * RI1=J-500, RI2=N, RI3=K, RI4=B, RI5=M+50S L	EQU	500	 PRINTER	EQU	18 PRIME	EQU	-1 BUF0	EQU	2000 BUF1	EQU	BUF0+25 	ORIG	3000 START	IOC	0(PRINTER)	   ;NEW PAGE 	LD1	=1-L=	   ;<P1> J=1 	LD2	=3=	   ;	N=3 2H	INC1	1	   ;<P2> N IS PRIME! J=J+1 	ST2	PRIME+L,1	   ;	PRIME(J)=N 	J1Z	2F	   ;<P3> IS FIND 500? 4H	INC2	2	   ;<P4> GO TO NEXT N 	ENT3	2	   ;<P5> K=2 6H	ENTA	0	   ;<P6> PRIME(K)/N? 	ENTX	0,2	   ;	RAX=N 	DIV	PRIME,3	   ;	RA=Q , RX=R 	JXZ	4B	   ;	IF(R==0) GO <P4> 	CMPA	PRIME,3	   ;<P7> COMPARISON = ( Q > PRIME(K) ) 	INC3	1	   ;<P8> GO TO NEXT K 	JG	6B	   ;	IF COMPARISON GREATER , GO TO <P6>  	JMP	2B	   ;	ELSE N IS PRIME!
Algorithm P Implementation getPrime * EXAMPLE PROGRAM ... TABLE OF PRIMES * RI1=J-500, RI2=N, RI3=K, RI4=B, RI5=M+50S L		EQU	500	 PRINTER	EQU	18 PRIME		EQU	-1 BUF0		EQU	2000 BUF1		EQU	BUF0+25 	ORIG	3000 START		IOC	0(PRINTER)	   ;NEW PAGE 		LD1	=1-L=	   ;<P1> J=1 		LD2	=3=	   ;	N=3 … MIX directive 인 EQU 에도 연산가능
Algorithm P Implementation getPrime * EXAMPLE PROGRAM ... TABLE OF PRIMES * RI1=J-500, RI2=N, RI3=K, RI4=B, RI5=M+50S L		EQU	500	 PRINTER	EQU	18 PRIME		EQU	-1 BUF0		EQU	2000 BUF1		EQU	BUF0+25 		ORIG	3000 START		IOC	0(PRINTER)	   ;NEW PAGE LD1	=1-L=	   ;<P1> J=1 		LD2	=3=	   ;	N=3 … 지정된 유닛PRINTER 가 준비상태가 아니면 기다렸다가 수행 PRINTER 를 다음 page 최상위로 넘긴다
Algorithm P Implementation getPrime * EXAMPLE PROGRAM ... TABLE OF PRIMES * RI1=J-500, RI2=N, RI3=K, RI4=B, RI5=M+50S L		EQU	500	 PRINTER	EQU	18 PRIME		EQU	-1 BUF0		EQU	2000 BUF1		EQU	BUF0+25 		ORIG	3000 START		IOC	0(PRINTER)	   ;NEW PAGE LD1	=1-L=	   ;<P1> J=1 		LD2	=3=	   ;	N=3 … Literal constant 리터럴상수. 어셈블러는 자동으로 내부이름을 생성하고 적절한 CON 절을 삽입해준다. 상수 1-L 즉 1-500    rI1 상수 3    rI2 MIX Assembler
Algorithm P Implementation getPrime 2H	INC1	1	   	;<P2> N IS PRIME! J=J+1 	ST2	PRIME+L,1	;	PRIME(J)=N J1Z2F   ;<P3> IS FIND 500? 4HINC2	2	   ;<P4> GO TO NEXT N 	ENT3	2	   ;<P5> K=2 6HENTA	0	   ;<P6> PRIME(K)/N? 	ENTX	0,2	   ;	RAX=N 	DIV	PRIME,3	   ;	RA=Q , RX=R 	JXZ	4B	   ;	IF(R==0) GO <P4> 	CMPA	PRIME,3  ;<P7> COMPARISON=(Q>PRIME(K)) 	INC3	1	   ;<P8> GO TO NEXT K 	JG	6B	   ; IF COMPARISON GREATER,GO<P6>  	JMP	2B   ;	ELSE N IS PRIME! 2HOUT	TITLE(PRINTER) ;<P9> PRINT TITLE Local symbol 원하는만큼 여러번 재정의가능한 특별한 기호. dB : 가장 가까운 이전장소dH dF : 가장 가까운 이후장소 dH (d 는 한자리 숫자)
Algorithm P Implementation getPrime 2H	INC1	1	   	;<P2> N IS PRIME! J=J+1 	ST2	PRIME+L,1	;	PRIME(J)=N J1Z	2F	   ;<P3> IS FIND 500? 4H	INC2	2	   ;<P4> GO TO NEXT N 	ENT3	2	   ;<P5> K=2 6H	ENTA	0	   ;<P6> PRIME(K)/N? 	ENTX	0,2	   ;	RAX=N 	DIV	PRIME,3	   ;	RA=Q , RX=R 	JXZ	4B	   ;	IF(R==0) GO <P4> 	CMPA	PRIME,3  ;<P7> COMPARISON=(Q>PRIME(K)) 	INC3	1	   ;<P8> GO TO NEXT K 	JG	6B	   ; IF COMPARISON GREATER,GO<P6>  	JMP	2B	   ;	ELSE N IS PRIME! 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE (Address PRIME+L + rI1)의 값 rI2    (Address -1+500 + rI3)
Algorithm P Implementation getPrime 2H	INC1	1	   	;<P2> N IS PRIME! J=J+1 	ST2	PRIME+L,1	;	PRIME(J)=N 	J1Z	2F	   ;<P3> IS FIND 500? 4H	INC2	2	   ;<P4> GO TO NEXT N 	ENT3	2	   ;<P5> K=2 6H	ENTA	0	   ;<P6> PRIME(K)/N? 	ENTX	0,2	   ;	RAX=N 	DIV	PRIME,3	   ;	RA=Q , RX=R 	JXZ	4B	   ;	IF(R==0) GO <P4> 	CMPA	PRIME,3  ;<P7> COMPARISON=(Q>PRIME(K)) 	INC3	1	   ;<P8> GO TO NEXT K 	JG	6B	   ; IF COMPARISON GREATER,GO<P6>  	JMP	2B	   ;	ELSE N IS PRIME! 2HOUT	TITLE(PRINTER) ;<P9> PRINT TITLE rI1 이 zero 이면 2F 로 Jump
Algorithm P Implementation getPrime 2H	INC1	1	   	;<P2> N IS PRIME! J=J+1 	ST2	PRIME+L,1	;	PRIME(J)=N 	J1Z	2F	   ;<P3> IS FIND 500? 4H	INC2	2	   ;<P4> GO TO NEXT N ENT3	2	   ;<P5> K=2 6H	ENTA	0	   ;<P6> PRIME(K)/N? 	ENTX	0,2	   ;	RAX=N 	DIV	PRIME,3	   ;	RA=Q , RX=R 	JXZ	4B	   ;	IF(R==0) GO <P4> 	CMPA	PRIME,3  ;<P7> COMPARISON=(Q>PRIME(K)) 	INC3	1	   ;<P8> GO TO NEXT K 	JG	6B	   ; IF COMPARISON GREATER,GO<P6>  	JMP	2B	   ;	ELSE N IS PRIME! 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE rI2 를 2 만큼 increase
Algorithm P Implementation getPrime 2H	INC1	1	   	;<P2> N IS PRIME! J=J+1 	ST2	PRIME+L,1	;	PRIME(J)=N 	J1Z	2F	   ;<P3> IS FIND 500? 4H	INC2	2	   ;<P4> GO TO NEXT N 	ENT3	2	   ;<P5> K=2 6H	ENTA	0	   ;<P6> PRIME(K)/N? 	ENTX	0,2	   ;	RAX=N 	DIV	PRIME,3	   ;	RA=Q , RX=R 	JXZ	4B	   ;	IF(R==0) GO <P4> 	CMPA	PRIME,3  ;<P7> COMPARISON=(Q>PRIME(K)) 	INC3	1	   ;<P8> GO TO NEXT K 	JG	6B	   ; IF COMPARISON GREATER,GO<P6>  	JMP	2B	   ;	ELSE N IS PRIME! 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE (Address 2)    rI3
Algorithm P Implementation getPrime 2H	INC1	1	   	;<P2> N IS PRIME! J=J+1 	ST2	PRIME+L,1	;	PRIME(J)=N 	J1Z	2F	   ;<P3> IS FIND 500? 4H	INC2	2	   ;<P4> GO TO NEXT N 	ENT3	2	   ;<P5> K=2 6H	ENTA	0	   ;<P6> PRIME(K)/N? 	ENTX	0,2	   ;	RAX=N DIV	PRIME,3	   ;	RA=Q , RX=R 	JXZ	4B	   ;	IF(R==0) GO <P4> 	CMPA	PRIME,3  ;<P7> COMPARISON=(Q>PRIME(K)) 	INC3	1	   ;<P8> GO TO NEXT K 	JG	6B	   ; IF COMPARISON GREATER,GO<P6>  	JMP	2B	   ;	ELSE N IS PRIME! 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE (Address 0)    rIA (Address 0 + rI2)    rX
Algorithm P Implementation getPrime 2H	INC1	1	   	;<P2> N IS PRIME! J=J+1 	ST2	PRIME+L,1	;	PRIME(J)=N 	J1Z	2F	   ;<P3> IS FIND 500? 4H	INC2	2	   ;<P4> GO TO NEXT N 	ENT3	2	   ;<P5> K=2 6H	ENTA	0	   ;<P6> PRIME(K)/N? 	ENTX	0,2	   ;	RAX=N DIV	PRIME,3	   ;	RA=Q , RX=R JXZ	4B	   ;	IF(R==0) GO <P4> 	CMPA	PRIME,3  ;<P7> COMPARISON=(Q>PRIME(K)) 	INC3	1	   ;<P8> GO TO NEXT K 	JG	6B	   ; IF COMPARISON GREATER,GO<P6>  	JMP	2B	   ;	ELSE N IS PRIME! 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE rX / (Address PRIME + rI3) rX / (Address -1 + rI3) 계산결과의 몫    rA 계산결과의 나머지    rX
Algorithm P Implementation getPrime 2H	INC1	1	   	;<P2> N IS PRIME! J=J+1 	ST2	PRIME+L,1	;	PRIME(J)=N 	J1Z	2F	   ;<P3> IS FIND 500? 4HINC2	2	   ;<P4> GO TO NEXT N 	ENT3	2	   ;<P5> K=2 6H	ENTA	0	   ;<P6> PRIME(K)/N? 	ENTX	0,2	   ;	RAX=N 	DIV	PRIME,3	   ;	RA=Q , RX=R 	JXZ	4B	   ;	IF(R==0) GO <P4> CMPA	PRIME,3  ;<P7> COMPARISON=(Q>PRIME(K)) 	INC3	1	   ;<P8> GO TO NEXT K 	JG	6B	   ; IF COMPARISON GREATER,GO<P6>  	JMP	2B	   ;	ELSE N IS PRIME! 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE rX가 zero 이면 4B 로 Jump
Algorithm P Implementation getPrime 2H	INC1	1	   	;<P2> N IS PRIME! J=J+1 	ST2	PRIME+L,1	;	PRIME(J)=N 	J1Z	2F	   ;<P3> IS FIND 500? 4H	INC2	2	   ;<P4> GO TO NEXT N 	ENT3	2	   ;<P5> K=2 6H	ENTA	0	   ;<P6> PRIME(K)/N? 	ENTX	0,2	   ;	RAX=N 	DIV	PRIME,3	   ;	RA=Q , RX=R 	JXZ	4B	   ;	IF(R==0) GO <P4> 	CMPA	PRIME,3  ;<P7> COMPARISON=(Q>PRIME(K)) INC3	1	   ;<P8> GO TO NEXT K 	JG	6B	   ; IF COMPARISON GREATER,GO<P6>  	JMP	2B	   ;	ELSE N IS PRIME! 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE (Address PRIME + rI3)의 값 (Address -1 + rI3)의 값과 rIA 비교 			comparison
Algorithm P Implementation getPrime 2H	INC1	1	   	;<P2> N IS PRIME! J=J+1 	ST2	PRIME+L,1	;	PRIME(J)=N 	J1Z	2F	   ;<P3> IS FIND 500? 4H	INC2	2	   ;<P4> GO TO NEXT N 	ENT3	2	   ;<P5> K=2 6H	ENTA	0	   ;<P6> PRIME(K)/N? 	ENTX	0,2	   ;	RAX=N 	DIV	PRIME,3	   ;	RA=Q , RX=R 	JXZ	4B	   ;	IF(R==0) GO <P4> 	CMPA	PRIME,3  ;<P7> COMPARISON=(Q>PRIME(K)) 	INC3	1	   ;<P8> GO TO NEXT K JG	6B	   ; IF COMPARISON GREATER,GO<P6>  	JMP	2B	   ;	ELSE N IS PRIME! 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE rI3 를 1 만큼 increase
Algorithm P Implementation getPrime 2HINC1	1	   	;<P2> N IS PRIME! J=J+1 	ST2	PRIME+L,1	;	PRIME(J)=N 	J1Z	2F	   ;<P3> IS FIND 500? 4H	INC2	2	   ;<P4> GO TO NEXT N 	ENT3	2	   ;<P5> K=2 6HENTA	0	   ;<P6> PRIME(K)/N? 	ENTX	0,2	   ;	RAX=N 	DIV	PRIME,3	   ;	RA=Q , RX=R 	JXZ	4B	   ;	IF(R==0) GO <P4> 	CMPA	PRIME,3  ;<P7> COMPARISON=(Q>PRIME(K)) 	INC3	1	   ;<P8> GO TO NEXT K JG	6B	   ; IF COMPARISON GREATER,GO<P6>  	JMP	2B	   ;	ELSE N IS PRIME! 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE Comparison 이 Greator이면 6B 로 Jump 아니면 2B 로 Jump
Let’s assemble & run!
Algorithm P Print
Algorithm P Print P9. [제목출력]  프린터를 다음 페이지로 넘긴다 	BUFFER[0] 을 제목줄로 설정하고 그 줄을 출력 	B=1, M=1 P10. [행 설정]  	PRIME[M], PRIME[50+M],…,PRIME[450+M] 을 	BUFFER[B] 에 적절한 서식으로 집어넣는다 P11. [행 출력]  	BUFFER[B] 를 출력 	B=1-B (다른 버퍼로 전환) 	M++ 	IF(M<=50), GOTO P10
Algorithm P Implementation 2000 2001 2010 2009 BUF0 PRINTER PRIME BUF1 2025 2026 2035 2034
Algorithm P Implementation Print 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE 	ENT4	BUF1+10	   ;	B=1 	ENT5	-50	   ;	M=0 2H	INC5	L+1	   ;	M(451,401,351,301,251,201,151,101,51,1) 4H	LDA	PRIME,5	   ;<P10> SET THE ROW 	CHAR		   	STX	0,4(1:4) 	DEC4	1 	DEC5	50	   ;RI5= RI5 - 50 	J5P	4B	    	OUT	0,4(PRINTER)   ;<P11> PRINT THE ROWS 	LD4	24,4	   ;	CHANGE BUFFER 	J5N	2B	   ;	IF( RI5==0 ) END! 	HLT
Algorithm P Implementation Print 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE ENT4	BUF1+10	   ;	B=1 	ENT5	-50	   ;	M=0 2H	INC5	L+1	   ;	M … TITLE	ALF	FIRST 	ALF	 FIVE 	ALF	 HUND 	ALF	RED P 	ALF	RIMES ORIG	BUF0+24 	CON	BUF1+10 	ORIG	BUF1+24 	CON	BUF0+10 	END	START TITLE 을 PRINTER 에 출력
Algorithm P Implementation Print 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE 	ENT4	BUF1+10	   ;	B=1 ENT5	-50	   ;	M=0 2H	INC5	L+1	   ;	M 4H	LDA	PRIME,5  ;<P10> SET THE ROW 	CHAR		   	STX	0,4(1:4) 	DEC4	1 	DEC5	50	   ;RI5= RI5 - 50 	J5P	4B	    	OUT	0,4(PRINTER)   ;<P11> PRINT THE ROWS 	LD4	24,4	   ;	CHANGE BUFFER 	J5N	2B	   ;	IF( RI5==0 ) END! 	HLT (Address BUF1+10) (Address BUF0+25+10) (Address 2000+25+10)    rI4 (Address -50)    rI5
Algorithm P Implementation Print 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE 	ENT4	BUF1+10	   ;	B=1 	ENT5	-50	   ;	M=0 2H	INC5	L+1	   ;	M(451,401,351,301,251,201,151,101,51,1) 4H	LDA	PRIME,5  ;<P10> SET THE ROW 	CHAR		   	STX	0,4(1:4) 	DEC4	1 	DEC5	50	   ;RI5= RI5 - 50 	J5P	4B	    	OUT	0,4(PRINTER)   ;<P11> PRINT THE ROWS 	LD4	24,4	   ;	CHANGE BUFFER 	J5N	2B	   ;	IF( RI5==0 ) END! 	HLT rI5 를 L+1 만큼 rI5 를 500+1 만큼 increase
Algorithm P Implementation Print 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE 	ENT4	BUF1+10	   ;	B=1 	ENT5	-50	   ;	M=0 2H	INC5	L+1	   ;	M 4H	LDA	PRIME,5  ;<P10> SET THE ROW CHAR		   	STX	0,4(1:4) 	DEC4	1 	DEC5	50	   ;RI5= RI5 - 50 	J5P	4B	    	OUT	0,4(PRINTER)   ;<P11> PRINT THE ROWS 	LD4	24,4	   ;	CHANGE BUFFER 	J5N	2B	   ;	IF( RI5==0 ) END! 	HLT (Address PRIME + rI5)의 값 (Address -1 + rI3)의 값rIA
Algorithm P Implementation Print 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE 	ENT4	BUF1+10	   ;	B=1 	ENT5	-50	   ;	M=0 2H	INC5	L+1	   ;	M 4H	LDA	PRIME,5  ;<P10> SET THE ROW CHAR	 STX	0,4(1:4) 	DEC4	1 	DEC5	50	   ;RI5= RI5 - 50 	J5P	4B	    	OUT	0,4(PRINTER)   ;<P11> PRINT THE ROWS 	LD4	24,4	   ;	CHANGE BUFFER 	J5N	2B	   ;	IF( RI5==0 ) END! 	HLT rA를 문자열로 변환
Algorithm P Implementation Print 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE 	ENT4	BUF1+10	   ;	B=1 	ENT5	-50	   ;	M=0 2H	INC5	L+1	   ;	M 4H	LDA	PRIME,5  ;<P10> SET THE ROW 	CHAR	 	STX	0,4(1:4) DEC4	1 	DEC5	50	   ;RI5= RI5 - 50 	J5P	4B	    	OUT	0,4(PRINTER)   ;<P11> PRINT THE ROWS 	LD4	24,4	   ;	CHANGE BUFFER 	J5N	2B	   ;	IF( RI5==0 ) END! 	HLT rX의 (1:4)(Address 0 + rI4)
Algorithm P Implementation Print 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE 	ENT4	BUF1+10	   ;	B=1 	ENT5	-50	   ;	M=0 2H	INC5	L+1	   ;	M 4H	LDA	PRIME,5  ;<P10> SET THE ROW 	CHAR		   	STX	0,4(1:4) DEC4	1 	DEC5	50	   ;RI5= RI5 - 50 J5P	4B	    	OUT	0,4(PRINTER)   ;<P11> PRINT THE ROWS 	LD4	24,4	   ;	CHANGE BUFFER 	J5N	2B	   ;	IF( RI5==0 ) END! 	HLT rI4 를 1 만큼 decrease rI5 를 50 만큼 decrease
Algorithm P Implementation Print 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE 	ENT4	BUF1+10	   ;	B=1 	ENT5	-50	   ;	M=0 2H	INC5	L+1	   ;	M 4HLDA	PRIME,5  ;<P10> SET THE ROW 	CHAR		   	STX	0,4(1:4) 	DEC4	1 	DEC5	50	   ;RI5= RI5 - 50 	J5P	4B	    OUT	0,4(PRINTER)   ;<P11> PRINT THE ROWS 	LD4	24,4	   ;	CHANGE BUFFER 	J5N	2B	   ;	IF( RI5==0 ) END! 	HLT rI5 가 positive 이면 4B 로 Jump
Algorithm P Implementation Print 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE 	ENT4	BUF1+10	   ;	B=1 	ENT5	-50	   ;	M=0 2H	INC5	L+1	   ;	M 4H	LDA	PRIME,5  ;<P10> SET THE ROW 	CHAR		   	STX	0,4(1:4) 	DEC4	1 	DEC5	50	   ;RI5= RI5 - 50 	J5P	4B	 	OUT	0,4(PRINTER)   ;<P11> PRINT THE ROWS LD4	24,4	   ;	CHANGE BUFFER 	J5N	2B	   ;	IF( RI5==0 ) END! 	HLT (Address 0 + rI4)의 값 을 출력
Algorithm P Implementation Print 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE 	ENT4	BUF1+10	   ;	B=1 	ENT5	-50	   ;	M=0 2H	INC5	L+1	   ;	M 4H	LDA	PRIME,5  ;<P10> SET THE ROW 	CHAR		   	STX	0,4(1:4) 	DEC4	1 	DEC5	50	   ;RI5= RI5 - 50 	J5P	4B	    	OUT	0,4(PRINTER)   ;<P11> PRINT THE ROWS 	LD4	24,4	   ;	CHANGE BUFFER J5N	2B	   ;	IF( RI5==0 ) END! 	HLT (Address 24 + rI4)의 값    rI4
Algorithm P Implementation Print 2H	OUT	TITLE(PRINTER) ;<P9> PRINT TITLE 	ENT4	BUF1+10	   ;	B=1 	ENT5	-50	   ;	M=0 2HINC5	L+1	   ;	M 4H	LDA	PRIME,5  ;<P10> SET THE ROW 	CHAR		   	STX	0,4(1:4) 	DEC4	1 	DEC5	50	   ;RI5= RI5 - 50 	J5P	4B	    	OUT	0,4(PRINTER)   ;<P11> PRINT THE ROWS 	LD4	24,4	   ;	CHANGE BUFFER 	J5N	2B	   ;	IF( RI5==0 ) END! HLT rI5 가 negative 이면 2B 로 Jump
Let’s assemble & run!
MIXAL 언어를 정의하는 비교적 소수의 규칙들 Rules 기호는 1~10개의 영문자들과 숫자로 구성된 문자열. 적어도 영문자가 하나는 존재해야한다. 	ex) PRIME, TEMP, 20BY20 단 dH, dF, dB 는 고유한 기호로 취급 2. 수. 1~10개의 숫자 	ex) 00052 3. 한 기호의 출현은 정의된 기호defined symbol  	or 향후 참조future reference
MIXAL 언어를 정의하는 비교적 소수의 규칙들 Rules 4. 단위 표현식atomic expression 하나의 수, 하나의 정의된 기호, 별표 5. 표현식expression 하나의 단위 표현식, + - 기호 다음에 하나의 단위 표현식이 붙은 것, 표현식 이항연산자 표현식 한 표현식안의 연산들은 왼쪽에서 오른쪽 순서로 수행 	-1+5*20/6   4*20/6 -> 80/6 -> 13 6. A 부분 하나의 표현식, 하나의 향후참조, 하나의 리터럴 상수
Rules 소수의 규칙들 7. 색인 부분 없음, 쉼표 다음에 표현식 하나 8. F 부분 없음, 왼쪽괄호 다음에 표현식하나 다음에 오른쪽 괄호 9. W 값 표현식 하나 다음에 하나의 F 부분 10. Location counter 어셈블리 공정에 사용, 초기에는 0, 음이 아닌 값.
Rules 소수의 규칙들 11. OP 	MIX 연산자, MIXAL Directive 12. Literal constant 	10개 미만의 문자들로 된 W 값의 경우 = 기호로 감싸서 지정. 어셈블러는 내부적으로 새 기호를 만들고, 그 기호를 정의하는 CON 줄을 END 줄 바로 전에 삽입한다. 13. 동치값 모든 기호는 각자 고유하고 유일한 하나의 동치 값을 가진다.
Reference MIX MDKhttp://www.gnu.org/software/mdk/mdk.html MIX Builder http://www.menees.com/MIXBuilder.htm
감사합니다

Contenu connexe

Plus de hyun soomyung

Scalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed SystemsScalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed Systemshyun soomyung
 
Dependency Breaking Techniques
Dependency Breaking TechniquesDependency Breaking Techniques
Dependency Breaking Techniqueshyun soomyung
 
아꿈사 매니저소개
아꿈사 매니저소개아꿈사 매니저소개
아꿈사 매니저소개hyun soomyung
 
HTML5 & CSS3 - Video,Audio
HTML5 & CSS3 - Video,AudioHTML5 & CSS3 - Video,Audio
HTML5 & CSS3 - Video,Audiohyun soomyung
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Designhyun soomyung
 
Design Pattern - Multithread Ch10
Design Pattern - Multithread Ch10Design Pattern - Multithread Ch10
Design Pattern - Multithread Ch10hyun soomyung
 
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)hyun soomyung
 
프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장hyun soomyung
 
[페차쿠차] 배움의 기술
[페차쿠차] 배움의 기술[페차쿠차] 배움의 기술
[페차쿠차] 배움의 기술hyun soomyung
 
실전 윈도우 디버깅. Ch3. 디버거 해부
실전 윈도우 디버깅. Ch3. 디버거 해부실전 윈도우 디버깅. Ch3. 디버거 해부
실전 윈도우 디버깅. Ch3. 디버거 해부hyun soomyung
 
xUnitTestPattern/chapter8
xUnitTestPattern/chapter8xUnitTestPattern/chapter8
xUnitTestPattern/chapter8hyun soomyung
 
예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법hyun soomyung
 
프로그램은 왜 실패하는가?
프로그램은 왜 실패하는가?프로그램은 왜 실패하는가?
프로그램은 왜 실패하는가?hyun soomyung
 
5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)hyun soomyung
 

Plus de hyun soomyung (20)

Scalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed SystemsScalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed Systems
 
Dependency Breaking Techniques
Dependency Breaking TechniquesDependency Breaking Techniques
Dependency Breaking Techniques
 
아꿈사 매니저소개
아꿈사 매니저소개아꿈사 매니저소개
아꿈사 매니저소개
 
HTML5 & CSS3 - Video,Audio
HTML5 & CSS3 - Video,AudioHTML5 & CSS3 - Video,Audio
HTML5 & CSS3 - Video,Audio
 
Hybrid app
Hybrid appHybrid app
Hybrid app
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
MapReduce
MapReduceMapReduce
MapReduce
 
MongoDB
MongoDBMongoDB
MongoDB
 
Design Pattern - Multithread Ch10
Design Pattern - Multithread Ch10Design Pattern - Multithread Ch10
Design Pattern - Multithread Ch10
 
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
 
Clojure Chapter.6
Clojure Chapter.6Clojure Chapter.6
Clojure Chapter.6
 
프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장
 
[페차쿠차] 배움의 기술
[페차쿠차] 배움의 기술[페차쿠차] 배움의 기술
[페차쿠차] 배움의 기술
 
실전 윈도우 디버깅. Ch3. 디버거 해부
실전 윈도우 디버깅. Ch3. 디버거 해부실전 윈도우 디버깅. Ch3. 디버거 해부
실전 윈도우 디버깅. Ch3. 디버거 해부
 
xUnitTestPattern/chapter8
xUnitTestPattern/chapter8xUnitTestPattern/chapter8
xUnitTestPattern/chapter8
 
예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법
 
프로그램은 왜 실패하는가?
프로그램은 왜 실패하는가?프로그램은 왜 실패하는가?
프로그램은 왜 실패하는가?
 
Erlang
ErlangErlang
Erlang
 
5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)
 
이산수학 Ch.5
이산수학 Ch.5이산수학 Ch.5
이산수학 Ch.5
 

Dernier

Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 

Dernier (6)

Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 

The Art of Computer Programming 1.3.2 MIXAL

  • 1. The Art of Computer Programming1.3.2 MIXAL 아키텍트를 꿈꾸는 사람들cafe.naver.com/architect1 현수명 soomong.net #soomong
  • 2. MIXAL? MIXAL Structure MIXAL Example Hello World Algorithm M Algorithm P Rules
  • 3. MIXAL MIXAL? MIX Assembly Language MIX Assembly Languaue MIX Assembler MIX Machine Languaue
  • 4. MIXAL Structure Label : 기호는 1~10개의 영문자들과 숫자로 구성되는 문자열 MNEMONIC : MIX instruction set 이나 pseudo instruction ADDRESS : 평가되는 주소 INDEX : 평가되는 index. 기본값은 0. ADDRESS 가 있어야만 사용가능 MOD : instruction 의 mod COMMENT : 설명
  • 5. MIXAL Structure Address M 계산법 (index 처리가 끝난 주소) I=0 일 경우 M 주소는 ±AA I=1~6 일 경우 M 주소는 ±AA 와rI1~6의 내용을 대수적으로 더한 결과
  • 7. Operation 의 주소 MIXAL 소스코드 어셈블된 Machine Language 몇번실행되었는가? profile
  • 8. MIXAL Hello World * PROGRAM FOR ANDSTUDY. HELLO MIXAL WORLD PRINTER EQU 18 ORIG 3000 START OUT TEXT(PRINTER) HLT TEXT ALF HELLO ALF MIXA ALF L WOR ALF LD END START
  • 9. MIXAL Hello World * PROGRAM FOR ANDSTUDY. HELLO MIXAL WORLD PRINTER EQU 18 ORIG 3000 START OUT TEXT(PRINTER) HLT TEXT ALF HELLO ALF MIXA ALF L WOR ALF LD END START 주석! * 로 시작 어셈블된 프로그램에 전혀 영향을 미치지 않는다
  • 10. MIXAL Directives ORIG EQU CON ALF END * PROGRAM FOR ANDSTUDY. HELLO MIXAL WORLD PRINTER EQU 18 ORIG 3000 START OUT TEXT(PRINTER) HLT TEXT ALF HELLO ALF MIXA ALF L WOR ALF LD END START EQU 동치! 기호 PRINTER 와 수18은 동치equivalent이다. 유사연산pseudo-operation
  • 11. MIXAL Directives ORIG EQU CON ALF END * PROGRAM FOR ANDSTUDY. HELLO MIXAL WORLD PRINTER EQU 18 ORIG 3000 START OUT TEXT(PRINTER) HLT TEXT ALF HELLO ALF MIXA ALF L WOR ALF LD END START ORIG 이후 instruction 의 주소를지정. 3000부터 차례로 증가함을 의미. 유사연산pseudo-operation
  • 12. * PROGRAM FOR ANDSTUDY. HELLO MIXAL WORLD PRINTER EQU 18 ORIG 3000 START OUT TEXT(PRINTER) HLT TEXT ALF HELLO ALF MIXA ALF L WOR ALF LD END START OUT TEXT PRINTER ADDRESS 는 TEXT MOD 는 (PRINTER)
  • 13. * PROGRAM FOR ANDSTUDY. HELLO MIXAL WORLD PRINTER EQU 18 ORIG 3000 START OUT TEXT(PRINTER) HLT TEXT ALF HELLO ALF MIXA ALF L WOR ALF LD END START HLT 컴퓨터를 멈춘다!
  • 14. MIXAL Directives ORIG EQU CON ALF END * PROGRAM FOR ANDSTUDY. HELLO MIXAL WORLD PRINTER EQU 18 ORIG 3000 START OUT TEXT(PRINTER) HLT TEXT ALF HELLO ALF MIXA ALF L WOR ALF LD END START ALF MIX 영수문자 코드로 된 5byte 짜리 상수를 만든다.
  • 15. MIXAL Directives ORIG EQU CON ALF END * PROGRAM FOR ANDSTUDY. HELLO MIXAL WORLD PRINTER EQU 18 ORIG 3000 START OUT TEXT(PRINTER) HLT TEXT ALF HELLO ALF MIXA ALF L WOR ALF LD END START END MIXAL 프로그램의 마지막에는 항상 END 가 있다. 주소필드는 프로그램이 메모리에 적재 된 후 수행을 시작할 장소이다.
  • 17. Algorithm M 알고리즘 M (최대값 찾기) M1. [초기화] j=1 , k=n-1, m=X[n] M2. [모두 검사했는가?] if( k > 0 ) 알고리즘 종료! M3. [비교] if( X[k] <= m ) 이면 M5 로 간다 M4. [m변경] j=k, m=X[k] (m은 새로운 현재 최대값) M5. [k감소] k-- , M2 로 간다
  • 18. Algorithm M Implementation rI1=n 최대값을 찾는 data 비교 rI3=k M rA=m 최대값 J rI2=j 최대값의 index
  • 19. Algorithm M Implementation * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X EQU 1000 ORIG 3000 MAXIMUM STJ EXIT ;SUBROUTINE LINKAGE INIT ENT3 0,1 ;M1: INITIALIZE K = N JMP CHANGEM ;J = N,M = X(N),K = N-1 LOOP CMPA X,3 ;M3: COMPARE JGE *+3 CHANGEM ENT2 0,3 ;M4: CHANGE M. J = K LDA X,3 ;M = X(K) DEC3 1 ;M5: DECREASE K J3P LOOP ;M2: ALL TESTED? EXIT JMP * ;RETURN TO MAIN PROGRAM
  • 20. Algorithm M Implementation * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X EQU 1000 ORIG 3000 MAXIMUM STJ EXIT ;SUBROUTINE LINKAGE INIT ENT3 0,1 ;M1: INITIALIZE K = N JMP CHANGEM ;J = N,M = X(N),K = N-1 LOOP CMPA X,3 ;M3: COMPARE JGE *+3 CHANGEM ENT2 0,3 ;M4: CHANGE M. J = K LDA X,3 ;M = X(K) DEC3 1 ;M5: DECREASE K J3P LOOP ;M2: ALL TESTED? EXIT JMP * ;RETURN TO MAIN PROGRAM Subroutine rJ(Address EXIT) 알고리즘M 은이렇게 호출될것임! ENT1 100 JMP MAXIMUM STA MAX
  • 21. Algorithm M Implementation * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X EQU 1000 ORIG 3000 MAXIMUM STJ EXIT ;SUBROUTINE LINKAGE INIT ENT3 0,1 ;M1: INITIALIZE K = N JMP CHANGEM ;J = N,M = X(N),K = N-1 LOOP CMPA X,3 ;M3: COMPARE JGE *+3 CHANGEM ENT2 0,3 ;M4: CHANGE M. J = K LDA X,3 ;M = X(K) DEC3 1 ;M5: DECREASE K J3P LOOP ;M2: ALL TESTED? EXIT JMP * ;RETURN TO MAIN PROGRAM (Address 0 + rI1) rI3
  • 22. Algorithm M Implementation * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X EQU 1000 ORIG 3000 MAXIMUM STJ EXIT ;SUBROUTINE LINKAGE INIT ENT3 0,1 ;M1: INITIALIZE K = N JMP CHANGEM ;J = N,M = X(N),K = N-1 LOOP CMPA X,3 ;M3: COMPARE JGE *+3 CHANGEM ENT2 0,3 ;M4: CHANGE M. J = K LDA X,3 ;M = X(K) DEC3 1 ;M5: DECREASE K J3P LOOP ;M2: ALL TESTED? EXIT JMP * ;RETURN TO MAIN PROGRAM 아무런 조건 없이 CHANGEM 으로 Jump
  • 23. Algorithm M Implementation * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X EQU 1000 ORIG 3000 MAXIMUM STJ EXIT ;SUBROUTINE LINKAGE INIT ENT3 0,1 ;M1: INITIALIZE K = N JMP CHANGEM ;J = N,M = X(N),K = N-1 LOOP CMPA X,3 ;M3: COMPARE JGE *+3 CHANGEM ENT2 0,3 ;M4: CHANGE M. J = K LDA X,3 ;M = X(K) DEC3 1 ;M5: DECREASE K J3P LOOP ;M2: ALL TESTED? EXIT JMP * ;RETURN TO MAIN PROGRAM (Address X + rI3)의 값 (Address 1000 + rI3)의 값과 rIA 비교 comparison
  • 24. Algorithm M Implementation Self *는 자신self 라고 읽으며 현재 명령이 있는 메모리 장소를 의미 현재 3004이면 *+3 은 3007 * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X EQU 1000 ORIG 3000 MAXIMUM STJ EXIT ;SUBROUTINE LINKAGE INIT ENT3 0,1 ;M1: INITIALIZE K = N JMP CHANGEM ;J = N,M = X(N),K = N-1 LOOP CMPA X,3 ;M3: COMPARE JGE *+3 CHANGEM ENT2 0,3 ;M4: CHANGE M. J = K LDA X,3 ;M = X(K) DEC3 1 ;M5: DECREASE K J3P LOOP ;M2: ALL TESTED? EXIT JMP * ;RETURN TO MAIN PROGRAM Comparison 이 Greator or Equal 이면 Jump
  • 25. Algorithm M Implementation * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X EQU 1000 ORIG 3000 MAXIMUM STJ EXIT ;SUBROUTINE LINKAGE INIT ENT3 0,1 ;M1: INITIALIZE K = N JMP CHANGEM ;J = N,M = X(N),K = N-1 LOOP CMPA X,3 ;M3: COMPARE JGE *+3 CHANGEM ENT2 0,3 ;M4: CHANGE M. J = K LDA X,3 ;M = X(K) DEC3 1 ;M5: DECREASE K J3P LOOP ;M2: ALL TESTED? EXIT JMP * ;RETURN TO MAIN PROGRAM (Address 0 + rI3) rI2
  • 26. Algorithm M Implementation * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X EQU 1000 ORIG 3000 MAXIMUM STJ EXIT ;SUBROUTINE LINKAGE INIT ENT3 0,1 ;M1: INITIALIZE K = N JMP CHANGEM ;J = N,M = X(N),K = N-1 LOOP CMPA X,3 ;M3: COMPARE JGE *+3 CHANGEM ENT2 0,3 ;M4: CHANGE M. J = K LDA X,3 ;M = X(K) DEC3 1 ;M5: DECREASE K J3P LOOP ;M2: ALL TESTED? EXIT JMP * ;RETURN TO MAIN PROGRAM (Address X + rI3)의 값 (Address 1000 + rI3)의 값rIA
  • 27. Algorithm M Implementation * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X EQU 1000 ORIG 3000 MAXIMUM STJ EXIT ;SUBROUTINE LINKAGE INIT ENT3 0,1 ;M1: INITIALIZE K = N JMP CHANGEM ;J = N,M = X(N),K = N-1 LOOP CMPA X,3 ;M3: COMPARE JGE *+3 CHANGEM ENT2 0,3 ;M4: CHANGE M. J = K LDA X,3 ;M = X(K) DEC3 1 ;M5: DECREASE K J3P LOOP ;M2: ALL TESTED? EXIT JMP * ;RETURN TO MAIN PROGRAM rI3 의 값을 1 decrease
  • 28. Algorithm M Implementation * PROGRAM M FROM SECTION 1.3.2 * RA=M, RI1=N, RI2=J, RI3=K X EQU 1000 ORIG 3000 MAXIMUM STJ EXIT ;SUBROUTINE LINKAGE INIT ENT3 0,1 ;M1: INITIALIZE K = N JMP CHANGEM ;J = N,M = X(N),K = N-1 LOOPCMPA X,3 ;M3: COMPARE JGE *+3 CHANGEM ENT2 0,3 ;M4: CHANGE M. J = K LDA X,3 ;M = X(K) DEC3 1 ;M5: DECREASE K J3P LOOP ;M2: ALL TESTED? EXIT JMP * ;RETURN TO MAIN PROGRAM rI3 가 positive 이면 LOOP 로!
  • 32. Algorithm P getPrime P1. [표를 시작] PRIME[1]=2, N=3, J=1 P2. [N은 소수] J++, PRIME[J]=N P3. [500개를 찾았는가?] IF(J==500), GOTO P9 P4. [다음N으로] N=N+2 P5. [K=2] K=2 P6. [PRIME[K]?] N 을 PRIME[K]로 나눈다. 몫은Q, 나머지는R IF(R==0), 소수가 아니므로 GOTO P4 P7. [PRIME[K]가 큰가?] IF(Q<=PRIME[K]),이경우 반드시 소수이므로 GOTO P2 P8. [다음K로] K++, GOTO P6
  • 33. Algorithm P Implementation getPrime Memory J N rI2=n rI1=j 소수후보들 K rI3=k 소수를 만들기위해 나눠보는 아이들
  • 34. Algorithm P Implementation Initial table & buffers * INITIAL CONTENTS OF TABLES AND BUFFERS ORIG PRIME+1 CON 2 ORIG BUF0-5 TITLE ALF FIRST ALF FIVE ALF HUND ALF RED P ALF RIMES ORIG BUF0+24 CON BUF1+10 ORIG BUF1+24 CON BUF0+10 END START 상수 2를 (Address PRIME+1)에 정의 상수 2를 (Address -1+1)에 정의
  • 35. Algorithm P Implementation Initial table & buffers * INITIAL CONTENTS OF TABLES AND BUFFERS ORIG PRIME+1 CON 2 ORIG BUF0-5 TITLE ALF FIRST ALF FIVE ALF HUND ALF RED P ALF RIMES ORIG BUF0+24 CON BUF1+10 ORIG BUF1+24 CON BUF0+10 END START TITLE 문자열 정의
  • 36. Algorithm P Implementation Initial table & buffers * INITIAL CONTENTS OF TABLES AND BUFFERS ORIG PRIME+1 CON 2 ORIG BUF0-5 TITLE ALF FIRST ALF FIVE ALF HUND ALF RED P ALF RIMES ORIG BUF0+24 CON BUF1+10 ORIG BUF1+24 CON BUF0+10 END START 두 버퍼는 각자 상대 버퍼를 가리킨다
  • 37. Algorithm P Implementation getPrime * EXAMPLE PROGRAM ... TABLE OF PRIMES * RI1=J-500, RI2=N, RI3=K, RI4=B, RI5=M+50S L EQU 500 PRINTER EQU 18 PRIME EQU -1 BUF0 EQU 2000 BUF1 EQU BUF0+25 ORIG 3000 START IOC 0(PRINTER) ;NEW PAGE LD1 =1-L= ;<P1> J=1 LD2 =3= ; N=3 2H INC1 1 ;<P2> N IS PRIME! J=J+1 ST2 PRIME+L,1 ; PRIME(J)=N J1Z 2F ;<P3> IS FIND 500? 4H INC2 2 ;<P4> GO TO NEXT N ENT3 2 ;<P5> K=2 6H ENTA 0 ;<P6> PRIME(K)/N? ENTX 0,2 ; RAX=N DIV PRIME,3 ; RA=Q , RX=R JXZ 4B ; IF(R==0) GO <P4> CMPA PRIME,3 ;<P7> COMPARISON = ( Q > PRIME(K) ) INC3 1 ;<P8> GO TO NEXT K JG 6B ; IF COMPARISON GREATER , GO TO <P6> JMP 2B ; ELSE N IS PRIME!
  • 38. Algorithm P Implementation getPrime * EXAMPLE PROGRAM ... TABLE OF PRIMES * RI1=J-500, RI2=N, RI3=K, RI4=B, RI5=M+50S L EQU 500 PRINTER EQU 18 PRIME EQU -1 BUF0 EQU 2000 BUF1 EQU BUF0+25 ORIG 3000 START IOC 0(PRINTER) ;NEW PAGE LD1 =1-L= ;<P1> J=1 LD2 =3= ; N=3 … MIX directive 인 EQU 에도 연산가능
  • 39. Algorithm P Implementation getPrime * EXAMPLE PROGRAM ... TABLE OF PRIMES * RI1=J-500, RI2=N, RI3=K, RI4=B, RI5=M+50S L EQU 500 PRINTER EQU 18 PRIME EQU -1 BUF0 EQU 2000 BUF1 EQU BUF0+25 ORIG 3000 START IOC 0(PRINTER) ;NEW PAGE LD1 =1-L= ;<P1> J=1 LD2 =3= ; N=3 … 지정된 유닛PRINTER 가 준비상태가 아니면 기다렸다가 수행 PRINTER 를 다음 page 최상위로 넘긴다
  • 40. Algorithm P Implementation getPrime * EXAMPLE PROGRAM ... TABLE OF PRIMES * RI1=J-500, RI2=N, RI3=K, RI4=B, RI5=M+50S L EQU 500 PRINTER EQU 18 PRIME EQU -1 BUF0 EQU 2000 BUF1 EQU BUF0+25 ORIG 3000 START IOC 0(PRINTER) ;NEW PAGE LD1 =1-L= ;<P1> J=1 LD2 =3= ; N=3 … Literal constant 리터럴상수. 어셈블러는 자동으로 내부이름을 생성하고 적절한 CON 절을 삽입해준다. 상수 1-L 즉 1-500 rI1 상수 3 rI2 MIX Assembler
  • 41. Algorithm P Implementation getPrime 2H INC1 1 ;<P2> N IS PRIME! J=J+1 ST2 PRIME+L,1 ; PRIME(J)=N J1Z2F ;<P3> IS FIND 500? 4HINC2 2 ;<P4> GO TO NEXT N ENT3 2 ;<P5> K=2 6HENTA 0 ;<P6> PRIME(K)/N? ENTX 0,2 ; RAX=N DIV PRIME,3 ; RA=Q , RX=R JXZ 4B ; IF(R==0) GO <P4> CMPA PRIME,3 ;<P7> COMPARISON=(Q>PRIME(K)) INC3 1 ;<P8> GO TO NEXT K JG 6B ; IF COMPARISON GREATER,GO<P6> JMP 2B ; ELSE N IS PRIME! 2HOUT TITLE(PRINTER) ;<P9> PRINT TITLE Local symbol 원하는만큼 여러번 재정의가능한 특별한 기호. dB : 가장 가까운 이전장소dH dF : 가장 가까운 이후장소 dH (d 는 한자리 숫자)
  • 42. Algorithm P Implementation getPrime 2H INC1 1 ;<P2> N IS PRIME! J=J+1 ST2 PRIME+L,1 ; PRIME(J)=N J1Z 2F ;<P3> IS FIND 500? 4H INC2 2 ;<P4> GO TO NEXT N ENT3 2 ;<P5> K=2 6H ENTA 0 ;<P6> PRIME(K)/N? ENTX 0,2 ; RAX=N DIV PRIME,3 ; RA=Q , RX=R JXZ 4B ; IF(R==0) GO <P4> CMPA PRIME,3 ;<P7> COMPARISON=(Q>PRIME(K)) INC3 1 ;<P8> GO TO NEXT K JG 6B ; IF COMPARISON GREATER,GO<P6> JMP 2B ; ELSE N IS PRIME! 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE (Address PRIME+L + rI1)의 값 rI2 (Address -1+500 + rI3)
  • 43. Algorithm P Implementation getPrime 2H INC1 1 ;<P2> N IS PRIME! J=J+1 ST2 PRIME+L,1 ; PRIME(J)=N J1Z 2F ;<P3> IS FIND 500? 4H INC2 2 ;<P4> GO TO NEXT N ENT3 2 ;<P5> K=2 6H ENTA 0 ;<P6> PRIME(K)/N? ENTX 0,2 ; RAX=N DIV PRIME,3 ; RA=Q , RX=R JXZ 4B ; IF(R==0) GO <P4> CMPA PRIME,3 ;<P7> COMPARISON=(Q>PRIME(K)) INC3 1 ;<P8> GO TO NEXT K JG 6B ; IF COMPARISON GREATER,GO<P6> JMP 2B ; ELSE N IS PRIME! 2HOUT TITLE(PRINTER) ;<P9> PRINT TITLE rI1 이 zero 이면 2F 로 Jump
  • 44. Algorithm P Implementation getPrime 2H INC1 1 ;<P2> N IS PRIME! J=J+1 ST2 PRIME+L,1 ; PRIME(J)=N J1Z 2F ;<P3> IS FIND 500? 4H INC2 2 ;<P4> GO TO NEXT N ENT3 2 ;<P5> K=2 6H ENTA 0 ;<P6> PRIME(K)/N? ENTX 0,2 ; RAX=N DIV PRIME,3 ; RA=Q , RX=R JXZ 4B ; IF(R==0) GO <P4> CMPA PRIME,3 ;<P7> COMPARISON=(Q>PRIME(K)) INC3 1 ;<P8> GO TO NEXT K JG 6B ; IF COMPARISON GREATER,GO<P6> JMP 2B ; ELSE N IS PRIME! 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE rI2 를 2 만큼 increase
  • 45. Algorithm P Implementation getPrime 2H INC1 1 ;<P2> N IS PRIME! J=J+1 ST2 PRIME+L,1 ; PRIME(J)=N J1Z 2F ;<P3> IS FIND 500? 4H INC2 2 ;<P4> GO TO NEXT N ENT3 2 ;<P5> K=2 6H ENTA 0 ;<P6> PRIME(K)/N? ENTX 0,2 ; RAX=N DIV PRIME,3 ; RA=Q , RX=R JXZ 4B ; IF(R==0) GO <P4> CMPA PRIME,3 ;<P7> COMPARISON=(Q>PRIME(K)) INC3 1 ;<P8> GO TO NEXT K JG 6B ; IF COMPARISON GREATER,GO<P6> JMP 2B ; ELSE N IS PRIME! 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE (Address 2) rI3
  • 46. Algorithm P Implementation getPrime 2H INC1 1 ;<P2> N IS PRIME! J=J+1 ST2 PRIME+L,1 ; PRIME(J)=N J1Z 2F ;<P3> IS FIND 500? 4H INC2 2 ;<P4> GO TO NEXT N ENT3 2 ;<P5> K=2 6H ENTA 0 ;<P6> PRIME(K)/N? ENTX 0,2 ; RAX=N DIV PRIME,3 ; RA=Q , RX=R JXZ 4B ; IF(R==0) GO <P4> CMPA PRIME,3 ;<P7> COMPARISON=(Q>PRIME(K)) INC3 1 ;<P8> GO TO NEXT K JG 6B ; IF COMPARISON GREATER,GO<P6> JMP 2B ; ELSE N IS PRIME! 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE (Address 0) rIA (Address 0 + rI2) rX
  • 47. Algorithm P Implementation getPrime 2H INC1 1 ;<P2> N IS PRIME! J=J+1 ST2 PRIME+L,1 ; PRIME(J)=N J1Z 2F ;<P3> IS FIND 500? 4H INC2 2 ;<P4> GO TO NEXT N ENT3 2 ;<P5> K=2 6H ENTA 0 ;<P6> PRIME(K)/N? ENTX 0,2 ; RAX=N DIV PRIME,3 ; RA=Q , RX=R JXZ 4B ; IF(R==0) GO <P4> CMPA PRIME,3 ;<P7> COMPARISON=(Q>PRIME(K)) INC3 1 ;<P8> GO TO NEXT K JG 6B ; IF COMPARISON GREATER,GO<P6> JMP 2B ; ELSE N IS PRIME! 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE rX / (Address PRIME + rI3) rX / (Address -1 + rI3) 계산결과의 몫 rA 계산결과의 나머지 rX
  • 48. Algorithm P Implementation getPrime 2H INC1 1 ;<P2> N IS PRIME! J=J+1 ST2 PRIME+L,1 ; PRIME(J)=N J1Z 2F ;<P3> IS FIND 500? 4HINC2 2 ;<P4> GO TO NEXT N ENT3 2 ;<P5> K=2 6H ENTA 0 ;<P6> PRIME(K)/N? ENTX 0,2 ; RAX=N DIV PRIME,3 ; RA=Q , RX=R JXZ 4B ; IF(R==0) GO <P4> CMPA PRIME,3 ;<P7> COMPARISON=(Q>PRIME(K)) INC3 1 ;<P8> GO TO NEXT K JG 6B ; IF COMPARISON GREATER,GO<P6> JMP 2B ; ELSE N IS PRIME! 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE rX가 zero 이면 4B 로 Jump
  • 49. Algorithm P Implementation getPrime 2H INC1 1 ;<P2> N IS PRIME! J=J+1 ST2 PRIME+L,1 ; PRIME(J)=N J1Z 2F ;<P3> IS FIND 500? 4H INC2 2 ;<P4> GO TO NEXT N ENT3 2 ;<P5> K=2 6H ENTA 0 ;<P6> PRIME(K)/N? ENTX 0,2 ; RAX=N DIV PRIME,3 ; RA=Q , RX=R JXZ 4B ; IF(R==0) GO <P4> CMPA PRIME,3 ;<P7> COMPARISON=(Q>PRIME(K)) INC3 1 ;<P8> GO TO NEXT K JG 6B ; IF COMPARISON GREATER,GO<P6> JMP 2B ; ELSE N IS PRIME! 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE (Address PRIME + rI3)의 값 (Address -1 + rI3)의 값과 rIA 비교 comparison
  • 50. Algorithm P Implementation getPrime 2H INC1 1 ;<P2> N IS PRIME! J=J+1 ST2 PRIME+L,1 ; PRIME(J)=N J1Z 2F ;<P3> IS FIND 500? 4H INC2 2 ;<P4> GO TO NEXT N ENT3 2 ;<P5> K=2 6H ENTA 0 ;<P6> PRIME(K)/N? ENTX 0,2 ; RAX=N DIV PRIME,3 ; RA=Q , RX=R JXZ 4B ; IF(R==0) GO <P4> CMPA PRIME,3 ;<P7> COMPARISON=(Q>PRIME(K)) INC3 1 ;<P8> GO TO NEXT K JG 6B ; IF COMPARISON GREATER,GO<P6> JMP 2B ; ELSE N IS PRIME! 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE rI3 를 1 만큼 increase
  • 51. Algorithm P Implementation getPrime 2HINC1 1 ;<P2> N IS PRIME! J=J+1 ST2 PRIME+L,1 ; PRIME(J)=N J1Z 2F ;<P3> IS FIND 500? 4H INC2 2 ;<P4> GO TO NEXT N ENT3 2 ;<P5> K=2 6HENTA 0 ;<P6> PRIME(K)/N? ENTX 0,2 ; RAX=N DIV PRIME,3 ; RA=Q , RX=R JXZ 4B ; IF(R==0) GO <P4> CMPA PRIME,3 ;<P7> COMPARISON=(Q>PRIME(K)) INC3 1 ;<P8> GO TO NEXT K JG 6B ; IF COMPARISON GREATER,GO<P6> JMP 2B ; ELSE N IS PRIME! 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE Comparison 이 Greator이면 6B 로 Jump 아니면 2B 로 Jump
  • 54. Algorithm P Print P9. [제목출력] 프린터를 다음 페이지로 넘긴다 BUFFER[0] 을 제목줄로 설정하고 그 줄을 출력 B=1, M=1 P10. [행 설정] PRIME[M], PRIME[50+M],…,PRIME[450+M] 을 BUFFER[B] 에 적절한 서식으로 집어넣는다 P11. [행 출력] BUFFER[B] 를 출력 B=1-B (다른 버퍼로 전환) M++ IF(M<=50), GOTO P10
  • 55. Algorithm P Implementation 2000 2001 2010 2009 BUF0 PRINTER PRIME BUF1 2025 2026 2035 2034
  • 56. Algorithm P Implementation Print 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE ENT4 BUF1+10 ; B=1 ENT5 -50 ; M=0 2H INC5 L+1 ; M(451,401,351,301,251,201,151,101,51,1) 4H LDA PRIME,5 ;<P10> SET THE ROW CHAR STX 0,4(1:4) DEC4 1 DEC5 50 ;RI5= RI5 - 50 J5P 4B OUT 0,4(PRINTER) ;<P11> PRINT THE ROWS LD4 24,4 ; CHANGE BUFFER J5N 2B ; IF( RI5==0 ) END! HLT
  • 57. Algorithm P Implementation Print 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE ENT4 BUF1+10 ; B=1 ENT5 -50 ; M=0 2H INC5 L+1 ; M … TITLE ALF FIRST ALF FIVE ALF HUND ALF RED P ALF RIMES ORIG BUF0+24 CON BUF1+10 ORIG BUF1+24 CON BUF0+10 END START TITLE 을 PRINTER 에 출력
  • 58. Algorithm P Implementation Print 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE ENT4 BUF1+10 ; B=1 ENT5 -50 ; M=0 2H INC5 L+1 ; M 4H LDA PRIME,5 ;<P10> SET THE ROW CHAR STX 0,4(1:4) DEC4 1 DEC5 50 ;RI5= RI5 - 50 J5P 4B OUT 0,4(PRINTER) ;<P11> PRINT THE ROWS LD4 24,4 ; CHANGE BUFFER J5N 2B ; IF( RI5==0 ) END! HLT (Address BUF1+10) (Address BUF0+25+10) (Address 2000+25+10) rI4 (Address -50) rI5
  • 59. Algorithm P Implementation Print 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE ENT4 BUF1+10 ; B=1 ENT5 -50 ; M=0 2H INC5 L+1 ; M(451,401,351,301,251,201,151,101,51,1) 4H LDA PRIME,5 ;<P10> SET THE ROW CHAR STX 0,4(1:4) DEC4 1 DEC5 50 ;RI5= RI5 - 50 J5P 4B OUT 0,4(PRINTER) ;<P11> PRINT THE ROWS LD4 24,4 ; CHANGE BUFFER J5N 2B ; IF( RI5==0 ) END! HLT rI5 를 L+1 만큼 rI5 를 500+1 만큼 increase
  • 60. Algorithm P Implementation Print 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE ENT4 BUF1+10 ; B=1 ENT5 -50 ; M=0 2H INC5 L+1 ; M 4H LDA PRIME,5 ;<P10> SET THE ROW CHAR STX 0,4(1:4) DEC4 1 DEC5 50 ;RI5= RI5 - 50 J5P 4B OUT 0,4(PRINTER) ;<P11> PRINT THE ROWS LD4 24,4 ; CHANGE BUFFER J5N 2B ; IF( RI5==0 ) END! HLT (Address PRIME + rI5)의 값 (Address -1 + rI3)의 값rIA
  • 61. Algorithm P Implementation Print 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE ENT4 BUF1+10 ; B=1 ENT5 -50 ; M=0 2H INC5 L+1 ; M 4H LDA PRIME,5 ;<P10> SET THE ROW CHAR STX 0,4(1:4) DEC4 1 DEC5 50 ;RI5= RI5 - 50 J5P 4B OUT 0,4(PRINTER) ;<P11> PRINT THE ROWS LD4 24,4 ; CHANGE BUFFER J5N 2B ; IF( RI5==0 ) END! HLT rA를 문자열로 변환
  • 62. Algorithm P Implementation Print 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE ENT4 BUF1+10 ; B=1 ENT5 -50 ; M=0 2H INC5 L+1 ; M 4H LDA PRIME,5 ;<P10> SET THE ROW CHAR STX 0,4(1:4) DEC4 1 DEC5 50 ;RI5= RI5 - 50 J5P 4B OUT 0,4(PRINTER) ;<P11> PRINT THE ROWS LD4 24,4 ; CHANGE BUFFER J5N 2B ; IF( RI5==0 ) END! HLT rX의 (1:4)(Address 0 + rI4)
  • 63. Algorithm P Implementation Print 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE ENT4 BUF1+10 ; B=1 ENT5 -50 ; M=0 2H INC5 L+1 ; M 4H LDA PRIME,5 ;<P10> SET THE ROW CHAR STX 0,4(1:4) DEC4 1 DEC5 50 ;RI5= RI5 - 50 J5P 4B OUT 0,4(PRINTER) ;<P11> PRINT THE ROWS LD4 24,4 ; CHANGE BUFFER J5N 2B ; IF( RI5==0 ) END! HLT rI4 를 1 만큼 decrease rI5 를 50 만큼 decrease
  • 64. Algorithm P Implementation Print 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE ENT4 BUF1+10 ; B=1 ENT5 -50 ; M=0 2H INC5 L+1 ; M 4HLDA PRIME,5 ;<P10> SET THE ROW CHAR STX 0,4(1:4) DEC4 1 DEC5 50 ;RI5= RI5 - 50 J5P 4B OUT 0,4(PRINTER) ;<P11> PRINT THE ROWS LD4 24,4 ; CHANGE BUFFER J5N 2B ; IF( RI5==0 ) END! HLT rI5 가 positive 이면 4B 로 Jump
  • 65. Algorithm P Implementation Print 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE ENT4 BUF1+10 ; B=1 ENT5 -50 ; M=0 2H INC5 L+1 ; M 4H LDA PRIME,5 ;<P10> SET THE ROW CHAR STX 0,4(1:4) DEC4 1 DEC5 50 ;RI5= RI5 - 50 J5P 4B OUT 0,4(PRINTER) ;<P11> PRINT THE ROWS LD4 24,4 ; CHANGE BUFFER J5N 2B ; IF( RI5==0 ) END! HLT (Address 0 + rI4)의 값 을 출력
  • 66. Algorithm P Implementation Print 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE ENT4 BUF1+10 ; B=1 ENT5 -50 ; M=0 2H INC5 L+1 ; M 4H LDA PRIME,5 ;<P10> SET THE ROW CHAR STX 0,4(1:4) DEC4 1 DEC5 50 ;RI5= RI5 - 50 J5P 4B OUT 0,4(PRINTER) ;<P11> PRINT THE ROWS LD4 24,4 ; CHANGE BUFFER J5N 2B ; IF( RI5==0 ) END! HLT (Address 24 + rI4)의 값 rI4
  • 67. Algorithm P Implementation Print 2H OUT TITLE(PRINTER) ;<P9> PRINT TITLE ENT4 BUF1+10 ; B=1 ENT5 -50 ; M=0 2HINC5 L+1 ; M 4H LDA PRIME,5 ;<P10> SET THE ROW CHAR STX 0,4(1:4) DEC4 1 DEC5 50 ;RI5= RI5 - 50 J5P 4B OUT 0,4(PRINTER) ;<P11> PRINT THE ROWS LD4 24,4 ; CHANGE BUFFER J5N 2B ; IF( RI5==0 ) END! HLT rI5 가 negative 이면 2B 로 Jump
  • 69. MIXAL 언어를 정의하는 비교적 소수의 규칙들 Rules 기호는 1~10개의 영문자들과 숫자로 구성된 문자열. 적어도 영문자가 하나는 존재해야한다. ex) PRIME, TEMP, 20BY20 단 dH, dF, dB 는 고유한 기호로 취급 2. 수. 1~10개의 숫자 ex) 00052 3. 한 기호의 출현은 정의된 기호defined symbol or 향후 참조future reference
  • 70. MIXAL 언어를 정의하는 비교적 소수의 규칙들 Rules 4. 단위 표현식atomic expression 하나의 수, 하나의 정의된 기호, 별표 5. 표현식expression 하나의 단위 표현식, + - 기호 다음에 하나의 단위 표현식이 붙은 것, 표현식 이항연산자 표현식 한 표현식안의 연산들은 왼쪽에서 오른쪽 순서로 수행 -1+5*20/6 4*20/6 -> 80/6 -> 13 6. A 부분 하나의 표현식, 하나의 향후참조, 하나의 리터럴 상수
  • 71. Rules 소수의 규칙들 7. 색인 부분 없음, 쉼표 다음에 표현식 하나 8. F 부분 없음, 왼쪽괄호 다음에 표현식하나 다음에 오른쪽 괄호 9. W 값 표현식 하나 다음에 하나의 F 부분 10. Location counter 어셈블리 공정에 사용, 초기에는 0, 음이 아닌 값.
  • 72. Rules 소수의 규칙들 11. OP MIX 연산자, MIXAL Directive 12. Literal constant 10개 미만의 문자들로 된 W 값의 경우 = 기호로 감싸서 지정. 어셈블러는 내부적으로 새 기호를 만들고, 그 기호를 정의하는 CON 줄을 END 줄 바로 전에 삽입한다. 13. 동치값 모든 기호는 각자 고유하고 유일한 하나의 동치 값을 가진다.
  • 73. Reference MIX MDKhttp://www.gnu.org/software/mdk/mdk.html MIX Builder http://www.menees.com/MIXBuilder.htm