Descoperirea cunoştinţelor
/ Knowledge Discovery >> Descoperirea cunoştinţelor >> tech >> calculator >> hardware de calculator >>

Cum Microprocesoare Work

țin de, să abordeze
  • JLE adr - Salt, în cazul în care mai mică sau egală, pentru a aborda
  • STOP - executarea Oprire Site-ul

    Dacă ați citit Cum de programare C funcționează, atunci știi că această simplă bucată de cod C va calcula factorialul 5 (în cazul în care factorialul 5 = 5! * = 5 * 4 * 3 * 2 1 = 120):
    o = 1; f = 1; în timp ce (o < = 5) {f = f * o; a = a + 1;}

    La sfârșitul execuției programului, F variabilă conține factorialul 5.
    limbaj de asamblare

    AC compilator traduce acest cod C în limbaj de asamblare. Presupunând că RAM începe la adresa 128 în acest procesor, și ROM (care conține programul de limbaj de asamblare) incepe de la adresa 0, atunci pentru microprocesor nostru simplu limbajului de asamblare ar putea arata astfel:
    //presupunem o este la adresa 128 //Presupunem F este la adresa 1290 CONB 1 //a = 1; 1 SAVEB 1282 CONB 1 //f = 1; 3 SAVEB 1,294 LOADA 128 //daca a > 5 saltul la 175 CONB 56 COM7 JG 178 LOADA 129 //f = f * o, 9 LOADB 12810 MUL11 SAVEC 12912 LOADA 128 //a = a + 1; 13 CONB 114 ADD15 SAVEC 12816 SALT 4 //bucla înapoi la if17 STOP ROM

    Deci, acum, întrebarea este, " Cum toate aceste instrucțiuni arata in ROM " Fiecare dintre aceste instrucțiuni limbaj de asamblare trebuie să fie reprezentat de un număr binar. Din motive de simplitate, să presupunem fiecare instrucțiune în limbaj de asamblare este dat un număr unic, cum ar fi aceasta: Site-ul

  • LOADA - 1
  • LOADB - 2
  • CONB - 3
  • SAVEB - 4
  • SAVEC mem - 5
  • ADD - 6
  • SUB - 7
  • MUL - 8
  • DIV - 9
  • COM - 10
  • JUMP adr - 11
  • JEQ adr - 12
  • JNEQ adr - 13
  • JG adr - 14
  • JGE adr - 15
  • JL adr - 16
  • JLE adr - 17
  • STOP - 18 Site-ul

    Numerele sunt cunoscute ca Opcodes. În ROM, programul nostru mic ar arata astfel:
    //presupunem o este la adresa 128 //Presupunem F este la adresa 129Addr opcode /value0 3 //CONB 11 12 4 //SAVEB 1,283 1,284 3 //CONB 15 16 4 //SAVEB 1,297 1,298 1 //LOADA 1289 12810 3 //CONB 511 512 10 //COM13 14 //JG 1714 3115 1 //LOADA 12916 12917 2 //LOADB 12818 12819 8 //MUL20 5 //SAVEC 12921 12922 1 //LOADA 12823 12824 3 //CONB 125 126 6 //ADD27 5 //SAVEC 12828 12829 11 //JUMP 430 831 18 //STOP

    Puteți vedea că șapte linii de cod C au devenit 18 de linii de asamblare limbă, și care a devenit 32 de bytes în ROM.
    decodare

    Decodorul de instrucțiuni are n