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
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