This shows you the differences between two versions of the page.
|
apm:laboratoare:03:continut [2024/02/29 15:06] 127.0.0.1 external edit |
apm:laboratoare:03:continut [2025/10/27 00:04] (current) teodor_stefan.dutu [0. Friendly reminders] Replace "CN" with "APM" |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ==== 0. Friendly reminders ==== | ==== 0. Friendly reminders ==== | ||
| - | Cum citim un datasheet? [[http://www.atmel.com/images/atmel-8235-8-bit-avr-microcontroller-attiny20_datasheet.pdf|ATTiny20]] | + | Cum citim un datasheet? [[https://ocw.cs.pub.ro/courses/_media/apm/laboratoare/atmel-0856-avr-instruction-set-manual.pdf|AVR ISA]] |
| <spoiler Interpretare documentație instrucțiune> | <spoiler Interpretare documentație instrucțiune> | ||
| Line 16: | Line 16: | ||
| </spoiler> | </spoiler> | ||
| - | <note important>Veți observa că în datasheet veți găsi opcode-uri pe 16 și pe 32 de biți (pentru instrucțiuni). În cadrul laboratoarelor de CN veți folosi doar instrucțiuni pe **16 biți**, deoarece am ales să implementăm o versiune mai restrânsă a procesorului, care nu are acces la toate resursele sale. De exemplu: nu avem 32 de registre locale, ci doar 16.</note> | + | <note important>Veți observa că în datasheet veți găsi opcode-uri pe 16 și pe 32 de biți (pentru instrucțiuni). În cadrul laboratoarelor de APM veți folosi doar instrucțiuni pe **16 biți**, deoarece am ales să implementăm o versiune mai restrânsă a procesorului, care nu are acces la toate resursele sale. De exemplu: nu avem 32 de registre locale, ci doar 16.</note> |
| Line 122: | Line 122: | ||
| === 2.2 Semnale importante în scheletul de cod === | === 2.2 Semnale importante în scheletul de cod === | ||
| - | Fata de laboratorul anterior, veți găsi o serie de semnale noi ce au fost adăugate unor modulelor procesorului nostru pentru a putea permite implementarea instrucțiunilor de lucru cu memoria. În această secțiune va fi explicat pe scurt rolul acestor semnale noi și utilitatea lor. | + | Fata de laboratorul anterior, veți găsi o serie de semnale noi ce au fost adăugate modulelor procesorului nostru pentru a putea permite implementarea instrucțiunilor de lucru cu memoria. În această secțiune va fi explicat pe scurt rolul acestor semnale noi și utilitatea lor: |
| - **//decode.v//** | - **//decode.v//** | ||
| Line 144: | Line 144: | ||
| * //LDD Rd, Y// - in aceasta varianta, adresa din registrul Y este nemodificata în urma execuției | * //LDD Rd, Y// - in aceasta varianta, adresa din registrul Y este nemodificata în urma execuției | ||
| * //LDD Rd, Y+// - Post increment; adresa este incrementata după ce se face accesul | * //LDD Rd, Y+// - Post increment; adresa este incrementata după ce se face accesul | ||
| - | * //LDD Rd, -Y// - Pre increment; adresa este decrementată înainte de a se face accesul | + | * //LDD Rd, -Y// - Pre decrement; adresa este decrementată înainte de a se face accesul |
| * //LDD Rd, (Y+q)// - Displacement; adresa de la care se citește este specificata de registrul Y plus un deplasament (o constanta pe 6 biți codificata în instrucțiune) | * //LDD Rd, (Y+q)// - Displacement; adresa de la care se citește este specificata de registrul Y plus un deplasament (o constanta pe 6 biți codificata în instrucțiune) | ||
| - **LDS** - Instrucțiune pentru load direct din spațiul de date în registru. Asemănător cu LDI, aceasta instrucțiune codifica o constanta //k//, însă aceasta are o semnificație cu totul diferita. Aici, //k// codifica adresa din spațiul de date de la care se va face operația de load. Formula pentru calculul acestei adrese o găsim în datasheet: //**ADDR[7:0] = (~INST[8], INST[8], INST[10], INST[9], INST[3], INST[2], INST[1], INST[0])**//. biții 10, 9, 8, 3, 2, 1, 0 din instrucțiune reprezinta biții ce îl codifica pe //k//. | - **LDS** - Instrucțiune pentru load direct din spațiul de date în registru. Asemănător cu LDI, aceasta instrucțiune codifica o constanta //k//, însă aceasta are o semnificație cu totul diferita. Aici, //k// codifica adresa din spațiul de date de la care se va face operația de load. Formula pentru calculul acestei adrese o găsim în datasheet: //**ADDR[7:0] = (~INST[8], INST[8], INST[10], INST[9], INST[3], INST[2], INST[1], INST[0])**//. biții 10, 9, 8, 3, 2, 1, 0 din instrucțiune reprezinta biții ce îl codifica pe //k//. | ||