1 / 18

Antalet operander/instruktion

Antalet operander/instruktion. 0 - stackmaskin ADD - adderar värdena överst på stacken, tar bort dem och lägger dit summan 1 - ackumulatormaskin ADD X - adderar innehåll i ackumulatorn och innehåll i minnescell X, summan i ackumulatorn 2 - tvåadressmaskin - ADD R1,R2

ima
Download Presentation

Antalet operander/instruktion

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Antalet operander/instruktion • 0 - stackmaskin • ADD - adderar värdena överst på stacken, tar bort dem och lägger dit summan • 1 - ackumulatormaskin • ADD X - adderar innehåll i ackumulatorn och innehåll i minnescell X, summan i ackumulatorn • 2 - tvåadressmaskin - ADD R1,R2 • 3 - treadressmaskin - ADD R1 <- R2 + R3

  2. Antal operander i minnet för en vanlig instruktion • 0 - registermaskin (som MIPS) • 1 - register-minne (x86) • 2 - minne-minne (ovanligt numera) • 3 - minne-minne (också ovanligt)

  3. Exempel: stackmaskin • Kod för C = A + B • push A ; innehåll i minnescell ; med adress A läggs på stacken • push B • add • pop C ; översta värdet på stacken tas ; bort och skrivs till minnescell ; med adress C

  4. Exempel: ackumulatormaskin • 1 operand/instruktion, 1 minnesadress/instruktion • Kod för C = A + B • Load A ; innehåll i minnescell med ; adress A kopieras till ackumulator • Add B • Store C ; innehåll i ackumulator kopieras ; till minnescell med adress C

  5. Exempel: registermaskin av register-register-typ • 3 operand/instruktion,0 minnesadresser/instruktion • Kod för C = A + B • Load R1,A • Load R2,B • Add R3 <- R1 + R2 • Store R3,C

  6. De första datorerna var ackumulatormaskiner • Varje bit som skulle lagras i processorn krävde flera elektronrör • Instruktioner kan kodas enkelt och ändå kompakt

  7. Stackmaskiner - eleganta men opraktiska • Endast två värden är enkelt tillgängliga • Ett värde som återanvänds i ett uttryck kan behöva läsas från minnet flera gånger • Enkelt att kompilera uttryck till program för stackmaskin

  8. Register-register-maskin (Risc) • Enkelt instruktionsformat - lätt att avkoda • Många register - lätt att kompilera för • Lätt att konstruera pipelinade processorer • Programmen större än för andra typer • instruktionerna är inte kompakt kodade • programmen innehåller fler instruktioner än för datorer med operander i minnet

  9. Operandutpekning • Operand: värde som används i beräkningen • Immediate: operanden finns i instruktionen • Register: operanden finns i ett register • Om operanden finns i minnet så existerar effektivadressen: adressen till den minnescell där operanden finns

  10. Varför immediate behövs • För konstanter • Konstanterna finns i koden, bra eftersom • värdet är snabbt tillgängligt • värdet tar inte upp plats i ett register • koden ändras inte under körning, "konstanter" som ändras kan ge svårfunna fel

  11. Goda tumregler för processorkonstruktörer • Ortogonalitet:operationer, datatyper, adresseringssätt ska kunna väljas oberoende av varandra • underlättar kodgenereringen • Erbjud byggblock, inte specialinstruktioner • Gör det lätt att se hur snabb koden blir

  12. Multimediainstruktioner • Grafik använder små heltal (8 bitar) • 8 små heltal ryms i ett 64-bits register • Operationer utförs på 8 tal samtidigt • Bryt carry-kedjan, använd vanliga ALU:n • Idéer lånade från vektordatorer, men de var mer flexibla

  13. Multimediainstruktionernas brister • Vektorelement som ska laddas till register är ofta utspridda i stället för intilliggande • Vektordatorer: load/store för utspridda data • strided addressing: t ex vart 3:e element • gather/scatter: en vektor med pekare anger vilka vektorelement som ska laddas/lagras • Multimediatillägg saknar denna adressering

  14. En dålig idé: delayed branch • Definition: instruktionen efter ett villkorligt hopp utförs alltid, även om hoppet tas • Idealiskt i femstegspipeline • Problematiskt i alla andra pipelines

  15. En dålig idé: registerfönster • En Sparc-processor har 48-528 register, men bara 32 i taget är tillgängliga • R0-R7 är globala (och R0 innehåller alltid 0) • R8-R31 ingår i registerfönstret • Fönstret ändras i steg om 16 med instruktionerna save/restore

  16. save (funktionsanrop) restore (retur från funktion)

  17. Varför registerfönster är en dålig idé • Registerfönster optimerar anrop till och retur från funktioner/procedurer/metoder • Vid processbyte har man 47-527 register som ska sparas (R0 är borträknat) • Processbyte inträffar oftare än funktionsanrop

  18. Dåliga idéer kan vara bra • Ett par dåliga idéer räcker inte för att slå ihjäl en instruktionsuppsättning • Delayed branching bidrog till att höja prestanda när Risc var nytt och okänt • Registerfönster skapade intresse för Sparc • Med tiden får man tillräckligt med kisel för bra prestanda trots gamla dåliga idéer

More Related