Я пытаюсь связать c-код с asm. Но он работает неправильно, и я не могу найти проблему.Почему этот код asm не удваивает значение указательных точек
program.c
#include<stdio.h>
int *asm_multi(int *ptr);
int main()
{
int i=10;
int *p=&i;
asm_multi(p);
printf("%d\n",*p);
return 0;
}
code.asm
.section .text
.global asm_multi
.type asm_multi,@function
asm_multi:
pushl %ebp
movl %esp,%ebp
movl 8(%ebp),%eax
movl %eax,%edx
leal (%edx,%edx,1),%edx
movl %edx,%eax
movl %ebp,%esp
popl %ebp
ret
Я создаю конечный исполняемый файл по
as code.asm -o code.o
gcc program.c code.o -o output
./output
Вывод, который он печатает, составляет: 10, в то время как я ожидаю: 20
В чем проблема с кодом? Не учитывайте эффективность программы. Я только что начал программирование asm.
Я создал над кодом после чтения из более сложного примера, хранящегося в this link. Это прекрасно работает.
Unrelated, если вы только начали ассемблера программирования и знать C, тратить время заливки на * простые * функции, посланные через компилятор C с ASM-поколения включен ('-S') при различных вкусы оптимизации (в том числе нет) могут быть * очень * информативными, и я настоятельно рекомендую его. Эта функция была бы * превосходным * кандидатом для этой техники. – WhozCraig
@WhozCraig: Это действительно полезно :) – InQusitive