用汇编语言实现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

posted @ 2009-01-27 10:18  YangQ  阅读(651)  评论(0编辑  收藏  举报