X86 NASM-整数到字符串

X86 NASM-整数到字符串,x86,nasm,X86,Nasm,有一个关于NASM中整数到字符串转换的问题 我的问题是如何连接这些数字,以便在循环终止时,输出包含所有数字,而不是最后计算的数字 例如:1234->1234 div 10=余数4=>Buffer=“4” 123->123 div 10=余数3=>Buffer=“3” 等等 我的程序只存储最后计算出的数字(“1”)并打印出来 以下是我的代码文件: #include <stdio.h> #include <stdlib.h> int main() { int i;

有一个关于NASM中整数到字符串转换的问题

我的问题是如何连接这些数字,以便在循环终止时,输出包含所有数字,而不是最后计算的数字

例如:1234->1234 div 10=余数4=>Buffer=“4” 123->123 div 10=余数3=>Buffer=“3” 等等

我的程序只存储最后计算出的数字(“1”)并打印出来

以下是我的代码文件:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    char *str;
    printf("Enter a number: ");
    scanf ("%d", &i);
    str=int2string(i);
    printf("Number as string is: %s\n", str);

    return 0;
}

%include "asm_io.inc"

segment .data

segment .bss
buffer db 20    ; buffer of size 8 bits (in reference to c file)

segment .text
    global int2string
int2string:
        enter   0,0             ; setup routine
        pusha
    mov esi, 0      ; set sign to 0
    mov ebx, 0      ; set current remainder to 0
    mov edi, 0      ; set the current digit in eax

        mov eax, [ebp+8]        ; eax contains input value of int2string

    jmp placeValues

placeValues:
    mov edx, 0      ; set remainder to 0
    mov eax, eax        ; redundancy ensures dividend is eax
    mov ebx, 10     ; sets the divisor to value of 10
    div ebx         ; eax = eax / ebx   

    mov ebx, 48     ; set ebx to 48 for ASCII conversion
    add ebx, edx        ; add remainder to ebx for ASCII value
    add dword[buffer], ebx  ; store the number in the buffer

    cmp eax, 0
    jz return   
    jmp placeValues

return:
    popa
    mov eax, buffer     ; move buffer value to eax
        leave                     
        ret
#包括
#包括
int main()
{
int i;
char*str;
printf(“输入一个数字:”);
scanf(“%d”、&i);
str=int2string(i);
printf(“字符串的编号为:%s\n”,str);
返回0;
}
%包括“asm_io.inc”
段.数据
第2部分:bss
缓冲器db 20;大小为8位的缓冲区(参考c文件)
段.文本
全局int2string
Int2字符串:
输入0,0;设置程序
普沙
movesi,0;将符号设置为0
mov-ebx,0;将当前余数设置为0
mov-edi,0;在eax中设置当前数字
mov-eax,[ebp+8];eax包含int2string的输入值
jmp值
位置值:
mov-edx,0;将余数设置为0
mov-eax,eax;冗余确保红利是eax
mov-ebx,10;将除数的值设置为10
div-ebx;eax=eax/ebx
mov-ebx,48;将ebx设置为48进行ASCII转换
添加ebx、edx;为ASCII值向ebx添加余数
添加dword[buffer],ebx;将数字存储在缓冲区中
cmp-eax,0
jz返回
jmp值
返回:
波帕
mov-eax,缓冲器;将缓冲区值移动到eax
离开
ret

嗯,+int的数字计数不能超过10,因此您能否为10个字符分配空间,并在填充数字并返回数组的基数时增加循环中的赋值索引


--我不太相信这就是你所需要的,所以我把它作为一个评论,但因为它是,而且你是新来的,我真的应该把它移到这里,作为一个正式的回答。

嗯,+int的数字计数不能超过10,那么,您能否为10个字符分配空间,并在填充数字并返回数组的基数时增加循环中的赋值索引?这非常有效,感谢您的快速响应