J'ai besoin de créer un sous-programme d'assemblage qui prend un tableau de mots doubles et le multiplie par un nombre entier. J'ai mes fichiers main.cpp, multarray.h et multarray.asm ci-dessous. Je dois faire la fonction à la fois dans l'assemblage et c + + puis comparer le temps d'exécution des deux. Je reçois deux erreurs qui sont collées ci-dessus au-dessus de mon code. S'il vous plaît aider, car je ne suis pas sûr pourquoi je reçois cette erreur.Sous-programmes C++ et d'assemblage
Erreurs:
erreur 2 Erreur A1010: imbrication de bloc inégalée: AsmMultArray F: \ Project Assemblée \ Assembly Project \ lab8.asm 25 1 Assemblée erreur de projet 3 erreur MSB3721: La commande « ml .exe/c/nologo/Zi /Fo"Debug\lab8.obj "/Fl".lst"/I "c: \ Irvine"/W3/errorReport: invite /Talab8.asm "est sorti avec le code 1.
Code:
**Main.cpp**
#include <iostream>
#include <time.h>
#include "multarray.h"
using namespace std;
int main() {
long arr1[10] = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
const int multiplier = 7;
time_t startTime, endTime;
//Testing the C++ function
time(&startTime);
CMultArray(multiplier, arr1, 10);
time(&endTime);
cout<<"The time taken to run C++ function is: " <<long(endTime - startTime)<< " seconds.";
//Testing the assembly language procedure
time(&startTime);
AsmMultArray(multiplier, arr1, 10);
time(&endTime);
cout<<"The time taken to run Assembly language procedure is: "<<long(endTime - startTime)<< " seconds.";
return 0;
}
multarray.h
#include <stdio.h>
extern "C"{
//call to assembly language procedure
void AsmMultArray(long multiplier, long arr1[], long count);
//call to c++ language function
void CMultArray(long multiplier, long arr1[], long count);
}
fichier .asm
INCLUDE Irvine32.inc
TITLE MultArray Exmaple
; This program creates the procedure that multiplies the doubleword array by an
; Integer in both assembly and C++ languages and compares the execution times
.MODEL small
.data
AsmMultArray PROC USES edi eax ebx,
multiplier: DWORD, arrPtr: DWORD, count: DWORD
.code
mov edi, arrPtr
mov ebx, multiplier
mov ecx, count
L1:
mov eax,[edi]
mul ebx
mov [edi],eax
add edi,4
loop L1
ret
AsmMultArray ENDP
.
void CMultArray(long multiplier, long arr1[], long count)
{
for(int i=0;i<count;i++)
{
arr1[i]=arr1[i]*multiplier
}
}
Je vérifiais juste: la fonction 'CMultArray' est pas dans le fichier asm, non? En outre, cela a un point-virgule manquant. – Jester
Les erreurs se produisent toujours après avoir ajouté dans le point-virgule –
Vous ne pouvez pas coller le code C dans le fichier asm ... – Jester