2004_week4_2

advertisement
1/
2IC20:
/
eindhoven university of technology
Computersystemen
Week 4:
Instructieformaten
adressering
assembleertalen (zelfstudie !)
faculty of Computer Science
1/
eindhoven university of technology
Instructieformaten: opcode +
adres(sen)
 Adressen bepalen waar gegevens staan/komen
 De operatie-code geeft aan welke instructie het is
 Eigenlijke bewerking + aantal en codering adressen
 Aantal adressen belangrijk criterium





/
0: gegevens op vaste plaats
(“implied”, “stack”)
1: één vast register nodig
ACCU  ACCU + “a”
2: veel flexibeler
“a”  “a” + “b”
3: superflexibel
“a”  “b” + “c”
Meer adressen:
complexere instructies en hardware !
faculty of Computer Science
2
1/
eindhoven university of technology
Instructielengte: afwegingen...
 Vaste lengte: makkelijk ophalen en decoderen (?)
 Aanpassen aan langste: verspilling geheugenruimte
 Korter: woekeren met bits, eenvoudige instructies
 Variabele lengte: efficienter
/
 Instructie en adressen nemen plaats in die nodig is
 Veel complexer ophalen en decoderen
faculty of Computer Science
3
1/
eindhoven university of technology
Expanderende opcodes
15 14 13 12 11 10 9
Opcode
Adres 1
8
7
6
5
Adres 2
4
3
2
1
0
Adres 3
 Vast aantal bits variabel gebruiken, bijvoorbeeld
 Opcode = 0..13: alle drie adressen bruikbaar
 Opcode = 14: adres 1 wordt ‘opcode’ + 2 adressen (2,3)
 Opcode = 15: adres 1+2 worden ‘opcode’ + 1 adres (3)
 Vele verdelingen mogelijk, soms zeer complex !
/
 Optimale verdeling: Huffman algoritme (niet bij stof)
faculty of Computer Science
4
1/
eindhoven university of technology
Instructieformaten practicumprocessor
 Variabele lengte: 1, 2 of 3 bytes
 Opcode altijd in eerste byte




Kiezen tussen R0..R7 gebruikt 3 bits in eerste byte
Kiezen tussen R0 / R1 gebruikt 1 bit in eerste byte
Bij twee instructies 3 bits in eerste byte voor adres
Ongeveer 112 verschillende instructies
 Meeste instructies 0, 1 of 2 adressen
 2 instructies klassificeerbaar als 3-adres instructies
/
faculty of Computer Science
5
1/
eindhoven university of technology
Adresseringsmodi
 (Resultaat) waarden: “Operanden”
 Opgesplitst in “sources” en “destinations”:
“bronnen” en “bestemmingen”
 Direct adres in geheugen specificeren is duur
 Veel bits nodig (daarom niet altijd 3 adres machine !)
 Bovendien weinig flexibel…
 Ingewikkelde adresmodi voor hogere talen
 Veel modi mogelijk, maar geeft complexe processor
/
faculty of Computer Science
6
1/
eindhoven university of technology
Assembleertalen
 Hoofdstuk 7 (t/m 7.1.4) van boek: zelfstudie !
 Assembleertaal:
Taal om met symbolische namen de instructies
en adressen van een processor te beschrijven.
 Laagste niveau bruikbare programmeertaal
 Per tekstregel één instructie
 “Assembler” vertaalt assembleertaal in bitcodes
 “Pseudo-instructies” besturen assembler zelf
 Practicumprocessor: ASM504 assembler
/
faculty of Computer Science
7
1/
eindhoven university of technology
De ASM504 assembler
 Zo simpel mogelijk (maar wel snel...)
 Geen “macro’s”, geen “linker”
 Wijze van opschrijven: Intel Pentium vorm
 Siemens SAB-C504 afgeleid van Intel 8051 processor
 Destination volgt direct na opcode naam
; commentaar
Lus:
ADD
ORG
Temp:
DS
/
volgt na een puntkomma
; dit is een ‘label’
A,Temp ; tel waarde in Temp op bij A
00FFh
; ‘ORiGin’ forceert adres van:
1
; ‘Define Storage’, 1 byte
faculty of Computer Science
8
1/
eindhoven university of technology
“Immediate” adressering
Nederlandse term “onmiddelijk” (bah !)
GEEN ECHT ADRES: waarde in instructie
zelf
 Waarde moet dus een constante zijn !
 Aantal bits varieert afhankelijk van destination
Aangeven in assembleertaal met getal of
berekening die constante waarde geeft
 Bij practicumprocessor een # ervoor zetten:
/
ADD
A,#41
; tel constante 41 bij A register op
faculty of Computer Science
9
1/
eindhoven university of technology
Directe adressering
Volledig adres van operand staat in instructie
 Adres is dus constant !
 Waarde van operand is variabel, de plaats is vast
 Hogere programmeertalen: “globale variabelen”
