wiederholung: software-schichten vorlesung t3: kapitel 2 - uni … · 2003-10-31 · 4-bit opcode,...

16
Vorlesung T3: Kapitel 2 Vorlesung Technische Informatik 3 | WS 2003 Befehlsätze von-Neumann Rechner: Speicherorganisation, Adressierungsarten, Vorlesung Technische Informatik 3 | WS 2003 mehrere Abstraktionsebenen Maschinencode Hochsprache (C, Java, ...) Assembler Wiederholung: Software-Schichten I/O-, Unterbrechungsstruktur Systemsoftware Ausrichtung der Daten Art, Zahl der Operanden Rechnerklasse charakteristische Merkmale: (Loader/Assembler/Compiler/Debugger) (Wortbreite, Adressierung, ...) (Alignment/Endianness) (Anzahl/Wortbreite/Reg./Speicher) (Stack-/Akku-/Registermaschine) (Definition aller Befehle) Befehlssatz Speichermodell Klassifikation: ISA = HW/SW-Schnittstelle einer Prozessorfamilie Vorlesung Technische Informatik 3 | WS 2003 = "instruction set architecture" (Ein- und Ausgabe, Interrupts) Artenvielfalt: Vorlesung Technische Informatik 3 | WS 2003 CAN,... ..32 bit 16 .. 32 bit I2C,... ASIP V.90 Safety cardIO MIDI GSM diverse RS232 - Netzwerk hard hard hard soft hard soft soft nein nein Echtzeit keine mittel keine gering gering gering gering hoch hoch 1K .. 1M < 8K 1 K .. 10 M 8 .. 64M => => => ASIP uP, < 64 M uP, DSP ~ 100 uC, 1 uP, 1 uP, 8 .. 64 bit 32 bit 32 bit 1 ASIC 1 uP DSPs 1 uC 1 uC ASICs 1 .. 64M < 1K Speicher - 8 bit Prozessor 3 DSP DSP Sensoren/Aktoren: Tasten, Displays, Druck, Temperatur, Antennen, CCD, ... Echtzeit-, Sicherheits-, Zuverlässigkeitsanforderungen 4 .. 32 bit riesiges Spektrum: 4 bit .. 64 bit Prozessoren, DSPs, digitale/analoge ASICs, ... 32 bit 1 .. 64M < 512M

Upload: others

Post on 01-Aug-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Wiederholung: Software-Schichten Vorlesung T3: Kapitel 2 - uni … · 2003-10-31 · 4-bit Opcode, 4-bit Registeradressen D*CORE: Befehlsformate 15 12 8 4 0 REG.RX REG.RY ALU.OPC

Vorlesung T3: Kapitel 2

Vorlesung Technische Informatik 3 | WS 2003

Befehlsätze

von-Neumann Rechner:

Speicherorganisation,

Adressierungsarten,

Vorlesung Technische Informatik 3 | WS 2003

mehrere Abstraktionsebenen

Maschinencode

Hochsprache (C, Java, ...)

Assembler

Wiederholung: Software-Schichten

I/O-, Unterbrechungsstruktur

Systemsoftware

Ausrichtung der Daten

Art, Zahl der Operanden

Rechnerklasse

charakteristische Merkmale:

(Loader/Assembler/Compiler/Debugger)

(Wortbreite, Adressierung, ...)

(Alignment/Endianness)

(Anzahl/Wortbreite/Reg./Speicher)

(Stack-/Akku-/Registermaschine)

(Definition aller Befehle)Befehlssatz

Speichermodell

Klassifikation:

ISA

= HW/SW-Schnittstelle einer Prozessorfamilie

Vorlesung Technische Informatik 3 | WS 2003

= "instruction set architecture"

(Ein- und Ausgabe, Interrupts)

Artenvielfalt:

Vorlesung Technische Informatik 3 | WS 2003

CAN,...

..32 bit16 .. 32 bit

I2C,...

ASIP

V.90

Safety

cardIO MIDIGSMdiverseRS232-Netzwerk

hard hardhardsofthardsoftsoftneinneinEchtzeit

keine mittel keine gering gering gering gering hoch hoch

1K .. 1M < 8K 1 K .. 10 M8 .. 64M

=>

=>

=>

ASIP

uP,

< 64 M

uP, DSP

~ 100 uC,1 uP,1 uP,

8 .. 64 bit32 bit32 bit

1 ASIC 1 uP DSPs1 uC1 uCASICs

1 .. 64M< 1KSpeicher

-8 bitProzessor

3 DSP DSP

Sensoren/Aktoren: Tasten, Displays, Druck, Temperatur, Antennen, CCD, ...

Echtzeit-, Sicherheits-, Zuverlässigkeitsanforderungen

4 .. 32 bit

riesiges Spektrum: 4 bit .. 64 bit Prozessoren, DSPs, digitale/analoge ASICs, ...

32 bit

1 .. 64M < 512M

