Montajda kodu çalıştıran C'deki ana işlevim var. Sadece basit toplamı yapmak istiyorum:Parametreleri C'den GNU'ya geçirme 64bit'de montaj işlevi
main.c
#include <stdio.h>
extern int addByAssembly(int first_number, int second_number);
int main (int argc, char **argv)
{
int sum=0;
sum = addByAssembly(5,4);
printf ("%d\n",sum);
return 0;
}
addByAssembly.s
.data
SYSREAD = 0
SYSWRITE = 1
SYSEXIT = 60
STDOUT = 1
STDIN = 0
EXIT_SUCCESS = 0
.text
#.global main
#main:
#call write
#movq $SYSEXIT, %rax
#movq $EXIT_SUCCESS, %rdi
#syscall
#********
.globl addByAssembly
addByAssembly:
pushq %rbp
movq %rsp, %rbp
movq 16(%rsp), %rax
addq 24(%rsp), %rax
movq %rbp, %rsp
popq %rbp
Ama benim sum karışıklık var.
movq $123, %rax
dönüş değeri ben birçok yol denedim 123. olmakla toplamına düzgün bu nasıl bulamıyor: Ben bunu yaparsam beause i kötü, argümanlar geçmesi gibi görünüyor.
düzgün argümanlar yakalayan, aslında, sen doğrulamak için bir hata ayıklayıcı ile arasında adım adım denediniz mi? –
ABI'yi okudunuz, anladınız ve takip ettiniz mi? Tartışmanın yığından geçtiğini düşünmüyorum. Genel olarak, inline-assembler kullanın. – Olaf
Şey, yapmadım. Benim dilimde bu konuyla ilgili herhangi bir bilgi yoktur ve ingilizcede sanat eserleri oldukça tekniktir. C'den kayıt defterine int geçişinin yanlış olduğunu farz ediyorum, ama neyin uygun olduğunu bilmiyorum. Hiç bir örnek bulamadım, bu yüzden buradayım. 32bit eşek – user2678074