解:
.MODEL SMALL, C .DATA str1? DB "12345ABCDEF", 0 str2? DB 20 DUP('A') .CODE Strlen PROC USES AX BX, String:PTR BYTE …… ;参见例10.1 Strlen ENDP Strncpy PROC?USES AX CX DI SI DS ES, str1:FAR PTR BYTE, str2:FAR PTR BYTE, idx:WORD, num:WORD LES DI, str1 LDS SI, str2 ;取两个字符串的首地址 INVOKE Strlen, SI ;计算源字符串的长度,在CX中 MOV AX, idx .IF AX >= CX ;若字符起点就超过源串的长度 MOV BYTE PTR ES:[DI], 0 ;拷贝的字符串为“空” JMP over .ENDIF ADD SI, AX ;定源串中字符的起点SI MOV CX, num CLD .REPEAT LODSB STOSB .UNTILCXZ AL==0 .IF AL!=0 ;设置目标串的结束符 MOV BYTE PTR[DI], 0 .ENDIF over: RET Strncpy ENDP .STARTUP INVOKE Strncpy, ADDR str2, ADDR str1, 3, 5 .EXIT 0 END