Page 2: Wiederholung: Software-Schichten Vorlesung T3: Kapitel 2 - uni … · 2003-10-31 · 4-bit Opcode, 4-bit Registeradressen D*CORE: Befehlsformate 15 12 8 4 0 REG.RX REG.RY ALU.OPC

(CISC, Verwendung in PCs)

(klassischer 32-bit RISC)

("Demo Rechner", 16-bit)D*CORE

MIPS

x86

Systemprogrammierung (Status-"flags", Supervisor-Mode, ...)

(Definition aller Befehle)Befehlssatz

(Byte-/Wortadresse, endianness, ...)Speichermodell

(Anzahl und Art der Rechenregister)Registersatz

:= "instruction set architecture"ISA

= HW/SW-Schnittstelle einer Prozessorfamilie

Vorlesung Technische Informatik 3 | WS 2003

Instruction Set Architecture

Beispiele: (in dieser Vorlesung bzw. im Praktikum)

Vorlesung Technische Informatik 3 | WS 2003

Speicherorganisation

Wie ist der Speicher eines von-Neumann-Rechners organisiert?

Wortbreite, Grösse (=Speicherkapazität)

little-/big-endian

Alignment

Memory-Map

Beispiel PC

spätere Themen:

Cache-Organisation für schnelleren Zugriff

Virtueller Speicher für Multitasking

MESI-Protokoll für Multiprozessorsysteme

Synchronisation in Multiprozessorsystemen

Vorlesung Technische Informatik 3 | WS 2003

Speicher: Wortbreite

Wortbreiten einiger historisch wichtiger Computer

erlaubt 8-bit ASCII, 16-bit Unicode, 32-/64-bit Floating-Point

heute vor allem 8/16/32/64-bit Systeme

Beispiel Intel x86: "byte", "word", "double word", "quad word"

diverse Varianten möglich

#Worte * #Bits/Wort

Speicherkapazität

Hardwaretechnik | III/2002

Hauptspeicher: Organisation

Page 3: Wiederholung: Software-Schichten Vorlesung T3: Kapitel 2 - uni … · 2003-10-31 · 4-bit Opcode, 4-bit Registeradressen D*CORE: Befehlsformate 15 12 8 4 0 REG.RX REG.RY ALU.OPC

Vorlesung Technische Informatik 3 | WS 2003

Big- vs. Little Endian

Anordnung einzelner Bytes in einem Wort (hier 32-bit) ?!

big-endian

little-endian

beide Varianten haben Vor- und Nachteile

komplizierte Umrechnung (siehe nächste Folie)

MSB ... LSB Anordnung, gut für Zahlen

LSB ... MSB Anordnung, gut für Strings

Vorlesung Technische Informatik 3 | WS 2003

Big vs. Little Endian: Beispiele

Umrechnung erfordert Kenntnis der jeweiligen Datentypen

(x86)

(MIPS)

Vorlesung Technische Informatik 3 | WS 2003

Misaligned Access

Speicher wird (meistens) Byte-weise adressiert

aber Zugriffe lesen/schreiben jeweils ein ganzes Wort

was passiert bei "krummen" (misaligned) Adressen?

Programmabbruch

automatische Umsetzung auf mehrere Zugriffe

"Memory Map"=>

aber nicht alle Systeme haben voll ausgebauten Speicher

CPU kann im Prinzip alle möglichen Adressen ansprechen

Beispiel: Windows

Aufgabe des Adress-"Dekoders"

Zuordnung von Adressen zu "realen" Speichern

zusätzliche Speicherbereiche für "memory mapped" I/O

ROM mindestens zum Booten notwendig

Aufteilung in RAM und ROM-Bereiche

"Memory Map"

Vorlesung Technische Informatik 3 | WS 2003

(32-bit Adresse entspricht immerhin 4GB Hauptspeicher...)

Page 4: Wiederholung: Software-Schichten Vorlesung T3: Kapitel 2 - uni … · 2003-10-31 · 4-bit Opcode, 4-bit Registeradressen D*CORE: Befehlsformate 15 12 8 4 0 REG.RX REG.RY ALU.OPC

Memory map: typ. 16-bit System

Vorlesung Technische Informatik 3 | WS 2003

16-bit erlaubt 64K Adressen: 0x0000 .. 0xFFFF

ROM-Bereich für Boot / Betriebssystemkern

RAM-Bereich für Hauptspeicher

RAM-Bereich für Interrupt-Tabellen

I/O-Bereiche für serielle / parallel Schnittstellen

I/O-Bereiche für weitere Schnittstellen

Demo und Beispiele später

V86 Bereich00000000h0010FFF0h

FFFFFFFFh

00400000h

80000000h

C0000000h

Systembereich

gemeinsamgenutzter

privaterAndreßbereichAnwendungen

1 GB

1 GB

knapp 2 GB

Anwendungengenutzt fürgemeinsam

4 MB

1 MB inklusive "8086 A20 bug": real mode Bereich

ungenutzt

DOS-Bereich immer noch für Boot / Geräte (VGA) notwendig

