Download as pdf or txt
Download as pdf or txt
You are on page 1of 21

系統程式

程式開始
➝副程式READ➝副程式INLOOP➝主程式
➝副程式TEMPO➝主程式➝TEMP#0➝X#0➝副程式CLOOP➝主程式➝NUM1儲存TEMP
➝副程式TEMPO➝主程式➝TEMP#0➝X#3➝副程式CLOOP➝主程式➝NUM2儲存TEMP
➝副程式TEMPO➝主程式➝TEMP#0➝X#6➝副程式CLOOP➝主程式➝NUM3儲存TEMP
➝副程式TEMPO➝主程式➝TEMP#0➝X#9➝副程式CLOOP➝主程式➝NUM4儲存TEMP
➝副程式TEMPO➝主程式➝TEMP#0➝X#12➝副程式CLOOP➝主程式➝NUM5儲存TEMP
➝副程式TEMPO➝主程式➝TEMP#0➝X#15➝副程式CLOOP➝主程式➝NUM6儲存TEMP
➝副程式TEMPO➝主程式➝TEMP#0➝X#18➝副程式CLOOP➝主程式➝NUM7儲存TEMP
➝副程式TEMPO➝主程式➝TEMP#0➝X#21➝副程式CLOOP➝主程式➝NUM8儲存TEMP
➝TEMP儲存NUM1
➝副程式BINLOOP➝主程式➝BIN1儲存BINT
➝副程式BINLOOP➝主程式➝BIN2儲存BINT
➝副程式BINLOOP➝主程式➝BIN3儲存BINT
➝副程式BINLOOP➝主程式➝BIN4儲存BINT
➝副程式BINLOOP➝主程式➝BIN5儲存BINT
➝副程式BINLOOP➝主程式➝BIN6儲存BINT
➝副程式BINLOOP➝主程式➝BIN7儲存BINT
➝副程式BINLOOP➝主程式➝BIN8儲存BINT
輸出1
➝CTRLSWT儲存NUM1➝CTRLSW儲存CTRLSWT➝副程式OUTLOOP➝主程式
輸出2
➝COUNT#0
副程式ODDLOOP➝A#NUM1➝副程式COUNTADD
➝A#NUM1➝
➝A#NUM2➝副程式ODDLOOP➝A#NUM2➝副程式COUNTADD
➝A#NUM3➝副程式ODDLOOP➝A#NUM3➝副程式COUNTADD
➝A#NUM4➝副程式ODDLOOP➝A#NUM4➝副程式COUNTADD
➝A#NUM5➝副程式ODDLOOP➝A#NUM5➝副程式COUNTADD
➝A#NUM6➝副程式ODDLOOP➝A#NUM6➝副程式COUNTADD
➝A#NUM7➝副程式ODDLOOP➝A#NUM7➝副程式COUNTADD
➝A#NUM8➝副程式ODDLOOP➝A#NUM8➝副程式COUNTADD➝主程式
➝COUNT⽐較➝判斷⼤於#4➝迴圈OPEND➝其他➝迴圈CLOSED
➝副程式OUTLOOP➝主程式
輸出3
➝A#0➝A+NUM2➝A+NUM4➝A+NUM6➝A+NUM8➝TEMP儲存A
➝A#0➝A+NUM1➝A+NUM3➝A+NUM5➝A+NUM7
➝A⽐較➝判斷⼤於TEMP➝迴圈BELLR➝其他➝迴圈BELLF
➝副程式OUTLOOP➝主程式

系統程式 1
輸出4
⽐較➝判斷⼩於#1➝迴圈LIGHTN➝其他➝迴圈LIGHTF
➝BIN6
➝副程式OUTLOOP➝主程式
變數
➝檔案
➝暫存
➝數字
➝⼆進制
程式結束
程式開始
A2 START 4096

➝ 副程式READ➝副程式INLOOP➝主程式
FIRST JSUB READ

