Ja, immer beachten mit was für Wertebereiche man arbeitet - hier lädst und speicherst du bytes, also n=8 bit lange Werte. Solange du dem Rechner nicht explizit sagst, dass du ohne Vorzeichen arbeitest ("unsigned"), nimmt er an, dass es sich um eine 2k-Zahl handelt. Und die haben bekanntlich einen Wertebereich von -2^(n-1) bis 2^(n-1)-1, also in diesem Fall von -128 bis 127. 136 ist ausserhalb des Wertebereichs => Überlauf.
[EDIT]
jan_k hat geschrieben:Edit: Funzt nur jetzt in meinem eigentlichen Programm nicht mit lw.. AAAAh
Mit .space 8 reservierst du 8 bytes, also 8 verschiedene Einträge wenn du mit lb/sb arbeitest. Mit lw/sw sind das aber nur 2 Einträge - wenn dein Programm auf das 3., 4. usw Eintrag zugreift (und diesen verändert), und wenn du nach twoway_cache_1 noch ein anderes Label hast, dann werden dessen ersten Einträge überschrieben, was die Inkosistenz erklären könnte.
Nicht vergessen, bei Assembler (und C) hat man keine Gültigkeitsprüfung von Array- und Stringlängen - somit ist es dem Programmierer überlassen, dafür zu sorgen, dass bei Arrayzugriffe keine Out-of-Bounds Probleme auftreten.