Kernel, Treiber, usw. im oberen 1 GB-Bereich

Vorlesung Technische Informatik 3 | WS 2003

PC: Windows 9x Speicherbereiche

Aufteilung 1 GB / 1 GB / 2 GB

Adressen 00000000h bis ffffffffh

Windows 9x erlaubt bis 4 GByte Adressraum

BIOS (ROM) am oberen Ende

des Adressbereichs

nutzbarer Hauptspeicher

oberhalb ab 1 MB

Speicherbereiche für

Systemaufgaben (hier

Framebuffer der Graphikkarten)

PC: Speicherbereiche, Beispiel

Vorlesung Technische Informatik 3 | WS 2003

eingeschränkte Autokonfiguration über PnP-BIOS

I/O-Adressraum gesamt nur 64 KByte

je nach Zahl der I/O-Geräte evtl. fast voll ausgenutzt

PC: IO-Adressen, Beispiel

Vorlesung Technische Informatik 3 | WS 2003

Page 5: Wiederholung: Software-Schichten Vorlesung T3: Kapitel 2 - uni … · 2003-10-31 · 4-bit Opcode, 4-bit Registeradressen D*CORE: Befehlsformate 15 12 8 4 0 REG.RX REG.RY ALU.OPC

Vorlesung Technische Informatik 3 | WS 2003

Befehlszyklus:

von-Neumann Prinzip: Daten und Befehle im Hauptspeicher

PC program counter Adresse des Befehls

IR instruction register aktueller Befehl

ACC accumulator

registerbank

ein oder mehrere

Rechenregister (Operanden)R0..R31

man braucht mindestens diese Register:=>

Befehlszyklus: (in Endlosschleife):

Programmzähler PC addressiert den Speicher

Befehl dekodieren

Befehl ausführen

gelesener Wert kommt in das Befehlsregister IR

nächsten Befehl auswählen

Laden des Betriebssystems

Erkennung und Initialisierung von I/O-Komponenten

Initialisierung und Selbsttest des Prozessors

dort liegt ein ROM mit dem Boot-Programm

Konfiguration des Chipsatzes

Löschen und Initialisieren der Caches

Prozessor greift auf die Startadresse zu

Befehlszyklus wird gestartet

PC wird auf Startwert initialisiert (z.B. 0xFFFF FFEF)

Reset für die zentralen Prozessor-Register (PC, ...)

Chipsatz erzeugt Reset-Signale für alle ICs

Was passiert beim Einschalten des Rechners?

Vorlesung Technische Informatik 3 | WS 2003

Beispiel: Boot-Prozess

abhängig von der Art (und Länge) des Befehls

bei CISC-Maschinen evtl. weitere Zugriffe notwendig,

Beispiel für 32-bit RISC mit 32-bit Befehlen:

Programmzähler wird inkrementiert

Lesezugriff auf den Speicher

Programmzähler (PC) liefert Adresse für den Speicher

"Befehl holen" Phase im Befehlszyklus:

Instruction Fetch

Vorlesung Technische Informatik 3 | WS 2003

Resultat wird im Befehlsregister (IR) abgelegt

IR = MEM[ PC ]

PC = PC + 4

oder mikroprogrammiert

Ausführungszeit abhängig vom Befehl

Vorlesung Technische Informatik 3 | WS 2003

Instruction Execute

Befehl steht im Befehlsregister IR

Decoder hat Opcode und Operanden entschlüsselt

Ausführung des Befehls durch Ansteuerung

der Register, der ALU, des Speichers

Details abhängig von der Art des Befehls

Realisierung über festverdrahtete Hardware

Realisierung des Mikroprogramms für den D*CORE

Demo (bzw. im T3-Praktikum):

Page 6: Wiederholung: Software-Schichten Vorlesung T3: Kapitel 2 - uni … · 2003-10-31 · 4-bit Opcode, 4-bit Registeradressen D*CORE: Befehlsformate 15 12 8 4 0 REG.RX REG.RY ALU.OPC

Beispiele:

Schiebe-Operationen

load, store, I/O

Befehls-"Klassen":

Vorlesung Technische Informatik 3 | WS 2003

Welche Befehle braucht man?

arithmetische Operationen add, sub, mult, div

logische Operationen

shift-left, rotate

and, or, xor

Vergleichsoperationen

jump, branch

call, return

Maschinensteuerung

Programm-Kontrollfluß

Datentransfers

cmpeq, cmpgt, cmplt

trap, halt, (interrupt)

Beispiele: Intel 80x86, Motorola 68K, DEC Vax

komplexe Befehle mit langer Ausführungszeit

sehr viele Befehle, viele Datentypen

Mischung von Register- und Speicheroperanden

viele Adressierungsarten

komplexe Befehlskodierung, Befehle variabler Länge

typische Merkmale:

mit irregulärem, komplexem Befehlssatz

Bezeichnung für (ältere) Computer-Architekturen

"Complex instruction set computer"

CISC

Vorlesung Technische Informatik 3 | WS 2003

