47 lines
1.0 KiB
Plaintext
47 lines
1.0 KiB
Plaintext
.TITLE BINRTA
|
|
.MCALL .TTYOUT,.PRINT,.EXIT
|
|
; TEST CODE
|
|
BINRTA::CLR R5
|
|
1$: MOV R5,R0
|
|
ADD #'0,R0
|
|
.TTYOUT
|
|
MOV R5,R0
|
|
MOV #DATA,R1
|
|
MOV #DATEND,R2
|
|
JSR PC,BINSRC
|
|
BEQ 2$
|
|
.PRINT #4$
|
|
BR 3$
|
|
2$: .PRINT #5$
|
|
3$: INC R5
|
|
CMP R5,#^D10
|
|
BLT 1$
|
|
.EXIT
|
|
4$: .ASCII / NOT/
|
|
5$: .ASCIZ / FOUND/
|
|
.EVEN
|
|
|
|
; TEST DATA
|
|
DATA: .WORD 1, 2, 3, 5, 7
|
|
DATEND = . + 2
|
|
|
|
; BINARY SEARCH
|
|
; INPUT: R0 = VALUE, R1 = LOW PTR, R2 = HIGH PTR
|
|
; OUTPUT: ZF SET IF VALUE FOUND; R1 = INSERTION POINT
|
|
BINSRC: BR 3$
|
|
1$: MOV R1,R3
|
|
ADD R2,R3
|
|
ROR R3
|
|
CMP (R3),R0
|
|
BGE 2$
|
|
ADD #2,R3
|
|
MOV R3,R1
|
|
BR 3$
|
|
2$: SUB #2,R3
|
|
MOV R3,R2
|
|
3$: CMP R2,R1
|
|
BGE 1$
|
|
CMP (R1),R0
|
|
RTS PC
|
|
.END BINRTA
|