Вопрос состоит из программы сборки, которая принимает входные данные из программы на C и делит их на число, а остаток возвращает программе C для печати в виде строки.
Вот мой коддля обоих:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
char *str;
str = malloc(1<<9);
printf("Enter a number: ");
scanf ("%d", &i);
printf("Number: %i\n", i);
str=int2string(i);
printf("Number as string is: %s\n", str);
return 0;
}
ASM =
%include "asm_io.inc"
segment .data
segment .bss
buffer resd 4
segment .text
global int2string
int2string:
enter 0,0 ; setup routine
pusha
mov edx, 0
mov eax, [ebp+8] ; eax contains input value of int2string
mov ebx, 10 ; sets ebx to value of 10
div ebx ; eax = eax / ebx
call print_int ; prints eax = quotient
call print_nl ; next line
mov eax, edx ; store edx (remainder) in eax
call print_int ; print remainder
call print_nl ; next line
add eax, 48 ; convert result into ASCII character
popa
mov dword[buffer], eax ; move ASCII character (if I replace eax with 48-57
; it prints 0-9 correctly)
mov eax, buffer ; move buffer value to eax
leave
ret
Насколько я понимаю, коды ASCII для чисел 0-9 находятся в диапазоне 48-57, но если я не поставлючисло явно в буфере перемещается, затем выводом является либо мусор, либо ошибка сегментации.
Я что-то здесь упускаю (eax со значением 2 + 48, должен быть ASCII (50) = '2')