Problem: Compiler benutzen solche Befehle gar nicht

Vorlesung Technische Informatik 3 | WS 2003

RISC

"reduced instruction set computer"

"regular instruction set computer"

Oberbegriff für moderne Rechnerarchitekturen

entwickelt ab ca. 1980 bei IBM, Stanford, Berkeley

IBM 801, MIPS, SPARC, DEC Alpha, ARM

Diskussion und Details CISC vs. RISC später

optimierende Compiler statt Assemblerprogrammierung

Load-Store Architektur, keine Speicheroperanden

viele Register, keine Spezialaufgaben

reguläre Struktur, z.B. 32-bit Wortbreite, 32-bit Befehle

Dekodierung über mehrere, kleine Tabellen

=> "Befehlsformate"

unterschiedliche Aufteilung für unterschiedliche Befehle:

deshalb Aufteilung in Felder: Opcode und Operanden

Problem: Tabelle müsste 2^32 Einträge haben

direkt in einer Tabelle nachschauen (Mikrocode-ROM)

Befehls-Dekodierung

Befehlsregister IR enthält den aktuellen Befehl

Vorlesung Technische Informatik 3 | WS 2003

z.B. einen 32-bit Wert

Wie soll die Hardware diesen Wert interpretieren?

1111 1 0 0 000 00 0 000 1 000011 001110010031

Page 7: Wiederholung: Software-Schichten Vorlesung T3: Kapitel 2 - uni … · 2003-10-31 · 4-bit Opcode, 4-bit Registeradressen D*CORE: Befehlsformate 15 12 8 4 0 REG.RX REG.RY ALU.OPC

Beispiel:

Vorlesung Technische Informatik 3 | WS 2003

Befehlsformat: Einteilung in Felder

Opcode Immediate-Wert

Zielregister

1111 1 0 0 000 00 0 000 1 000011 001110010031

unbenutzt

für Speicherzugriffe

add/sub/incr/shift/usw.ALU-Operation

Werte direkt im Befehl

Operanden / Resultat

Speicher-Adressen

Immediate-Operanden

Opcode

Register-Indizes

eigentlicher Befehl

Lage und Anzahl der Felder abhängig vom jeweiligen Befehlssatz

Befehls"format": Aufteilung in mehrere Felder:

34="sub"

0="alu-op"

"r23"

"0"

"r3"

"r30"

=> r3 = r23 - r30sub r3, r23, r30

Rechenoperation

(optionales Shiften)shift amount

ALU functionfunct:

shift:

Zielregisterdestination registerrd:

zweiter Operandsource register 2rt:

Typ des Befehls

erster Operandsource register 1rs:

Opcodeop:

000 11 11 031 0

0 00 10 011 0 0 00000000011111

shiftop

R-Format

6 bits5 bits5 bits5 bits5 bits6 bits

functrdrtrs

Vorlesung Technische Informatik 3 | WS 2003

Befehlsformat: Beispiel MIPS

Offset

r8 = MEM[ r5+addr ]

6

"r5"

"r8"

lw r8, addr(r5)

35="lw"

=>

Basisadresse

Zielregister

base register

destination register

10001 10 0000001111

address offsetaddr:

address

16 bits

I-Format

Befehlsformat: Beispiel MIPS

Vorlesung Technische Informatik 3 | WS 2003

rs rt

6 bits 5 bits 5 bits

op

0 000 00 0 00000031

0 10

op: Opcode

rs:

Typ des Befehls

rt:

MIPS

sehr einfacher Befehlssatz, 3-Adress-Befehle

SW muß sogar HW-Konflikte ("Hazards") vermeiden

keinerlei HW-Unterstützung für "komplexe" SW-Konstrukte

Koprozessor-Konzept zur Erweiterung

32 Register: R0 ist konstant Null, R1 .. R31 Universalregister

32-bit Wortbreite, 32-bit Speicher, 32-bit Befehle

klassische 32-bit RISC Architektur

"Microprocessor without interlocked pipeline stages"

Vorlesung Technische Informatik 3 | WS 2003

Einsatz: eingebettete Systeme, SGI Workstations/Server

entwickelt an der Univ. Stanford, seit 1982

Load-Store Architektur, nur base+offset Adressierung

Page 8: Wiederholung: Software-Schichten Vorlesung T3: Kapitel 2 - uni … · 2003-10-31 · 4-bit Opcode, 4-bit Registeradressen D*CORE: Befehlsformate 15 12 8 4 0 REG.RX REG.RY ALU.OPC

MIPS: Register

Vorlesung Technische Informatik 3 | WS 2003

R0 ist konstant Null (ignoriert Schreiboperationen)

R1 bis R31 sind Universalregister

32 Register, R0 .. R1, jeweils 32-bit

dies erlaubt einige Tricks:

R5 = -R5 sub R5, R0, R5

R4 = 0 add R4, R0, R0

R3 = 17 addi R3, R0, 17

bne R2, R0, labelif (R2 == 0)...

