解:
.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