codice:
#include<iostream>
using namespace std;
void main()
{
signed short A, B; //Inizializzazione variabili
signed short temp, temp1, temp2, Ris; //Inizializzazione variabili
cout<<"Esercizio di Xxxxx Yyyyy ZZ"<<endl;
cout << "inserisci A = ";
cin >> A;
cout << "inserisci B = ";
cin >> B;
//if ((A < 0) && (B < 0)) { //confronto-salto con AND
// cout << "A e B sono entrambi negativi" << endl;
//}
_asm {
mov AX, A
mov bx, 0
cmp ax, bx
jnl finese
mov ax, bx
mov bx, 0
cmp ax, bx
jnl finese
}
cout << "A e B sono entrambi negativi" << endl;
_asm {
finese:
}
//if (A < 0)
//{ //confronto-salto
// A = A * -1;
// }
_asm {
mov AX, A
mov BX, 0
cmp AX, BX
jnl finese1
MOV AX, A
MOV BX, -1
IMUL BX, AX
finese1:
}
// if (B < 0) { //confronto salto
// B = B * -1;
_asm
{
mov AX, B
mov BX, 0
cmp AX, BX
jnl finese2
MOV AX, B
MOV BX, -1
IMUL BX
finese2:
}
cout << "calcolo con somme e sottrazioni successive ";
cout << "calcolo con somme e sottrazioni in assembly ";
//Ciclo While
/* while (temp > 0)
{
temp1 = temp1 + A;
temp = temp - 1;
}
temp2 = 0;
temp = B; */
_asm
{
MOV AX,0
MOV temp1,AX
MOV BX,B
MOV temp,BX
iniz_ciclo:
CMP temp,0
JLE fin_ciclo
MOV AX,temp1
ADD AX,A
MOV temp1,AX
MOV BX,temp
SUB BX,1
MOV temp,BX
JMP iniz_ciclo
fin_ciclo:
MOV temp2,0
MOV CX,B
MOV temp,CX
inizio_ciclo2:
CMP temp,3
JLE fin_ciclo2
MOV AX,temp
SUB AX,3
MOV temp,AX
MOV BX,temp2
ADD BX,1
MOV temp2,BX
MOV AX,temp1
ADD AX,temp2
MOV Ris,AX
fine_ciclo2
}
cout << "(A * B) + (B / 3) = ";
cout << Ris << endl;
system("pause");
}
La penultima graffa, comunque se ti salta all'occhio bene se no non ti preoccupare che risolvo domani.