Heute mal ein Problem, das ich schon gelöst habe. Finde es aber trotzdem ganz interessant.
In dem Buch "Assembler Workshop" von Bruce Smith gibt es ein Programm namens "Wedge Operating System". Im Prinzip eine einfache Befehlserweiterung über einen Wedge.
Das Programm führt drei Kommandos ein: @cls, @low und @up. Wenn man z.B. "@hallo" eingibt, landet man ohne weiteren Kommentar wieder beim READY-Prompt. So weit, so gut.
Im Code fand ich folgende Passage:
Und ich so: Was soll das denn mit dem sec/bcs? Das Carry-Bit wird doch in .normal sowieso wieder neu bestimmt?
Also mache ich daraus folgende, etwas kürzere Version:
Das sollte doch gehen.... ODER?
Nein, jetzt stürzt das Programm bei der Eingabe von "@hallo" ab!
![]()
Eine Merkwürdigkeit, die mir dabei im Programm auffiel, war die Befehlstabelle:
Ich habe mich die ganze Zeit gefragt, woher das Programm denn weiß, dass die Tabelle zuende ist?
Und natürlich weiß es das eben gar nicht. Es sucht nach dem Ende der Tabelle einfach munter weiter im Programmcode nach irgendwelchen Kommandos. Durch einen dummen Zufall hat meine Änderung dieses Problem aufgedeckt.
Die nötige Korrektur liegt auf der Hand: Führe eine Markierung für das Ende der Tabelle ein und prüfe sie ab. Ich weiß ja nicht, wieso Herr Smith nicht auf diese faszinierende Idee gekommen ist.
Generell bin ich ein bisschen frustriert über die Qualität einiger Assembler-Bücher, mit denen ich mich derzeit beschäftige. Andererseits kann man natürlich auch dazulernen, wenn man solchen Problemen begegnet.
Da ich das Programm schon mal hier habe, lade ich auch mal die (gefixte) Version hier hoch.