keine separaten Statusflags

Vergleichsoperationen setzen Zielregister auf 0 bzw. 1:

R1 = (R2 < R3) slt R1, R2, R3

MIPS: Befehlssatz

Vorlesung Technische Informatik 3 | WS 2003

Übersicht und Details: siehe Hennessy&Patterson

3 Befehlsformate: ALU, ALU Immediate, Load/Store, Branch

MIPS: Hardwarestruktur

Vorlesung Technische Informatik 3 | WS 2003

PC

I-Cache ($0 .. $31)

Register ALUs Speicher

D-Cache

oder Simulator mit Assembler (winT3asm.exe / t3asm.jar)

gleiches Registermodell, aber nur 16-bit Wortbreite

Subset der Befehle, einfachere Kodierung

vollständiger Hardwareaufbau in Hades verfügbar

32-bit RISC Architektur, Motorola 1998

M*CORE

PC

R0 .. R15

C ("carry flag")

(um Programmspeicher zu sparen)

D*CORE:

1 Statusregister

Program Counter,

16 Universalregister

16-bit Befehle

besonders einfaches Programmiermodell:

Page 9: Wiederholung: Software-Schichten Vorlesung T3: Kapitel 2 - uni … · 2003-10-31 · 4-bit Opcode, 4-bit Registeradressen D*CORE: Befehlsformate 15 12 8 4 0 REG.RX REG.RY ALU.OPC

Programmierer sieht nur R0..R15, PC, C (carry flag)

D*CORE: Register

C

(Link)

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13

R14

15 0

R15

(SP)

MAR

MDR

MRR

IRPC

015

nWE

nOE

- Befehlsregister

- Bus-Interface

- Programmzähler

- 16 Universalregister

- 1 Carry-Flag

D*CORE: Befehlssatz

mov

addu, addc

subu

and, or xor

lsl, lsr, asr

cmpe, cmpne, ...

ldw, stw

bt, bf

jsr

br, jmp

trap

rfi

move register

logische Operationen

Addition (ohne, mit Carry)

Subtraktion

logische, arithmetische Shifts

Vergleichsoperationen

Speicherzugriffe, load/store

unbedingte Spünge

bedingte Sprünge

Unterprogrammaufruf

Software interrupt

return from interrupt

movi, addi, ... Operationen mit Immediate-Operanden

einfaches Zerlegen des Befehls in die einzelnen Felder

4-bit Opcode, 4-bit Registeradressen

D*CORE: Befehlsformate

015 4812

REG.RX

REG.RY

ALU.OPC

STW.XA

IR<11:0> IMM12

IR

15 0

8 41215 0

015 12 48

15 0

Immediate

Load/Store

Branch

ALU

OPC RX

RXsub-opcOPC imm4

OPC sub-opc RY RX

OPC 12-bit immediate

offset4 RY

Vorlesung Technische Informatik 3 | WS 2003

Adressierungsarten

Woher kommen die Operanden / Daten für die Befehle?

Hauptspeicher, Universalregister, Spezialregister

Wieviele Operanden pro Befehl?

0- / 1- / 2- / 3-Adress-Maschinen

immediate / direkt / indirekt / indiziert / autoinkrement / usw.

wichtige Unterscheidungsmerkmale für Rechnerarchitekturen

Wie werden die Operanden adressiert?

Zugriff auf Hauptspeicher ist ~100x langsamer als Registerzugriff

möglichst Register statt Hauptspeicher verwenden (!)

=>

"load/store"-Architekturen

Page 10: Wiederholung: Software-Schichten Vorlesung T3: Kapitel 2 - uni … · 2003-10-31 · 4-bit Opcode, 4-bit Registeradressen D*CORE: Befehlsformate 15 12 8 4 0 REG.RX REG.RY ALU.OPC

Resultat, zwei Operanden: X = Y + Z

und speichere das Resultat in R2"

"addiere den Inhalt von R4 und R5

add r2, r4, r5

Vorlesung Technische Informatik 3 | WS 2003

Beispiel: Add-Befehl

Rechner soll "rechnen" können

typische arithmetische Operation nutzt 3 Variablen

woher kommen die Operanden?

wo soll das Resultat hin?

Speicher

Register

reg2 = reg4 + reg5

entsprechende Klassifikation der Architektur

(floating point ops.)

interne Hilfsregister

compare

shift, rotate

and, or, xor

liefern Operanden

Register (-bank)

typ. Funktionen:

speichern Resultate

Datenpfad

Vorlesung Technische Informatik 3 | WS 2003

add, add-carry, sub

ALU:

sehr aufwendig , extrem teuer, trotzdem langsam

Woher kommen die Operanden?

Vorlesung Technische Informatik 3 | WS 2003

von-Neumann Prinzip: alle Daten im Hauptspeicher

typ. Operation: zwei Operanden, ein Resultat

"Multiport-Speicher": mit drei Ports ?!

statt dessen:

Register im Prozessor zur Zwischenspeicherung

