Page 308 - Introduction to Microcontrollers Architecture, Programming, and Interfacing of The Motorola 68HC12
P. 308

9.6 Examples from Character String Procedures                        285


            4: int strncmp(char *strl, char *str2, int count) {
        0000088A 6CAE              STD    2,-SP
            5:   if (!count) return 0;
        0000088C 2618              BNE    *+26     ;abs = 08A6
        0000088E C7                CLRB
        0000088F 87                CLRA
        00000890 203B              BRA *+61 ;abs = 08CD
            7:       if (*strl != *str2) break;
        00000892 EE86              LDX    6,SP
        00000894 E600              LDAB   0,X
        00000896 EE84              LDX    4,SP
        00000898 E100              CMPB   0,X
        0000089A 261F              BNE    *+33     ;abs = 08BB
            8:       ++strl; ++str2;
        0000089C EE86              LDX    6,SP
        0000089E 08                INX
        0000089F 6E86              STX    6,SP
        000008A1 EE84              LDX    4,SP
        000008A3 08                INX
        000008A4 6E84              STX    4,SP
            6:   while(count— && *strl && *str2 ){
        000008A6 EE80              LDX 0,SP
        000008A8 191F              LEAY -1,X
        000008AA 6D80              STY 0,SP
        000008AC 04450C            TBEQ X,*+15 ;abs = 08BB
        000008AF EE86              LDX    6,SP
        000008B1 E600              LDAB 0,X
        000008B3 2706              BEQ    *+8    ;abs = 08BB
        000008B5 EE84              LDX    4,SP
        000008B7 E600              LDAB 0,X
        000008B9 26D7              BNE    *-39     ;abs = 0892
           10: return (*strl - *str2);
        000008BB EE86              LDX    6,SP
        000008BD E600              LDAB 0,X
        000008BF B714              SEX B f D
        000008C1 EE84              LDX    4,SP
        000008C3 3B                PSHD
        000008C4 E600              LDAB 0,X
        000008C6 B715              SEX    B,X
        000008C8 34                PSHX
        000008C9 EC82              LDD    2,SP
        000008CB A3B3              SUED 4,SP+
           11: }
        000008CD 30                PULX
        000008CE 3D                RTS

                             Figure 9.20. The Strncmp Procedure
   303   304   305   306   307   308   309   310   311   312   313