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

系統程式

程式開始
➝副程式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
➝CTRLSW儲存NUM1➝副程式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➝迴圈OPENDOOR➝其他➝迴圈CLOSEDOOR
➝副程式OUTLOOP➝主程式
輸出3
➝A#0➝A+NUM1➝A+NUM3➝A+NUM5➝A+NUM7➝TEMP儲存A
➝A#0➝A+NUM2➝A+NUM4➝A+NUM6➝A+NUM8
➝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號設備
➝CTRLSW 儲存NUM1➝副程式OUTLOOP➝主程式
LDA NUM1
STA CTRLSW
JSUB OUTLOOP

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

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

➝A#NUM1➝ 副程式ODDLOOP➝A#NUM1➝副程式COUNTADD

系統程式 12
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

➝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

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

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

系統程式 13
STA TEMP

LDA NUM3
JSUB COUNTADD

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

➝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

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

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

LDA NUM5
JSUB COUNTADD

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

系統程式 14
COUNTADD SUB TEMP
ADD COUNT
STA COUNT

➝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

➝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)
COUNTADD SUB TEMP
ADD COUNT
STA COUNT

➝A#NUM8➝ 副程式ODDLOOP➝A#NUM8➝副程式COUNTADD➝主
程式
系統程式 15
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

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

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

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

J CLOSED

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

NUMSUBD (CTRLSW-1)

系統程式 16
NUMSUBD LDA CTRLSW
SUB #1
STA CTRLSW

➝ 副程式OUTLOOP➝主程式
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+NUM1➝A+NUM3➝A+NUM5➝A+NUM7➝TEMP 儲存A
LDA #0
ADD NUM1
ADD NUM3
ADD NUM5
ADD NUM7
STA TEMP

➝A#0➝A+NUM2➝A+NUM4➝A+NUM6➝A+NUM8
LDA #0
ADD NUM2
ADD NUM4
ADD NUM6
ADD NUM8

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

BELLR (BIN⽐較➝判斷⼩於#1➝迴圈NUMADDB)

系統程式 17
BELLR LDA BIN4
COMP #1
JLT NUMADDB

NUMADDB (CTRLSEW+8)
NUMADDB LDA CTRLSW
ADD #8
STA CTRLSW

J BELLF

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

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

➝ 副程式OUTLOOP➝主程式
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

LIGHTN (CTRLSW+32)
系統程式 18
LIGHTN LDA CTRLSW
ADD #32
STA CTRLSW

J LIGHTF

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

➝ 副程式OUTLOOP➝主程式
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
CTRLSW RESW 1
COUNT RESW 1

➝ 數字
NUM1 RESW 1
NUM2 RESW 1
NUM3 RESW 1
NUM4 RESW 1
NUM5 RESW 1

系統程式 19
NUM6 RESW 1
NUM7 RESW 1
NUM8 RESW 1

➝ ⼆進制
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

系統程式 20

You might also like