Datentransfer zwischen Speicher und Registern

RISC: Rechenbefehle arbeiten nur mit Registern

CISC: gemischt, Operanden in Registern oder im Speicher

Load reg = MEM[ addr ]

Store MEM[ addr ] = reg

Speicher

Speicher

addr1

addr2

addr3

data1

data2

data3

Regs

n-Adress-Maschine

Vorlesung Technische Informatik 3 | WS 2003

3-Adress-Format: X = Y + Z

sehr flexibel, leicht zu programmieren

Befehl muss 3 Adressen speichern

2-Adress-Format X = X + Z

eine Adresse doppelt verwendet,

für Resultat und einen Operanden

Format wird häufig verwendet

1-Adress-Format

alle Befehle nutzen das Akkumulator-Reg.

ACC = ACC + Z

häufig in älteren / 8-bit Rechnern

0-Adress-Format TOS = TOS + NOS

Stapelspeicher (top of stack, next of stack)

Adressverwaltung entfällt

im Compilerbau beliebt

Page 11: Wiederholung: Software-Schichten Vorlesung T3: Kapitel 2 - uni … · 2003-10-31 · 4-bit Opcode, 4-bit Registeradressen D*CORE: Befehlsformate 15 12 8 4 0 REG.RX REG.RY ALU.OPC

Vorlesung Technische Informatik 3 | WS 2003

n-Adress-Maschine

Beispiel: Z = (A-B) / (C + D*E) T = Hilfsregister

2-Adress-Maschine

div Z, T

mul T, E

add T, C

mov T, D

sub Z, B

mov Z, A

3-Adress-Maschine

add T, T, C

mul T, D, E

div Z, Z, T

sub Z, A, B

1-Adress-Maschine

load D

mul E

add C

stor Z

load A

sub B

div Z

stor Z

0-Adress-Maschine

mul

add

sub

div

push D

push E

push C

push A

push B

pop Z

StackNOSTOS

(A-B)/(C+D*E)

A-B C+D*E

B A

A

C+D*E

C+D*E

C+D*E

C D*E

D*E

E D

D

0-Adress-Maschine

mul

add

sub

div

push D

push E

push C

push A

push B

pop Z

Stack-Maschine:

Vorlesung Technische Informatik 3 | WS 2003

Beispiel: Z = (A-B) / (C + D*E) T = Hilfsregister

sehr flexibel (aber langsam)

erster Speicherzugriff liest Wert des Pointers

zweiter Speicherzugriff liefert Operanden

Adresse eines Pointers steht im Befehl

"direkt"

"indirekt"

Adressbereich beschränkt

ein zusätzlicher Speicherzugriff

keine zusätzliche Adressberechnung

Adresse des Operanden steht im Befehl

aber Länge des Operanden beschränkt

kein zusätzlicher Speicherzugriff

Operand steht direkt im Befehl"immediate"

Vorlesung Technische Informatik 3 | WS 2003

Adressierungsarten (1)

Adressierungsarten (2)

(andere Bezeichnung: "Versatz-Modus")

Hauptmodus in RISC-Rechnern

ideal für Array- und Objektzugriffe

Speicherzugriff auf (Basisaddresse+offset)

Angabe mit Register und Offset

Inhalt des Registers liefert Basisadresse

"indiziert"

mit der Speicheradresse des Operanden

Befehl spezifiziert ein Register"register-indirekt"

genug Platz für 2- oder 3-Adress Formate

32 Register: benötigt 5 bit im Befehl

wie Direktmodus, aber Register statt Speicher"register"

ein zusätzlicher Speicherzugriff

Vorlesung Technische Informatik 3 | WS 2003

Page 12: Wiederholung: Software-Schichten Vorlesung T3: Kapitel 2 - uni … · 2003-10-31 · 4-bit Opcode, 4-bit Registeradressen D*CORE: Befehlsformate 15 12 8 4 0 REG.RX REG.RY ALU.OPC

(ARM)

(Mips,SPARC)

(x86)2-Wort Befehle (zweites Wort für Immediate-Wert)

opcode regs immediate1631 015

opcode regs unused

immediate32

1-Wort Befehl

2-Wort Befehl

zur Darstellung grösserer Werte:

Immediate-Werte mit zusätzlichem Shift

mehrere Befehle, z.B. obere/untere Hälfte eines Wortes

Länge des Operanden ist kleiner als (Wortbreite - Opcodebreite)

Immediate-Adressierung

"immediate"

Vorlesung Technische Informatik 3 | WS 2003

Operand steht direkt im Befehl, kein zusätzlicher Speicherzugriff

z.B. R3 = Immediate16

Registerbank

Speicher

z.B. R3 = MEM[ addr32 ]

Adressbereich beschränkt, oder 2-Wort Befehl (wie Immediate)

direkte Adressierung

"direkt"

ein zusätzlicher Speicherzugriff

keine zusätzliche Adressberechnung

Adresse des Operanden steht im Befehl