READ (X暫存器#0➝T暫存器#23)
READ LDX #0
LDT #23

INLOOP (TRYDEV➝READDEV➝儲存RECORD➝X+1➝判斷⼩於T#23)
INLOOP TD INDEV
JEQ INLOOP
RD INDEV
STCH RECORD,X
TIXR T
JLT INLOOP
RSUB

➝ 副程式
TEMPO➝ 主程式➝TEMP#0➝X#0➝副程式CLOOP➝主程式
➝NUM1 儲存TEMP
JSUB TEMPO

TEMPO (TEMP#0)
TEMPO LDA #0
STA TEMP
RSUB

LDX #0
JSUB CLOOP

系統程式 2
CLOOP(讀⼊RECORD➝RECORD-48➝RECORD*10➝RECORD儲存
TEMP➝X+1➝讀⼊RECORD➝RECORD-48➝RECORD+TEMP➝RECORD儲存
TEMP)

CLOOP LDCH RECORD,X


SUB #48
MUL #10
STA TEMP
TIX #0
LDCH RECORD,X
SUB #48
ADD TEMP
STA TEMP
RSUB

LDA TEMP
STA NUM1

➝ 副程式
TEMPO➝ 主程式➝TEMP#0➝X#3➝副程式CLOOP➝主程式
➝NUM2 儲存TEMP
JSUB TEMPO

TEMPO (TEMP#0)
TEMPO LDA #0
STA TEMP
RSUB

LDX #3
JSUB CLOOP

CLOOP (讀⼊RECORD➝RECORD-48➝RECORD*10➝RECORD儲存
TEMP➝X+1➝ 讀⼊RECORD➝RECORD-48➝RECORD+TEMP➝RECORD儲存

TEMP

CLOOP LDCH RECORD,X


SUB #48
MUL #10
STA TEMP
TIX #0
LDCH RECORD,X
SUB #48

系統程式 3
ADD TEMP
STA TEMP
RSUB

LDA TEMP
STA NUM2

➝ 副程式
TEMPO➝ 主程式➝TEMP#0➝X#6➝副程式CLOOP➝主程式
➝NUM3 儲存TEMP
JSUB TEMPO

TEMPO (TEMP#0)
TEMPO LDA #0
STA TEMP
RSUB

LDX #6
JSUB CLOOP

CLOOP (讀⼊RECORD➝RECORD-48➝RECORD*10➝RECORD儲存
TEMP➝X+1➝ 讀⼊RECORD➝RECORD-48➝RECORD+TEMP➝RECORD儲存

TEMP

CLOOP LDCH RECORD,X


SUB #48
MUL #10
STA TEMP
TIX #0
LDCH RECORD,X
SUB #48
ADD TEMP
STA TEMP
RSUB

LDA TEMP
STA NUM3

➝ 副程式
TEMPO➝ 主程式➝TEMP#0➝X#9➝副程式CLOOP➝主程式
➝NUM4 儲存TEMP
JSUB TEMPO

TEMPO (TEMP#0)
系統程式 4
TEMPO LDA #0
STA TEMP
RSUB

LDX #9
JSUB CLOOP

CLOOP (讀⼊RECORD➝RECORD-48➝RECORD*10➝RECORD儲存
TEMP➝X+1➝ 讀⼊RECORD➝RECORD-48➝RECORD+TEMP➝RECORD儲存

TEMP
CLOOP LDCH RECORD,X
SUB #48
MUL #10
STA TEMP
TIX #0
LDCH RECORD,X
SUB #48
ADD TEMP
STA TEMP
RSUB

LDA TEMP
STA NUM4

➝副程式TEMPO➝主程式➝TEMP#0➝X#12➝副程式CLOOP➝主程
式➝NUM5儲存TEMP
JSUB TEMPO

TEMPO (TEMP#0)
TEMPO LDA #0
STA TEMP
RSUB

LDX #12
JSUB CLOOP

CLOOP (讀⼊RECORD➝RECORD-48➝RECORD*10➝RECORD儲存
TEMP➝X+1➝ 讀⼊RECORD➝RECORD-48➝RECORD+TEMP➝RECORD儲存

TEMP

CLOOP LDCH RECORD,X


SUB #48

系統程式 5
MUL #10
STA TEMP
TIX #0
LDCH RECORD,X
SUB #48
ADD TEMP
STA TEMP
RSUB

LDA TEMP
STA NUM5

➝副程式TEMPO➝主程式➝TEMP#0➝X#15➝副程式CLOOP➝主程
式➝NUM6儲存TEMP
JSUB TEMPO

TEMPO (TEMP#0)
TEMPO LDA #0
STA TEMP
RSUB

LDX #15
JSUB CLOOP

CLOOP (讀⼊RECORD➝RECORD-48➝RECORD*10➝RECORD儲存
TEMP➝X+1➝ 讀⼊RECORD➝RECORD-48➝RECORD+TEMP➝RECORD儲存

TEMP

CLOOP LDCH RECORD,X


SUB #48
MUL #10
STA TEMP
TIX #0
LDCH RECORD,X
SUB #48
ADD TEMP
STA TEMP
RSUB

LDA TEMP
STA NUM6

系統程式 6
➝副程式TEMPO➝主程式➝TEMP#0➝X#18➝副程式CLOOP➝主程
式➝NUM7儲存TEMP
JSUB TEMPO

TEMPO (TEMP#0)
TEMPO LDA #0
STA TEMP
RSUB

LDX #18
JSUB CLOOP

CLOOP (讀⼊RECORD➝RECORD-48➝RECORD*10➝RECORD儲存
TEMP➝X+1➝ 讀⼊RECORD➝RECORD-48➝RECORD+TEMP➝RECORD儲存

TEMP

CLOOP LDCH RECORD,X


SUB #48
MUL #10
STA TEMP
TIX #0
LDCH RECORD,X
SUB #48
ADD TEMP
STA TEMP
RSUB

LDA TEMP
STA NUM7

➝副程式TEMPO➝主程式➝TEMP#0➝X#21➝副程式CLOOP➝主程
式➝NUM8儲存TEMP
JSUB TEMPO

TEMPO (TEMP#0)
TEMPO LDA #0
STA TEMP
RSUB

LDX #21
JSUB CLOOP

系統程式 7
CLOOP (讀⼊RECORD➝RECORD-48➝RECORD*10➝RECORD儲存
TEMP➝X+1➝ 讀⼊RECORD➝RECORD-48➝RECORD+TEMP➝RECORD儲存
TEMP )
CLOOP LDCH RECORD,X
SUB #48
MUL #10
STA TEMP
TIX #0
LDCH RECORD,X
SUB #48
ADD TEMP
STA TEMP
RSUB

LDA TEMP
STA NUM8

➝TEMP 儲存NUM1
LDA NUM1
STA TEMP

➝ 副程式BINLOOP➝主程式➝BIN1儲存BINT
JSUB BINLOOP


BINLOOP TEMP/2➝COUNT 儲存TEMP➝TEMP-COUNT➝TEMP-COUNT➝BINT
儲存 TEMP➝TEMP 儲存
COUNT )
BINLOOP LDA TEMP
DIV #2
STA COUNT
LDA TEMP
SUB COUNT
SUB COUNT
STA BINT
LDA COUNT
STA TEMP
JSUB

LDA BINT
STA BIN1

系統程式 8
➝ 副程式BINLOOP➝主程式➝BIN2儲存BINT
JSUB BINLOOP


BINLOOP TEMP/2➝COUNT 儲存TEMP➝TEMP-COUNT➝TEMP-COUNT➝BINT
儲存 TEMP➝TEMP 儲存
COUNT )
BINLOOP LDA TEMP
DIV #2
STA COUNT
LDA TEMP
SUB COUNT
SUB COUNT
STA BINT
LDA COUNT
STA TEMP
JSUB

LDA BINT
STA BIN2

➝ 副程式BINLOOP➝主程式➝BIN3儲存BINT
JSUB BINLOOP


BINLOOP TEMP/2➝COUNT 儲存TEMP➝TEMP-COUNT➝TEMP-COUNT➝BINT
儲存 TEMP➝TEMP 儲存
COUNT )
BINLOOP LDA TEMP
DIV #2
STA COUNT
LDA TEMP
SUB COUNT
SUB COUNT
STA BINT
LDA COUNT
STA TEMP
JSUB

LDA BINT
STA BIN3

➝ 副程式BINLOOP➝主程式➝BIN4儲存BINT

系統程式 9
JSUB BINLOOP


BINLOOP TEMP/2➝COUNT儲存TEMP➝TEMP-COUNT➝TEMP-COUNT➝BINT
儲存 TEMP➝TEMP 儲存
COUNT)
BINLOOP LDA TEMP
DIV #2
STA COUNT
LDA TEMP
SUB COUNT
SUB COUNT
STA BINT
LDA COUNT
STA TEMP
JSUB

LDA BINT
STA BIN4

➝ 副程式BINLOOP➝主程式➝BIN5儲存BINT
JSUB BINLOOP


BINLOOP TEMP/2➝COUNT儲存TEMP➝TEMP-COUNT➝TEMP-COUNT➝BINT
儲存 TEMP➝TEMP 儲存
COUNT)
BINLOOP LDA TEMP
DIV #2
STA COUNT
LDA TEMP
SUB COUNT
SUB COUNT
STA BINT
LDA COUNT
STA TEMP
JSUB

LDA BINT
STA BIN5

➝ 副程式BINLOOP➝主程式➝BIN6儲存BINT
JSUB BINLOOP

系統程式 10

BINLOOP TEMP/2➝COUNT 儲存TEMP➝TEMP-COUNT➝TEMP-COUNT➝BINT
儲存 TEMP➝TEMP 儲存
COUNT )
BINLOOP LDA TEMP
DIV #2
STA COUNT
LDA TEMP
SUB COUNT
SUB COUNT
STA BINT
LDA COUNT
STA TEMP
JSUB

LDA BINT
STA BIN6

➝ 副程式BINLOOP➝主程式➝BIN7儲存BINT
JSUB BINLOOP


BINLOOP TEMP/2➝COUNT 儲存TEMP➝TEMP-COUNT➝TEMP-COUNT➝BINT
儲存 TEMP➝TEMP 儲存
COUNT )
BINLOOP LDA TEMP
DIV #2
STA COUNT
LDA TEMP
SUB COUNT
SUB COUNT
STA BINT
LDA COUNT
STA TEMP
JSUB

LDA BINT
STA BIN7

➝ 副程式BINLOOP➝主程式➝BIN8儲存BINT
JSUB BINLOOP


BINLOOP TEMP/2➝COUNT 儲存TEMP➝TEMP-COUNT➝TEMP-COUNT➝BINT
儲存 TEMP➝TEMP 儲存
COUNT )
系統程式 11
BINLOOP LDA TEMP
DIV #2
STA COUNT
LDA TEMP
SUB COUNT
SUB COUNT
STA BINT
LDA COUNT
STA TEMP
JSUB

LDA BINT
STA BIN8

輸出1
把CTRLSW的狀態設成第⼀個數,輸出到 06號設備
➝CTRLSWT 儲存NUM1➝CTRLSW儲存CTRLSWT➝副程式
OUTLOOP➝ 主程式
LDA NUM1
STA CTRLSWT
LDA CTRLSWT
STCH CTRLSW
JSUB OUTLOOP

OUTLOOP (TRYDEV➝WRITEDEV)
OUTLOOP TD OUTDEV
JEQ OUTLOOP
LDCH CTRLSW
WD OUTDEV
RSUB

輸出2
若此8個數中,奇數的個數⽐偶數的個數多請開⾨,否則請關⾨
➝COUNT#0
LDA #0
STA COUNT

系統程式 12
➝A#NUM1➝ 副程式ODDLOOP➝A#NUM1➝副程式COUNTADD
LDA NUM1
JSUB ODDLOOP

ODDLOOP (NUM1/2➝NUM1*2➝TEMP儲存NUM1)
ODDLOOP DIV #2
MUL #2
STA TEMP

LDA NUM1
JSUB COUNTADD

COUNTADD (NUM1-TEMP➝NUM1+COUNT➝COUNT儲存NUM1)
COUNTADD SUB TEMP
ADD COUNT
STA COUNT
RSUB

➝A#NUM2➝ 副程式ODDLOOP➝A#NUM2➝副程式COUNTADD
LDA NUM2
JSUB ODDLOOP

ODDLOOP (NUM2/2➝NUM2*2➝TEMP儲存NUM2)
ODDLOOP DIV #2
MUL #2
STA TEMP

LDA NUM2
JSUB COUNTADD

COUNTADD (NUM2-TEMP➝NUM2+COUNT➝COUNT儲存NUM2)
COUNTADD SUB TEMP
ADD COUNT
STA COUNT
RSUB

➝A#NUM3➝ 副程式ODDLOOP➝A#NUM3➝副程式COUNTADD
LDA NUM3
JSUB ODDLOOP

系統程式 13
ODDLOOP (NUM3/2➝NUM3*2➝TEMP儲存NUM3)
ODDLOOP DIV #2
MUL #2
STA TEMP

LDA NUM3
JSUB COUNTADD

COUNTADD (NUM3-TEMP➝NUM3+COUNT➝COUNT儲存NUM3)
COUNTADD SUB TEMP
ADD COUNT
STA COUNT
RSUB

➝A#NUM4➝ 副程式ODDLOOP➝A#NUM4➝副程式COUNTADD
LDA NUM4
JSUB ODDLOOP

ODDLOOP (NUM4/2➝NUM4*2➝TEMP儲存NUM4)
ODDLOOP DIV #2
MUL #2
STA TEMP

LDA NUM4
JSUB COUNTADD

COUNTADD (NUM4-TEMP➝NUM4+COUNT➝COUNT儲存NUM4)
COUNTADD SUB TEMP
ADD COUNT
STA COUNT
RSUB

➝A#NUM5➝ 副程式ODDLOOP➝A#NUM5➝副程式COUNTADD
LDA NUM5
JSUB ODDLOOP

ODDLOOP (NUM5/2➝NUM5*2➝TEMP儲存NUM5)
ODDLOOP DIV #2
MUL #2
STA TEMP

系統程式 14
LDA NUM5
JSUB COUNTADD

COUNTADD (NUM5-TEMP➝NUM5+COUNT➝COUNT儲存NUM5)
COUNTADD SUB TEMP
ADD COUNT
STA COUNT
RSUB

➝A#NUM6➝ 副程式ODDLOOP➝A#NUM6➝副程式COUNTADD
LDA NUM6
JSUB ODDLOOP

ODDLOOP (NUM6/2➝NUM6*2➝TEMP儲存NUM6)
ODDLOOP DIV #2
MUL #2
STA TEMP

LDA NUM6
JSUB COUNTADD

COUNTADD (NUM6-TEMP➝NUM6+COUNT➝COUNT儲存NUM6)
COUNTADD SUB TEMP
ADD COUNT
STA COUNT
RSUB

➝A#NUM7➝ 副程式ODDLOOP➝A#NUM7➝副程式COUNTADD
LDA NUM7
JSUB ODDLOOP

ODDLOOP (NUM7/2➝NUM7*2➝TEMP儲存NUM7)
ODDLOOP DIV #2
MUL #2
STA TEMP

LDA NUM7
JSUB COUNTADD

COUNTADD (NUM7-TEMP➝NUM7+COUNT➝COUNT儲存NUM7)

系統程式 15
COUNTADD SUB TEMP
ADD COUNT
STA COUNT
RSUB

➝A#NUM8➝ 副程式ODDLOOP➝A#NUM8➝副程式COUNTADD➝主
程式
LDA NUM8
JSUB ODDLOOP

ODDLOOP (NUM8/2➝NUM8*2➝TEMP儲存NUM8)
ODDLOOP DIV #2
MUL #2
STA TEMP

LDA NUM8
JSUB COUNTADD

COUNTADD (NUM8-TEMP➝NUM8+COUNT➝COUNT儲存NUM8)
COUNTADD SUB TEMP
ADD COUNT
STA COUNT
RSUB

➝COUNT ⽐較➝判斷⼤於#4➝迴圈OPEND➝其他➝迴圈CLOSED
LDA COUNT
COMP #4
JGT OPEND
J CLOSED

OPEND (BIN⽐較➝判斷⼩於#1➝迴圈NUMADDD)
OPEND LDA BIN1
COMP #1
JLT NUMADDD
J PUTOUT1

NUMADDD (CTRLSW+1)
NUMADDD LDA CTRLSWT
ADD #1
STA CTRLSWT

系統程式 16
LDA CTRLSWT
STCH CTRLSW
J PUTOUT1

J CLOSED

CLOSED (BIN⽐較➝判斷⼤於#0➝迴圈NUMSUBD)
CLOSED LDA BIN1
COMP #0
JGT NUMSUBD
J PUTOUT1

NUMSUBD (CTRLSW-1)
NUMSUBD LDA CTRLSWT
SUB #1
STA CTRLSWT
LDA CTRLSWT
STCH CTRLSW
J PUTOUT1

➝ 副程式OUTLOOP➝主程式
PUTOUT1 JSUB OUTLOOP

OUTLOOP (TRYDEV➝WRITEDEV)
OUTLOOP TD OUTDEV
JEQ OUTLOOP
LDCH CTRLSW
WD OUTDEV
RSUB

輸出3
把第1、3、5、7個數相加,若⽐第2、4、6、8個數相加的和⼤請響鈴 ,否則請關鈴
➝A#0➝A+NUM2➝A+NUM4➝A+NUM6➝A+NUM8➝TEMP 儲存A
LDA #0
ADD NUM2
ADD NUM4
ADD NUM6

系統程式 17
ADD NUM8
STA TEMP

➝A#0➝A+NUM1➝A+NUM3➝A+NUM5➝A+NUM7
LDA #0
ADD NUM1
ADD NUM3
ADD NUM5
ADD NUM7

➝A ⽐較➝判斷⼤於TEMP➝迴圈BELLR➝其他➝迴圈BELLF
COMP TEMP
JGT BELLR

BELLR (BIN⽐較➝判斷⼩於#1➝迴圈NUMADDB)
BELLR LDA BIN4
COMP #1
JLT NUMADDB
J PUTOUT2

NUMADDB (CTRLSEW+8)
NUMADDB LDA CTRLSWT
ADD #8
STA CTRLSWT
LDA CTRLSWT
STCH CTRLSW
J PUTOUT2

J BELLF

BELLF (BIN⽐較➝判斷⼤於#0➝迴圈NUMSUBB)
BELLF LDA BIN1
COMP #0
JGT NUMSUBB
J PUTOUT2

NUMSUBB (CTRLSEW-8)
NUMSUBB LDA CTRLSWT
SUB #8
STA CTRLSWT

系統程式 18
LDA CTRLSWT
STCH CTRLSW
J PUTOUT2

➝ 副程式OUTLOOP➝主程式
PUTOUT2 JSUB OUTLOOP

OUTLOOP (TRYDEV➝WRITEDEV)
OUTLOOP TD OUTDEV
JEQ OUTLOOP
LDCH CTRLSW
WD OUTDEV
RSUB

輸出4
把燈切到另⼀個⽅向
➝BIN6 ⽐較➝判斷⼩於#1➝迴圈LIGHTN➝其他➝迴圈LIGHTF
LDA BIN6
COMP #1
JLT LIGHTN
J LIGHTF

LIGHTN (CTRLSW+32)
LIGHTN LDA CTRLSWT
ADD #32
STA CTRLSWT
LDA CTRLSWT
STCH CTRLSW
J PUTOUT3

J LIGHTF

LIGHTF (CTRLSW-32)
LIGHTF LDA CTRLSWT
SUB #32
STA CTRLSWT
LDA CTRLSWT

系統程式 19
STCH CTRLSW
J PUTOUT3

➝ 副程式OUTLOOP➝主程式
PUTOUT3 JSUB OUTLOOP

OUTLOOP (TRYDEV➝WRITEDEV)
OUTLOOP TD OUTDEV
JEQ OUTLOOP
LDCH CTRLSW
WD OUTDEV
RSUB

變數
➝ 檔案
INDEV BYTE X'05'
OUTDEV BYTE X'06'
RECORD RESB 25

➝ 暫存
TEMP RESW 1
BINT RESW 1
CTRLSWT RESW 1
CTRLSW RESB 1
COUNT RESW 1

➝ 數字
NUM1 RESW 1
NUM2 RESW 1
NUM3 RESW 1
NUM4 RESW 1
NUM5 RESW 1
NUM6 RESW 1
NUM7 RESW 1
NUM8 RESW 1

➝ ⼆進制
系統程式 20
BIN1 RESW 1
BIN2 RESW 1
BIN3 RESW 1
BIN4 RESW 1
BIN5 RESW 1
BIN6 RESW 1
BIN7 RESW 1
BIN8 RESW 1

程式結束
END FIRST

系統程式 21

You might also like