|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2010
Messaggi: 42
|
[C+ASM]
Ciao a tutti,
devo realizzare un programma in C che richiama una procedura assembler. Per iniziare ho scritto un semlice programma in C che passa due int alla procedura e dovrebbe ritornare la somma. Ma ho diversi dubbi: -con cosa compilo e linko? e come??(sono sotto windows e uso gcc per C e MASM per assembler) -è corretto come definisco la procedura? Procedura in asm Codice:
PUBLIC _sum .model SMALL .stack .data .code .startup .exit _sum PROC neAR push bp MOV BP,SP MOV AX,[BP+4] MOV BX,[BP+6] ADD AX,BX pop bp RET _sum ENDP END Codice:
#include <stdio.h>
extern int sum (int ,int);
void main()
{
int n1,n2;
printf("Inserisci due numeri\n");
printf("Primo numero:");
scanf("%d",&n1);
printf("/nSecondo numero:");
scanf("%d",&n2);
printf("\n");
printf("La somma dei due numeri e':%d",sum(n1,n2));
return;
}
|
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Oct 2005
Città: Cusano Milanino
Messaggi: 147
|
Sotto Win32 e successivo usa il modello flat. Il modello small si utilizzava a 16 bit.
Modifica di conseguenza il codice utilizzando eax, ecc. e di conseguenza gli offset da ebp, visto che cambiano le dimensioni degli int, ecc. Ricordati che deve combaciare con la modalità di compilazione del compilatore C, cioè se compili a 32 bit, gli int sono di 4 byte e così via. Per linkare usa il linker del C. Credo che tu possa comunque specificare entrambi i sorgenti sulla riga di comando del compilatore e quest'ultimo provvede ad invocare lo strumento adatto e poi a linkare. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:19.



















