Elenet.net
+1 voto

Mi può spiegare assembly con i comandi di input/output in C? le varie operazioni, le condizioni e i cicli? 

Grazie millewink

quesito posto 12 Marzo 2017 in Classe terza da ChiaraCarli Corsista (49 punti)
  
alcuni esempi:

1) Scrivere un programma che dati due numeri interi positivi esegua la somma, la sottrazione e stampi somma e differenza.

#include <stdio.h>

main()
{
  short int n1;
  short int n2;
  short int somma;
  short int diff;

printf("inserisci n1=");
scanf("%d",&n1);

printf("inserisci n2=");
scanf("%d",&n2);

_asm {
              MOV AL, n1
              ADD AL, B
              MOV somma, AL
              MOV AL, n1
              MOV BL, n2
              CMP AL, BL
              JA
             SUB AL, BL
            MOV diff, AL
              JB
             SUB BL, AL
            MOV diff, BL
          }
printf("stampa somma %d",&somma);
printf("stampa diff %d",&diff);
}
2) Calcolare il massimo comune divisore tra due numeri

#include <std.io>

main()
{
  short int n1;
  short int n2;
 short int mcd;

 printf("inserisci primo numero");
scanf("%d",&n1);

printf("inserisci secondo numero");
scanf("%d",&n2);

_asm {
             MOV AL, n1
             MOV AH,n2
 confronto: CMP AL, AH
                   JE fine
                   JB salta
                  SUB AH, AL
                  JMP confronto
salta:    SUB AL,AH
             JMP confronto
fine:       MOV mcd, AH
          }
printf(mcd è: %d,&mcd)
}
Dati due numeri , se la loro somma supera 10, carica nel registro DX il valore 5 altrimenti carica in DX il valore 34

#include <stdio.h>
main()
{
short int n1,n2;

printf("inserisci primo num");
scanf("%d",n1);

printf("inserisci secondo num");
scanf("%d",n2);

_asm {
            MOV AH, n1
            MOV AL, n2
            ADD AH, AL
           CMP  AH,10
          JA magg
           JB min
magg:  MOV DX,5
min:  MOV DX,34
         MOV risul, DX
          }
printf("%d",risul);
}
  return 0;

1 Risposta

+1 voto
Risposta migliore

ti do la spiegazione passo passo in grassetto

1) Scrivere un programma che dati due numeri interi positivi esegua la somma, la sottrazione e stampi somma e differenza.

#include <stdio.h>

main()
{
  short int n1;
  short int n2;
  short int somma;
  short int diff;
n1, n2, somma , diff sono variabili intere  che tu dichiari
printf("inserisci n1=");  // corrisponde al nostro cout<<" inserisci n1 "
scanf("%d",&n1);       // corrisponde al nostro cin>>n1

printf("inserisci n2=");
scanf("%d",&n2);   //  inseriamo n2

qui inizia il modulo assembly


_asm {
              MOV AL, n1       carichiamo  il numero n1 , ad esempio n1 = 5  nel registro AL
              ADD AL, B          sommo il valore di B ad AL    cioè  AL = AL + B    cioè AL = 5 + B
              MOV somma, AL     trasferisco il valore di AL  dentro una variabile chiamata somma

                                     cioè somma = AL
        

     MOV AL, n1       trasferisco n1 dentro AL     cioè AL = n1
              MOV BL, n2    trasferisco n2 dentro BL   cioè BL = n2
              CMP AL, BL    confronto AL con BL   cioè confronto n1 con n2  , corrisponde al nostro if

             JA     qui il codice è sbagliato perchè JA vuol dire Salta se il primo operando è maggiore

                    del  secondo operando, deve saltare da qualche parte   SALTA DOVE? manca il punto in cui deve saltare
             SUB AL, BL     sottrai  AL = AL - BL
            MOV diff, AL     carica nella variabile diff il valore di AL    cioè diff = AL
              JB    errore  come prima , salta dove?
             SUB BL, AL
            MOV diff, BL
          }
printf("stampa somma %d",&somma);
printf("stampa diff %d",&diff);
}

risposta inviata 12 Marzo 2017 da nicolo' guarino Esperto (687 punti)
Selezionata 12 Marzo 2017 da ChiaraCarli

Domande correlate

+2 voti
2 risposte
quesito posto 18 Marzo 2017 in Classe terza da Paolo Migliarba (31 punti) | 168 visite
+1 voto
3 risposte
quesito posto 18 Marzo 2017 in Classe terza da Paolo Migliarba (31 punti) | 164 visite
+1 voto
1 risposta
quesito posto 12 Marzo 2017 in Classe terza da ChiaraCarli Corsista (49 punti) | 84 visite
777 domande
1,565 risposte
638 commenti
1,445 utenti