我来灌水,8086汇编写的部分函数。。 ^^
;文件名: SUBFUN.ASM
;内 容: 常用函数集
;子程序名: STRLEN
;功 能: 求字符串长度
;入口参数: ES:[DI]=待求长度字符串
;出口参数: AX=字符串长度
STRLEN PROC
PUSH SI
PUSH DI
PUSHF
CLD
MOV SI,DI
MOV CX,0FFFFH
MOV AL,'$'
REPNE SCASB
MOV AX,DI
SUB AX,SI
DEC AX
POPF
POP DI
POP SI
RET
STRLEN ENDP
;子程序名: STRREV
;功 能: 将字符串反转
;入口参数: ES:[DI]=待反转的字符串
;出口参数: ES:[DI]=反转后的字符串
STRREV PROC
PUSH SI
PUSH DI
CALL STRLEN ;字串长度
CMP AX,1 ;长度过短
JNA RRET
DEC AX
MOV SI,DI ;首尾指针
ADD DI,AX
RLP: MOV AL,[DI] ;首尾交换
XCHG AL,ES:[SI]
MOV [DI],AL
INC SI ;修改指针
DEC DI
CMP SI,DI ;指针相遇
JB RLP
RRET: POP SI
POP DI
RET
STRREV ENDP
;子程序名: ALTOASC
;功 能: 把4位2进制数值转成对应ASCII码
;入口参数: AL低4位=需要转换的整数
;出口参数: AL=数值对应的ASCII码
ALTOASC PROC
AND AL,0FH
OR AL,30H
CMP AL,3AH
JB BELOW
ADD AL,7
BELOW: RET
ALTOASC ENDP
;子程序名: ALTOBIN
;功 能: 把8位2进制数值转成2进制字符串
;入口参数: AL=需要转换的整数, ES
I=字符串首地址
;出口参数: ES:[DI]=数值对应的2进制字符串
ALTOBIN PROC
PUSH DI
PUSHF
CLD
MOV DL,AL
MOV CX,8
BLP: ROL DL,1
MOV AL,DL
AND AL,1
OR AL,30H
STOSB
LOOP BLP
;LP: MOV AL,30H
SHL DL,1
JNC NC
OR AL,1
;NC: STOSB
LOOP LP
POPF
POP DI
RET
ALTOBIN ENDP
;子程序名: AXTOHEX
;功 能: 把16位2进制数值转成16进制字符串
;入口参数: AX=需要转换的整数, ES
I=字符串首地址
;出口参数: ES:[DI]=数值对应的16进制字符串
AXTOHEX PROC
PUSH DI
PUSHF
CLD
MOV DX,AX
MOV CX,0404H
HLP1: ROL DX,CL
MOV AL,DL
CALL ALTOASC
STOSB
DEC CH
JNZ HLP1
POPF
POP DI
RET
AXTOHEX ENDP
;子程序名: ALTOHEX
;功 能: 把8位2进制数值转成16进制字符串
;入口参数: AL=需要转换的整数,ES
I=字符串首地址
;出口参数: ES:[DI]=数值对应的16进制字符串
ALTOHEX PROC
PUSH DI
PUSHF
CLD
MOV AH,AL
MOV CX,0204H
HLP2: ROL AH,CL
MOV AL,AH
CALL ALTOASC
STOSB
DEC CH
JNZ HLP2
POPF
POP DI
RET
ALTOHEX ENDP
;子程序名: AXTODEC
;功 能: 把16位2进制数值(无符号)转成10进制字符串
;入口参数: AX=需要转换的整数, ES
I=字符串首地址
;出口参数: ES:[DI]=数值对应的10进制字符串
AXTODEC PROC
PUSH SI
PUSH DI
MOV SI,DI
MOV BX,10
DLP1: XOR DX,DX ;DX=0
DIV BX ;DX=余数,AX=商
OR DL,30H ;对应字符
MOV [DI],DL
INC DI
CMP AX,0 ;(AX<>0)时继续
JNZ DLP1
MOV BYTE PTR [DI],'$' ;结束符号
MOV DI,SI
CALL STRREV ;反转字串
POP DI
POP SI
RET
AXTODEC ENDP
;子程序名: ALTODEC
;功 能: 把8位2进制数(无符号)转成10进制字符串
;入口参数: AL=需要转换的整数, ES
I=字符串首地址
;出口参数: ES:[DI]=数值对应的10进制字符串
ALTODEC PROC
PUSH SI
PUSH DI
MOV SI,DI
MOV BL,10
DLP2: XOR AH,AH
DIV BL ;AH=余数,AL=商
OR AH,30H ;对应字符
MOV [DI],AH
INC DI
CMP AL,0 ;(AL<>0)时继续
JNZ DLP2
MOV BYTE PTR [DI],'$' ;结束符号
MOV DI,SI
CALL STRREV ;反转字串
POP DI
POP SI
RET
ALTODEC ENDP
;子程序名: ALTOSTR
;功 能: 把8位2进制数(有符号)转成10进制字符串
;入口参数: AL=需要转换的整数, ES
I=字符串首地址
;出口参数: ES:[DI]=数值对应的10进制字符串
ALTOSTR PROC
PUSH SI
PUSH DI
CMP AL,0
JNL NLZERO
MOV byte ptr [DI],'-';负号
INC DI ;指针后移
NOT AL ;正值
INC AL
NLZERO: MOV SI,DI
MOV BL,10
DLP3: XOR AH,AH
DIV BL ;AH=余数,AL=商
OR AH,30H ;对应字符
MOV [DI],AH
INC DI ;指针后移
CMP AL,0 ;(AL<>0)时继续
JNZ DLP3
MOV BYTE PTR [DI],'$';结束符号
MOV DI,SI ;反转字串
CALL STRREV
POP DI
POP SI
RET
ALTOSTR ENDP