;----------------------------------------------------------------- ; EX67.ASM COUNT THE OCCURENCE OF A PATTERN C.P. Diduch 2001 ; ; Count the number of times a specific pattern, stored as PATTRN, ; occurs in the array, DATA[]. ; ; Author(s): ; Signature(s): Date: ;----------------------------------------------------------------- .ORG 0x0000 ; "variable assignments in RAM" PATTRN: .DS 1 ; unsigned PATTERN ; .ORG 0x8100 ; "constant variable in ROM" DATA: .DW 10, 60, 30, 40 ; unsigned DATA[] = {10, 60, 30, .DW 50, 60, 70, 80 ; 40, 50, 60, 70, 80} ; ; .ORG 0x8000 ; "assign the following to ROM" ; ; void main(void) { ; ADDL R0, NULL, 60 ; PATTRN = 60 ; STOREM PATTRN, R0 ; XOR R8, R8, R8 ; COUNT = 0 ; // Reg. var. in R8. XOR R1, R1, R1 ; i = 0 ; // Reg. var. in R1. ; L0: SUBL NULL, R1, 8 ; while (i < 8) { JMPNC L2 ; LOADM R0, PATTRN ; if (DATA[i] == PATTRN) { DLOADM R2, DATA(R1) ; SUB NULL, R2, R0 ; JMPNZ L1 ; ADDL R8, R8, 1 ; COUNT = COUNT + 1 ; ; } L1: ADDL R1, R1, 1 ; i = i + 1 ; JMP L0 ; } ; L2: STOREP 0x0002, R8 ; outport(0x0002, COUNT) ; L3: JMP L3 ; do {} // Program termination.