NASM - целое число в строку - PullRequest
2 голосов
/ 05 февраля 2012

есть вопрос, касающийся преобразования целых чисел в строки в NASM.

Мой вопрос заключается в том, как объединить цифры так, чтобы выходные данные содержали все цифры после завершения цикла, а не последнюю вычисленную цифру?

Например.1234 -> 1234 div 10 = остаток 4 => буфер = "4" 123 -> 123 div 10 = остаток 3 => буфер = "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

1 Ответ

1 голос
/ 05 февраля 2012

Ну, число цифр для + int не может быть длиннее десяти, поэтому не могли бы вы выделить место для десяти символов и увеличить индекс присваивания в цикле по мере заполнения цифр и возврата базы массива?

- Я не был уверен, что это все, что вам нужно, поэтому я добавил это в качестве комментария, но, поскольку он был , и, поскольку вы новичок, я действительно должен переместить его сюда, как официальный ответ.

...