十进制转换成字符串

;
; 
;十进制转换成字符串
; author:  wangguolaing
; date:  revised 4/14

.386
.MODEL FLAT

INCLUDE io.h
includelib Kernel32.lib
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD

cr          EQU    0dh  
Lf          EQU    0ah      

.STACK      4096

.DATA
Array    DWORD  4 DUP (?)
.CODE
_start:
      mov eax,1324
      lea ebx,Array
      mov ecx,10
whileup  :      
      cmp eax,0
      je  endwhile
      cdq
      idiv ecx
      add edx,30H
      mov [ebx],edx
      add ebx,4
      jmp  whileup 
endwhile   : 
      sub ebx,4
uptake   : 
      output [ebx]
      sub ebx,4
      loop uptake
                             
quit:       INVOKE ExitProcess, 0   ; exit with return code 0

PUBLIC _start                       ; make entry point public
            END                     ; end of source code  

进制数字符串的过程需要用到除法和取模运算,这在汇编语言中可以通过使用指令实现。 下面是一个将进制数字符串汇编语言程序示例: ``` ; 将进制数字符串,存储在 buf 中 ; 参数: ; edx = 进制数 ; ecx = buf 地址 ; 返回值: ; eax = 换后字符串的长度 section .data digits db "0123456789" section .text global dec_to_str dec_to_str: push ebp mov ebp, esp push ebx push esi push edi mov ebx, ecx ; ebx = buf 地址 mov edi, ebx ; edi = 字符串指针 mov esi, edx ; esi = 进制数 xor eax, eax ; eax = 0 cmp esi, 0 jge .loop_start ; 如果是正数则直接跳到循环开始 mov byte [edi], '-' inc edi neg esi ; 取绝对值 inc eax .loop_start: cmp esi, 0 jz .loop_end ; 如果已经处理完了则跳到结束 xor edx, edx div dword 10 ; edx = 余数,eax = 商 mov dl, byte [digits + eax] ; 将数字字符 mov byte [edi], dl ; 存储字符 inc edi inc eax ; 字符串长度加一 jmp .loop_start .loop_end: mov byte [edi], 0 ; 字符串末尾添加 NULL 结束符 sub edi, ebx ; 计算字符串长度 mov eax, edi pop edi pop esi pop ebx mov esp, ebp pop ebp ret ``` 该程序使用了除法指令 `div` 和取模指令 `mod` 来实现将进制数字符串的过程。具体来说,程序将进制数不断地除以 10,将商字符并存储到字符串中,直到商为 0。同时,程序还需要处理负数的情况,将负数绝对值后,在字符串前添加负号。最后,程序需要加上 NULL 结束符,并计算字符串的长度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值