1*3e12c5d1SDavid du Colombier TEXT strcat(SB),$0 2*3e12c5d1SDavid du Colombier 3*3e12c5d1SDavid du Colombier MOVL $0, AX 4*3e12c5d1SDavid du Colombier MOVL $-1, CX 5*3e12c5d1SDavid du Colombier CLD 6*3e12c5d1SDavid du Colombier 7*3e12c5d1SDavid du Colombier/* 8*3e12c5d1SDavid du Colombier * find length of second string 9*3e12c5d1SDavid du Colombier */ 10*3e12c5d1SDavid du Colombier 11*3e12c5d1SDavid du Colombier MOVL p2+4(FP), DI 12*3e12c5d1SDavid du Colombier REPN; SCASB 13*3e12c5d1SDavid du Colombier 14*3e12c5d1SDavid du Colombier MOVL DI, BX 15*3e12c5d1SDavid du Colombier SUBL p2+4(FP), BX 16*3e12c5d1SDavid du Colombier 17*3e12c5d1SDavid du Colombier/* 18*3e12c5d1SDavid du Colombier * find end of first string 19*3e12c5d1SDavid du Colombier */ 20*3e12c5d1SDavid du Colombier 21*3e12c5d1SDavid du Colombier MOVL p1+0(FP), DI 22*3e12c5d1SDavid du Colombier REPN; SCASB 23*3e12c5d1SDavid du Colombier 24*3e12c5d1SDavid du Colombier/* 25*3e12c5d1SDavid du Colombier * copy the memory 26*3e12c5d1SDavid du Colombier */ 27*3e12c5d1SDavid du Colombier SUBL $1, DI 28*3e12c5d1SDavid du Colombier MOVL p2+4(FP), SI 29*3e12c5d1SDavid du Colombier/* 30*3e12c5d1SDavid du Colombier * copy whole longs 31*3e12c5d1SDavid du Colombier */ 32*3e12c5d1SDavid du Colombier MOVL BX, CX 33*3e12c5d1SDavid du Colombier SHRL $2, CX 34*3e12c5d1SDavid du Colombier REP; MOVSL 35*3e12c5d1SDavid du Colombier/* 36*3e12c5d1SDavid du Colombier * copy the rest, by bytes 37*3e12c5d1SDavid du Colombier */ 38*3e12c5d1SDavid du Colombier ANDL $3, BX 39*3e12c5d1SDavid du Colombier MOVL BX, CX 40*3e12c5d1SDavid du Colombier REP; MOVSB 41*3e12c5d1SDavid du Colombier 42*3e12c5d1SDavid du Colombier MOVL p1+0(FP), AX 43*3e12c5d1SDavid du Colombier RET 44