📄 dcnv001.asm
字号:
;************************************************************************
;* MODULE INFORMATION*
;**********************
;* FILE NAME: dcnv001.asm
;* SYSTEM NAME: devlib
;* ORIGINAL AUTHOR(S): Paul Lemmers
;* VERSION NUMBER:
;* CREATION DATE: 1990/8/14
;*
;* DESCRIPTION:
;* Contains itoa, ltoa, ultoa
;************************************************************************
;* CHANGES INFORMATION **
;************************
;* REVISION: $Revision: 1.1 $
;* WORKFILE: $Workfile: dcnv001.asm $
;* LOGINFO: $Log: D:/CPROG/MYDEV/DEVLIB/VCS/DCNV001.ASV $
;*
;* Rev 1.1 29 Mar 1992 17:05:22 PAUL
;* Changes for masm 6.00 ??
;*
;* Rev 1.0 14 Aug 1990 14:31:28 PAUL
;* Initial revision.
;************************************************************************/
;
INCLUDE cdev.inc
_TEXT SEGMENT
PUBLIC _dev_itoa, _dev_ltoa, _dev_ultoa
;************************************************************************
;* NAME: dev_itoa
;* SYNOPSIS: char far *dev_itoa(int i, char far *dest, int base);
;* char far *dev_ltoa(long l, char far *dest, int base);
;* char far *dev_ultoa(unsigned long ul, char far *dest,
;* int base);
;* long l; Long integer to be formatted
;* unsigned long ul; Unsigned long integer to be formatted
;* int i; Integer to be formatted
;* char far *dest; Destination string
;* int base; Base number (hex, dec, oct)
;* DESCRIPTION: See normal itoa(), ltoa() and ultoa().
;* UNMODIFIED REGISTERS:
;* ds bp si di
;* RETURNS: dx:ax pointer to dest
;************************************************************************
i = 4
dest = 6
base = 0Ah
_dev_itoa PROC NEAR
PUSH BP
MOV BP,SP
PUSH SI
PUSH DI
MOV BL,01
MOV CX,[BP+base]
MOV AX,[BP+i]
XOR DX,DX
CMP CX,10
JNZ $L00a
CWD
$L00a: PUSH DS
LDS DI,[BP+dest]
JMP SHORT __cxtoa
_dev_itoa ENDP
_dev_ltoa PROC NEAR
PUSH BP
MOV BP,SP
PUSH SI
PUSH DI
MOV BL,01
JMP SHORT __cltoasu_
_dev_ltoa ENDP
_dev_ultoa PROC NEAR
PUSH BP
MOV BP,SP
PUSH SI
PUSH DI
MOV BL,00
_dev_ultoa ENDP
EVEN
;
;
long = 4
dest = 8
base = 0Ch
__cltoasu_ PROC NEAR
MOV CX,[BP+base]
MOV AX,[BP+long]
MOV DX,[BP+long+2]
PUSH DS
LDS DI,[BP+dest]
__cxtoa::
PUSH DI
PUSH DS
POP ES
CLD
XCHG AX,BX
OR AL,AL
JZ $L000
CMP CX,10
JNZ $L000
OR DX,DX
JNS $L000
MOV AL,'-'
STOSB
NEG BX
ADC DX,+00
NEG DX
$L000: MOV SI,DI
$L001: XCHG AX,DX
XOR DX,DX
OR AX,AX
JZ $L002
DIV CX
$L002: XCHG AX,BX
DIV CX
XCHG AX,DX
XCHG DX,BX
ADD AL,'0'
CMP AL,'9'
JBE $L003
ADD AL,27h
$L003: STOSB
MOV AX,DX
OR AX,BX
JNZ $L001
MOV [DI],AL
$L004: DEC DI
LODSB
XCHG AL,[DI]
MOV [SI-01],AL
LEA AX,[SI+01]
CMP AX,DI
JB $L004
MOV DX,DS
POP AX
POP DS
POP DI
POP SI
MOV SP,BP
POP BP
RET
__cltoasu_ ENDP
_TEXT ENDS
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -