Inhaltsverzeichnis

ASM

Aufbau einer CPU

Lecture recordings
Fahrplan zum Vortrag
Blockplan
CPU Simulator
A list of awesome high res pictures

Intel 4004 Project

Misc

Arithmetisch er Shift = Mit vorzeichen

Shift (*2): x = x+x , schiebt eine 0 von rechts rein

Framepointer um sich zu spaaren alles vom stack runter zu nehmen

Bis zum Framepointer vom caler
ab dem fraimpointer vom callee

jal = „jump and load“ … speichert die addresse des nächsten befehls in $ra

Mips hat 2 Coprozessoren

Interrupt = asynchron
exception = synchron

Adressierung

Stack

Zeigt auf die nächste freie Adresse (ja normalerweise nicht, aber WTF).

Register

Endianes

Achtung, genau verdreht als Name vermuten lässt

Big Endian

Großes Ende ⇒ LSB am Ende

Nachteil: Verschieben der Bits wenn Zahl kleiner als Speicherzelle (z.B. Byte in Word speichern)

Little Endian

Kleines Ende ⇒ MSB am Ende

Auffüllen Wenn Zahl Keiner Speicherplatz je nach Vorzeichen!

Umschaltbar

SPIM

Assembler Sprache von MIPS

Direktiven

''.word 1 2 3 0x42''
''.asciiz "Hallo Welt"''
''.word label1 label2 label3'' (Sprungtabelle)

Befehlaufbau

Zielregister zuerst
  1. Register v. Hauptprozessor
  2. Register des Koprozessors
  3. Adressen, Werte, Marken

Adressierungarten

[label] [+] [imm] [(register)]

Befehle

*u = Unsigned ⇒ Auffüllen mit 0
sonst ⇒ Auffüllen mit 0/1 je nach vorzeichen
z.B. lb und lbu

„with overflow“ erzeugt ggf. interrupt

syscall: Nummer in $v0

Unterprogrammaufrufe

Caller Prolog

  1. Caller saved sichern (t*)
  2. Argumente pushen
  3. jal

Callee Prolog

  1. sp setzen
  2. Callee saved sichern (fp, ra, s*)
  3. fp setzen

Callee Epilog

  1. Callee saved wiederherstellen (s*, ra, fp)
  2. sp rücksetzen
  3. jr $ra

Caler Epilog

  1. Caler saver wiederherstellen (t*)

Call conventions

Sowas wird ABI genant.