Vorlesung Technische Informatik 3 | WS 2003

31 015

opcode regs unused

addr 32

typische CISC-Adressierungsart, viele Taktzyklen

kommt bei RISC-Rechnern nicht vor

3

4

2

z.B. tmp = MEM[ addr32 ]; R3 = MEM[ tmp ]

tmp1

zwei zusätzliche Speicherzugriffe

keine zusätzliche Adressberechnung

Adresse eines Pointers steht im Befehl

Vorlesung Technische Informatik 3 | WS 2003

31 015

opcode regs unused

addr 32

indirekte Adressierung

"indirekt"

Speicher

Registerbank

indizierte Adressierung, z.B. für Arrayzugriffe:

addr = (Sourceregister + offset)

sourceregister = addr

addr = (Basisregister) + (Sourceregister i)

Vorlesung Technische Informatik 3 | WS 2003

Indizierte Adressierung

Page 13: Wiederholung: Software-Schichten Vorlesung T3: Kapitel 2 - uni … · 2003-10-31 · 4-bit Opcode, 4-bit Registeradressen D*CORE: Befehlsformate 15 12 8 4 0 REG.RX REG.RY ALU.OPC

Weitere Adressierungsarten

Vorlesung Technische Informatik 3 | WS 2003

(immediate)

(register direct)

(index + offset)

(PC + offset)

(PC | offset)

später noch genügend Beispiele (und Übungen)

CISC-Rechner unterstützen diverse Adressierungsarten

Vorlesung Technische Informatik 3 | WS 2003

Adressierung: Varianten

0-Adress (Stack-) Maschine: Java virtuelle Maschine

1-Adress (Akkumulator) Maschine. 8-bit Microcontroller

2-Adress Maschine:

einige x86 Befehle

einige x86 Befehle,

16-bit Rechner

3-Adress Maschine: 32-bit RISC

RISC meistens nur indiziert mit offset

welche Adressierungsarten / Varianten sind üblich?

niemand erwartet, dass Sie sich die Details merken

Hinweis:

die folgenden Folien zeigen eine *vereinfachte* Version

ab 386 auch wie reguläre 8-Register Maschine verwendbar

vollständig irreguläre Struktur: CISC

historisch gewachsen: diverse Erweiterungen (MMX, SSE, ...)

von 8086, 80286, 80386, 80486, Pentium ... Pentium-IV

übliche Bezeichnung für die Intel-Prozessorfamilie

x86:

oder "IA-32": Intel architecture, 32-bit

x86-Assemblerprogrammierung ist "grausam"

x86-Architektur

Vorlesung Technische Informatik 3 | WS 2003

Vorlesung Technische Informatik 3 | WS 2003

Beispiel: Evolution des Intel x86

Page 14: Wiederholung: Software-Schichten Vorlesung T3: Kapitel 2 - uni … · 2003-10-31 · 4-bit Opcode, 4-bit Registeradressen D*CORE: Befehlsformate 15 12 8 4 0 REG.RX REG.RY ALU.OPC

"little endian": LSB eines Wortes bei der kleinsten Adresse

kleinste Adresse

Byte-Offset

Bit-Offset152331 8 7 0

28

24

20

16

12

8

4

0Byte 3 Byte 2 Byte 1 Byte 0

Vorlesung Technische Informatik 3 | WS 2003

x86: Speichermodell

Speicher voll byte-adressierbar mis-aligned Zugriffe langsam

Vorlesung Technische Informatik 3 | WS 2003

x86: Speichermodell

01531

079

status

index, string dst

base of stack segment

index, string src

stackptr

base addr

data, multiply/divide

count: String, Loop

accumulatorAH AL

CH CL

AX

CX

DX

BX

DH DL

BLBH

EAX

ECX

EDX

EBX

ESP

EBP BP

SP

ESI

EDI DI

SI

CS

SS

DS

ES

code segment

stack segment

data segment

extra data segment

FS

GSFPR7

FPR0

FP StatusEIP IP

EFLAGS

PC

8086

Exx ab 386

Vorlesung Technische Informatik 3 | WS 2003

x86: Register

Statusregister (Pentium)

x86: EFLAGS Register

Vorlesung Technische Informatik 3 | WS 2003

Page 15: Wiederholung: Software-Schichten Vorlesung T3: Kapitel 2 - uni … · 2003-10-31 · 4-bit Opcode, 4-bit Registeradressen D*CORE: Befehlsformate 15 12 8 4 0 REG.RX REG.RY ALU.OPC

Adressen: N+4 N+3 N+2 N+1 N

high doubleword low doubleword

high word low word

high low

0313279 63

2**32-1 bits

2**32 -1 bytes

b

bb

(2-complement b/w/dw/qw)

(unsigned b/w/dw/qw)

(32 bit offset)

(16 bit segment + 32 bit offset)

bytes

word

doubleword

quadword

packed BCD

integer

ordinal

BCD

near pointer

far pointer

bit field

bit string

byte string

float / double / extended

