PDA

Visualizza la versione completa : [C++/ASM] Confronto aree triangoli C++/ASM


icsbart
23-12-2013, 20:16
Confronto di 2 aree di rettangoli con dichiarazione delle variabili in c.
A parte il fatto che il codice non ottimizzato, non funziona correttamente e non capisco il perch!?

#include <iostream>using namespace std;


void main()
{
short int a1=0;
short int b1=0;
short int a2=0;
short int b2=0;
short int area1=0;
short int area2=0;
short int temp1;
short int temp2;
cout<<"Inserisci l'altezza del primo triangolo"<<endl;
cin>>a1;
cout<<"Inserisci la base del primo triangolo"<<endl;
cin>>b1;
cout<<"Inserisci l'altezza del secondo triangolo"<<endl;
cin>>a2;
cout<<"Inserisci la base del secondo triangolo"<<endl;
cin>>b2;




_asm
{
MOV AX,a1
MUL AX;b1
MOV BX;2
DIV AX;BX
MOV area1;AX


MOV AX,a2
MUL AX;b2
MOV BX;2
DIV AX;BX
MOV area2;AX


MOV AX;area1
MOV BX;area2
CMP AX;BX


JE UGUALI
}


cout<<"Le due aree non sono uguali"<<endl;
_asm
{
SALTA
}


UGUALI:
cout<<"Le due aree sono uguali"<<endl;


SALTA:
system("pause");
}

oregon
23-12-2013, 20:24
Magari spendi qualche parola in pi su cosa dovrebbe fare esattamente il programma e cosa invece succede ...

A parte il fatto che parli di rettangoli e di triangoli ci sono dei ; nelle istruzioni al posto di , ad esempio

MUL AX;b1

e non si sa cosa sia

SALTA

icsbart
23-12-2013, 20:44
Si scusa era di fretta per andare a mangiare, allora il programma prende i dati in entrata e calcola le aree dei triangoli e le confronta in assembly,il SALTA l'etichetta che ho usato se le due aree non sono uguali ma mi sa che di troppo e non necessario.
MUL AX,b1 fa la moltiplicazione tra il registro AX (che contiene l'altezza) e la variabile b1 (base) e mette in risultato in AX o mi sbaglio?

Errore 1 error C2414: numero di operandi non valido c:\users\nuovo\documents\visual studio 2012\assemblyjump\assemblyjump\origine.cpp 27 1 assemblyjump

questo l'errore (Numero di operandi non valido) che si verifica nella riga 27 (MUL AX,b1)-29(DIV AX,BX)-33(MUL AX,b2)-35(DIV AX,BX)
poi c'
Errore 5 error C2400: errore di sintassi dell'assembler inline in 'codice operativo'. Trovato 'newline'. c:\users\nuovo\documents\visual studio 2012\assemblyjump\assemblyjump\origine.cpp 49 1 assemblyjump
49 ( dove c' il "}" prima di SALTA)

ho sostituito i ; con le , ma da' sempre gli stessi errori,in assembly sono molto impacciato (nell'ultima verifica ho preso 3,5 ma per fortuna vado bene in sistemi e reti),grazie di tutto

oregon
23-12-2013, 20:48
Intanto i ; vanno sostituiti con , e non puoi scegliere se farlo o no ...

Poi SALTA necessario ma io mi riferisco a quello che hai scritto dentro la _asm che non si capisce ... ma sono sicuro correggerai ...

Infine, cosa pi importante, le MUL e le DIV sono sbagliate ... devono essere

MUL b1

MUL b2

DIV BX

Riproponi il codice corretto con gli altri eventuali errori

icsbart
23-12-2013, 20:59
Ah vero che utilizzano sempre il registro privilegiato AX me l'ero scordato,l'ho sistemato ora va perfettamente.
Grazie mille :)

Loading