2013-03-10 3 views
-1

J'essaie de passer un tableau à mon programme de tri écrit en assemblée. Le code que j'ai à ce jour est:c passer tableau à la fonction nasm

main.c:

#include <stdio.h> 

extern void myFunc(int * somedata); 

int arr[5] = { 3, 2, 33, 11, 1}; 

void main(){ 
    int i; 
    myFunc(arr); 
    for(i = 0; i < 5; i++) 
    { 
    //  printf("%d\n", arr[i]); 
    } 
} 

myFunc.asm:

section .text myFunc mondiale extern printf

myFunc: 
      enter 4,0 
      push ebx 

      push dword [ebp + 8] 
      call printf 

      pop  ebx 
      leave 
      ret 

Ceci est juste un code de test pour apprendre à faire cela. Ma compréhension serait que cela devrait imprimer le pointeur vers le tableau, mais je me trompe probablement. Quelqu'un peut-il me donner un exemple simple de passage d'un tableau à un fichier d'assemblage (NASM).

Merci!

+0

Dans votre assemblage, vous poussez la valeur du pointeur sur la pile juste avant d'appeler printf. Mais je ne vois pas où vous poussez une chaîne de formatage. N'avez-vous pas vraiment besoin de "pousser"% x \ n "' sur la pile? – selbie

Répondre

2

Vous appelez printf avec le premier argument étant le pointeur qui a été passé à myFunc. Cela ne va pas fonctionner - le premier argument doit être une chaîne de format.

Le reste de votre code semble correct. Notez que vous devrez également transmettre la longueur du tableau à votre fonction asm.

1

La meilleure façon de répondre à de telles questions est d'écrire une fonction courte qui effectue les types d'opérations qui vous intéressent en C, et compile cela en assemblage pour faire du reverse engineering.

Questions connexes