(one digit per byte, multiple bytes)

(two digits per byte, multiple bytes)

63

15

31

Vorlesung Technische Informatik 3 | WS 2003

x86: Datentypen: CISC . . .

Stack-Befehle push, pusha, pop, popa

Datenzugriff mov, xchg

Typumwandlung cwd, cdq, cbw (byte->word), movsx, . . .

Sprungbefehle jmp, call, ret, int, iret, loop, loopne, . . .

String-Operationen movs, cmps, scas, load, stos, . . .

"high-level" enter (create stack frame), . . .

diverses lahf (load AH from flags), . . .

Segment-Register far call, far ret, lds (load data pointer)

Binärarithmetik add, adc, inc, sub, sbb, dec, cmp, neg, . . .

mul, imul, div, idiv,

Dezimalarithmetik packed / unpacked BCD: daa, das, aaa, aas, . . .

Logikoperationen and, or, xor, not, sal, shr, shr, . . .

CISC zusätzlich diverse Ausnahmen/Spezialfälle=>

x86: Befehlssatz

Vorlesung Technische Informatik 3 | WS 2003

immediate operand

displacement

scale-index-base

address mode specifier

register specifier

opcode

prefix

ausser dem Opcode alle Bestandteile optional

unterschiedliche Länge der Befehle, von 1 .. 37 Byte

extrem aufwendige Dekodierung=>

2)

3)

4)

5)

6)

7)

1)

(eigentlicher Befehl)

(repeat / segment override / etc.)

(diverse Varianten)

außergewöhnlich komplexes Befehlsformat:

(Speicheradressierung)

(Offset)

(Ziel / Quellregister)

x86: Befehlsformate: CISC . . .

Vorlesung Technische Informatik 3 | WS 2003

alle Befehle können mit "Modifiern" ergänzt werden:

segment override Addr. aus angewähltem Segmentregister

repeat für Stringoperationen

Umschaltung 16/32-bit

lock Speicherschutz für Multiprozessoren

Operation auf allen Elementen ausführen

address size

operand size Umschaltung 16/32-bit

x86: Modifier

Vorlesung Technische Informatik 3 | WS 2003

Page 16: Wiederholung: Software-Schichten Vorlesung T3: Kapitel 2 - uni … · 2003-10-31 · 4-bit Opcode, 4-bit Registeradressen D*CORE: Befehlsformate 15 12 8 4 0 REG.RX REG.RY ALU.OPC

002a C3 ret

0029 5D popl %ebp

0027 89EC movl %ebp,%esp

0024 8B5DFC movl -4(%ebp),%ebx | }

.L18:

0022 75E8 jne .L19

001f 803B00 cmpb $0,(%ebx)

001c 83C408 addl $8,%esp | }

001b 43 incl %ebx | s++;

FF 0016 E8FCFFFF call _IO_putc

0015 50 pushl %eax

0012 0FBE03 movsbl (%ebx),%eax

0011 50 pushl %eax

000c A100000000 movl stdout,%eax | putc( *s, stdout );

.L19:

.align 4

000a 7418 je .L18

0007 803B00 cmpb $0,(%ebx) | while( *s != 0 ) {

0004 8B5D08 movl 8(%ebp),%ebx

0003 53 pushl %ebx

0001 89E5 movl %esp,%ebp

0000 55 pushl %ebp | void print( char* s ) {

print:

.text

36210A00

6F207838

0000 48656C6C .string "Hello x86!\n"

.text

.file "hello.c"

------------------------------------------------------------------------------- addr opcode assembler c quellcode

x86: Assembler-Beispiel

-------------------------------------------------------------------------------

addr opcode assembler c quellcode

.Lfe1:

.Lscope0:

002b 908D7426 .align 16 00

main:

0030 55 pushl %ebp | int main( int argc, char** argv ) {

0031 89E5 movl %esp,%ebp

0033 53 pushl %ebx

0034 BB00000000 movl $.LC0,%ebx | print( "Hello x86!\n" );

0039 803D0000 cmpb $0,.LC0

000000 0040 741A je .L26

0042 89F6 .align 4

.L24:

0044 A100000000 movl stdout,%eax

0049 50 pushl %eax

004a 0FBE03 movsbl (%ebx),%eax

004d 50 pushl %eax

004e E8FCFFFFFF call _IO_putc

0053 43 incl %ebx 0054 83C408 addl $8,%esp

0057 803B00 cmpb $0,(%ebx)

005a 75E8 jne .L24

.L26:

005c 31C0 xorl %eax,%eax | return 0;

005e 8B5DFC movl -4(%ebp),%ebx | }

0061 89EC movl %ebp,%esp

0063 5D popl %ebp

0064 C3 ret

x86: Assembler-Beispiel (2)

Beispiel: x86 Befehlskodierung

Vorlesung Technische Informatik 3 | WS 2003

1 Byte .. 36 Bytes

vollkommen irregulär

Beispiel: x86 Befehle

Vorlesung Technische Informatik 3 | WS 2003