用汇编语言实现itoa函数

近日放假在家,开始研究起汇编语言,看了几日,小有成就。今天晚上有空,写了一个程序,实现C函数库中的itoa()函数的功能,也就是把整数转换成字符串,这是鄙人第一个独立写的汇编程序,肯定有不妥的地方,望高手指正。

 

; 子程序名:  ITOA
;
功  能:  将16位有符号整数转换为字符串
;
入口参数:  DS:SI=缓冲区首地址
;
          AX=要转换的数
;
出口参数:  转换后的字符在缓冲区中
ITOA      PROC
          
PUSH      BX           ; 保护寄存器
           PUSH      CX
          
PUSH      DX
          
PUSH      SI
          
;
           ROL       AX, 1          ; 循环左移,判断符号位
           ROR       AX, 1          ; 恢复原数
           JNC       POS 
          
DEC       AX           ; 减1
           XOR       AX,0FFFFH    ; 取反
           MOV       [SI], ' - '      ; 负号
           INC       SI
POS:        XOR       CX,CX        ; 位数计数器清零
           XOR       DX,DX
          
MOV       BX, 10         ; 设置除数
NEXT1:      DIV       BX
          
PUSH      DX           ; 余数入栈
           INC       CX
          
OR        AX,AX        ; 判断商是否为0
           JZ        NEXT2
          
XOR       DX,DX
          
JMP       NEXT1
          
;
NEXT2:      POP       DX           ; 构建字符串
           ADD       DL, ' 0 '
          
MOV       [SI],DL
          
INC       SI
          LOOP     NEXT2
          
;
           MOV       [SI], 0         ; 字符串结束符,或为'$'
           ;
           POP       SI            ; 恢复寄存器
           POP       DX
          
POP       CX
          
POP       BX
          
RET
ITOA      ENDP

你可能感兴趣的:(汇编语言)