73 lines
993 B
Text
73 lines
993 B
Text
.reg ACC 0
|
|
.reg IAR init
|
|
.lit 9
|
|
.lit 8
|
|
.lit 7
|
|
.lit 6
|
|
.lit 5
|
|
.lit 4
|
|
.lit 3
|
|
.lit 2
|
|
.lit 1
|
|
|
|
.org 0x00040
|
|
.lit 8
|
|
|
|
.org 0x00080 ;; tempVars
|
|
i: .lit 0
|
|
k: .lit 0
|
|
maxIndex: .lit 0
|
|
max: .lit 0
|
|
negOne: .lit -1
|
|
one: .lit 1
|
|
temp: .lit 0
|
|
|
|
.org 0x00100 ;start
|
|
init:
|
|
LDV 0x40
|
|
STV i
|
|
iHead:
|
|
LDV i
|
|
JMN end
|
|
iBody:
|
|
LDV i ;
|
|
STV maxIndex ; max index is current one
|
|
LDIV maxIndex ; A[i]
|
|
STV max ; write in max
|
|
LDV i
|
|
STV k ; init k
|
|
kHead:
|
|
LDV k
|
|
JMN afterLoop
|
|
kBody:
|
|
LDV max
|
|
NOT ; ones coplement
|
|
ADD one ; twos complement
|
|
STV temp ; -max in temp
|
|
LDIV k ; A[k]
|
|
ADD temp ; A[k] - max
|
|
JMN kAfter ; >=0 ==> A[k] > max
|
|
LDV k
|
|
STV maxIndex
|
|
LDIV maxIndex
|
|
STV max
|
|
kAfter: ; k--
|
|
LDV k
|
|
ADD negOne
|
|
STV k
|
|
JMP kHead ; next loop
|
|
afterLoop:
|
|
; swap
|
|
LDIV i
|
|
STV temp ; A[i] -> temp
|
|
LDV max
|
|
STIV i ; A[i] = max
|
|
LDV temp
|
|
STIV maxIndex ; A[maxIndex] = temp
|
|
iAfter: ; i--
|
|
LDV i
|
|
ADD negOne
|
|
STV i
|
|
JMP iHead ; next loop
|
|
end:
|
|
HALT
|