2013-03-10 2 views
-1

Я пытаюсь передать массив моей программе сортировки, написанной на сборке. Код, который я до сих пор:c pass array to nasm function

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:

секция .text глобальная MyFunc ехЬегп Printf

myFunc: 
      enter 4,0 
      push ebx 

      push dword [ebp + 8] 
      call printf 

      pop  ebx 
      leave 
      ret 

Это просто некоторый код тестирования, чтобы узнать, как это сделать.

Мое понимание было бы в том, что это должно печатать указатель на массив, но я, вероятно, ошибаюсь.

Может ли кто-нибудь дать мне простой пример передачи массива в файл сборки (NASM).

Спасибо!

+0

В вашей сборке вы нажимаете значение указателя на стек непосредственно перед вызовом printf. Но я не вижу, где вы нажимаете строку форматирования. Вам не нужно «нажимать»% x \ n "' на стек? – selbie

ответ

2

Вы вызываете printf, первым аргументом является указатель, который был передан в myFunc. Это не сработает - первый аргумент должен быть строкой формата.

Остальная часть вашего кода выглядит нормально. Обратите внимание: вам придется передавать длину массива в вашу функцию asm.

1

Наилучший способ ответить на такие вопросы - написать короткую функцию, которая выполняет типы операций, которые вас интересуют на языке C, и скомпилировать их для сборки для обратного проектирования.