Assembleertaal notatievorm varieert nogal…
 Bij practicumprocessor: getal of berekening die
constant getal geeft zonder een # ervoor:
ADD
/
A,41
; tel waarde in adres 41 op bij A
; adressen 0 ..127: intern geheugen
; adressen 128..255: SFR’s
faculty of Computer Science
10
1/
eindhoven university of technology
Register adressering
Operand in register met symbolische naam
 Registers binnen CPU: snel, daarom veel gebruikt
 “load/store”: berekeningen alleen tussen registers
Beschikbare registers gegeven in ISA
 Beperkingen in gebruik van registers !
 Bij practicumprocessor belangrijk: A en R0..R7
/
MOV
MOV
R1,A
R2,R3
; “MOVe” copieer waarde in A naar R1
; dit is NIET toegestaan !
faculty of Computer Science
11
1/
eindhoven university of technology
Registerindirecte adressering
 Operand in geheugen, adres hiervan in register
 Lekker flexibel: adres niet vast, kan berekend worden
 Weinig bits om adres in geheugen te specificeren !
 Soms enige mogelijkheid om geheugen te adresseren
 Assembleertaal notatievormen verschillen…
 Meestal geheugenadressering met haken: (R1)
 Bij practicumprocessor met @ (‘at’):
/
ADD
A,@R1
; tel waarde in intern geheugen
; (op adres in R1) op bij A register
faculty of Computer Science
12
1/
eindhoven university of technology
Geïndexeerde adressering
Operand in geheugen op adres aangewezen
met de som van de waarde in een register en
een constante (“offset”) waarde
Aantal bits in offset varieert met bedoeling
/
 Weinig bits: register is hoofdbepaler van adres
“struct” in C, “record” in Pascal
 Veel bits: register varieert (“indexeerd”) het adres
“array” in zowel C als Pascal
faculty of Computer Science
13
1/
eindhoven university of technology
Basisgeïndexeerde adressering
 Operand in geheugen op adres aangewezen met de
som van TWEE registers en (eventueel) een
constante offset waarde
 Het eerste register bevat (variabel) “basis” adres
 Het tweede register varieert (“indexeert”) dit adres
 De offset kan het adres nog (een beetje) verschuiven
 De practicumprocessor kan dit, zonder offset:
/
MOVC A,@A+DPTR ; “MOVe Code”: laad A register
; met waarde in programmageheugen
; op adres dat som is van A+DPTR
faculty of Computer Science
14
1/
eindhoven university of technology
Het kan NOG gekker (niet bij stof)
“Auto increment” en “auto decrement”:
 Waarde in index register automatisch verhogen of
verlagen bij iedere lees/schrijf actie
 “post”: NA de actie, “pre”: VOOR de actie
“Scaled index”:
/
 Waarde in index register wordt niet direct gebruikt,
maar eerst vermenigvuldigd met een constante
 Voor directe ondersteuning van “arrays”
faculty of Computer Science
15
1/
eindhoven university of technology
Stack (“stapel”) adressering (1)
 De stack is een “Last-In-First-Out” geheugen
 “push” operatie plaatst nieuwe waarde in stack
bovenop alle al aanwezige waarden
 “pop” operatie verwijdert “bovenste” waarde uit stack
dat is dus de laatst ge“push”te waarde !
 De bovenste waarde op de stack is de “top of stack”
 Implementatie meestal in normaal geheugen
/
 Met “stack pointer” (“SP”) register wijzend naar de top
 Practicumprocessor: SP adresseert laatst ge“push”te waarde,
stack “groeit” naar hogere adressen
faculty of Computer Science
16
1/
eindhoven university of technology
Stack (“stapel”) adressering (2)
 Stack is handig
 Uitstekend geschikt voor tijdelijke opslag
 Precies adres niet nodig en toch weten waar alles is
 Stack is belangrijk
 Centrale rol bij uitvoeren hogere programmeertalen
 Bij sommige machines vervanging van registers
Het boek gaat hier nog veel verder op in: zelfstudie.
Het postfix-infix conversie-algoritme hoort niet bij de stof !
/
faculty of Computer Science
17
1/
eindhoven university of technology
Adresseermodi voor “sprongen”
PC wijst steeds naar volgende instructie
 Laden PC met nieuwe waarde: sprong in
programma
 “PC-relatief” is geïndexeerd met PC als register
Practicumprocessor als voorbeeld
 PC-relatief, direct en basisgeïndexeerd (A+DPTR)
 NIEUW: “paged” sprong (“AJMP”)
/
 Geheugen verdeeld in 2 kilobyte grote blokken (“pages”)
 Alleen springen binnen blok waar PC al in adresseert
 Slechts 11 bits nodig voor adres (2 byte instructie)
faculty of Computer Science
18
Download