FAV-ZCU/KIV POT/02. Adresní módy.md

2.9 KiB

Adresní módy

  • různé typy procesorů mohou mít v instrukci 1, 2 nebo více adres
  • operandy mohou ležet v registrech nebo v paměti
  • adresní mechanismus procesoru musí umožnit
    • adresování instrukcí (skoky, větvení, podprogramy)
    • adresování jednoduchých promenných různé délky a typu
    • práci s indexovanými promennými
    • práci se strukturami
  • lze řesit s různým podílem HW a SW
  • pokročilé požadavky
    • segmentování programu
    • stránkování
    • ...

Základní typy operandů

  • podle typu procesoru lze v instrukcích používat různé typy operandů
  1. implicitní operand
    • operand je určen přímo typem instrukce
    • např. RTS
      • naplní PC obsahem adresy určené SP (registry nejsou v instrukci uvedeny)
  2. registrový operand
    • operand je v registru (registrech), které jsou v instrukci explicitně uvedeny
    • např. ADD.B R0H, R0L
      • sečte obsah v registrech, výsledek uloží do R0L
  3. přímý operand
    • operand je uveden přímo v instrukci
    • např. MOV.B #25, R0L
      • uloží hodnotu 25 do R0L
  4. přímá adresa
    • operand je uložen v paměti, jeho adresa je uvedena v instrukci
    • např. MOV.B @043A, R0L
      • uloží do R0L obsah adresy 043A
  5. nepřímá adresa
    • v instrukci uvedena adresa paměti, kde je uložena adresa operandu
    • např. MOV.B @@0500, R0L
      • uloží do R0L obsah adresy na adrese 0500
  6. nepřímá adresa v registru
    • v instrukci uvedena adresa registru, kde je uložena adresa operandu
    • např. MOV.B @R1, R0L
      • uloží do R0L obsah adresy na adrese v registru R1
  7. indexová adresa
    • poloha operandu v paměti určena součtem adresy uvedené v instrukci a obsahem indexového registru
    • počáteční adresa je v instrukci
    • např. MOV.B @(043A+ER1), R0L
      • uloží do R0L obsah adresy ze součtu 043A + obsah registru ER1
  8. bázová adresa
    • poloha operandu v paměti je určena součtem obsahu registru a offsetu uvedeného v instrukci
    • počáteční adresa je v registru
    • např. MOV.B @(4+ER1), R0L
      • uloží do R0L obsah adresy ze součtu obsahu registru ER1 + 4
  9. složená (segmentová) adresa
    • adresa operandu v paměti se vypočítá složením z několika částí, uložených v registrech nebo v operandovém poli instrukce
    • např. MOV.B @(S1:043A), R0L
      • uloží do R0L obsah adresy určené složením registru S1 a hodnoty 043A z operandového pole instrukce (H8S nepodporuje)
  10. relativní adresa
    • adresa operandu v paměti určena součtem obsahu PC a offsetu, uloženém v operandovém poli instrukce nebo v některém registru
    • např. BCS 0005
      • provede skok na adresu PC + 5 (je-li splněna podmínka C = 1)

Little a Big Endian

  • data delší než 1 byte mohou být do paměti ukádána v pořadí
    • LSB ... MSB (= Little Endian)
    • MSB ... LSB (= Big Endian)
  • Intel IA-32 je LE
  • H8S je BE