############################################################################ ## Es wird gezeigt, wie eine Zeichenkette in eine Zahl umgewandelt wird. ## Zeichen, die keine Zahl darstellen, werden ignoriert. ## Bsp.: 284 -> 284 ## 2d8s4 -> 284 ## Im Register zahl steht am Ende die konvertierte Zahl. ############################################################################ LOC Data_Segment GREG @ strZahl BYTE "435",0 % unsere Zeichenkette, die umgewandelt werden soll LOC #100 char IS $1 % Adresse eines einzelnes Zeichen vom String string IS $2 % Adresse des Strings tmp IS $3 % Hilfsvariable zum Speichern vom Vergleichswert i IS $4 % Laufvariable zahl IS $5 % die umgewandelte Zahl Main SET i,0 % Laufvariavle mit 0 initialisieren SET zahl,0 % Zahl auf 0 setzen LDA string,strZahl % Adresse von der Zeichenkette in string laden Loop LDB char,string,i % lade i-tes Zeichen (wir fangen bei 0 an!) BZ char,endloop % prüfe ob Zeichen 0, also den String terminiert CMP tmp,char,#a % prüfe, ob Zeichen ein Zeilenumbruch ist BZ tmp,endloop % char == 0 (Stringtermination) % Es wird nun überprüft, ob sich das aktuelle Zeichen im ASCII-Bereich % zwischen 48 (die 0) und 57 (die 9) befindet. % Vergleiche Zeichen mit dem ASCII-Zeichen '0', '0' hat den Wert 48 CMP tmp,char,'0' BN tmp,elseLoop % falls das Zeichen kleiner 48 -> keine Zahl -> nächstes Zeichen CMP tmp,char,'9' % Vergleiche nun mit ASCII-zeichen '9', '9' hat den Wert 57 BP tmp,elseLoop % falls das Zeichen größer 57 -> keine Zahl -> nächstes Zeichen % das aktuelle Zeichen ist im Bereich 48-57 % es werden nun 48 abgezogen, um die richtige Ziffer zu haben SUB char,char,48 MUL zahl,zahl,10 % unsere Ergebnis-Zahl wird nun mit 10 multipliziert ADD zahl,zahl,char % und anschließend die eben konvertierte Ziffer hinzuaddiert (Horner-Schema) elseLoop ADD i,i,1 % erhöhe die Zählvariable JMP Loop % springe zum Schleifenanfang endloop TRAP 0,Halt,0 % beende Programm