есть вопрос, касающийся преобразования целых чисел в строки в 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