Division in Assembly. Zeichen sind in ASCII gespeichert?

1 Antwort

Nein, natürlich heißt es das nicht. ASCII ist nicht anderes als eine Zeichenkodierung, also eine übereinkunft welche "Nummer" ein Zeichen trägt.

Glücklicherweise liegen die Ziffern aufeinanderfolgend beginnen bei 0 in der Kodierung, sodaß die Addition des Wertes von 48 zum Ziffernwert dem Zeichen der Ziffer entspricht.

RedDevil1982 
Fragesteller
 24.04.2023, 22:10

"Nein, natürlich heißt es das nicht. ASCII ist nicht anderes als eine Zeichenkodierung, also eine übereinkunft welche "Nummer" ein Zeichen trägt."

=> Ok, Verstanden!

Was ich nicht verstehe ist folgendes im divisions loop:

divisionLoop:

mov edx, 0

div edi 

add edx, 48

push edx

...

=> Ich teile wie geschrieben 55 durch 10, wodurch ein Quotient von 5 entsteht, dieser steht im Register eax, und ich habe einen remainder von 5, welcher im Regsiter edx steht.

Jetzt wird hier mit add edx, 48

48 auf den Inhalt des Register edx addiert. Ergbit 53 in ASCII entspricht dem charZeichen 5.

=> D. h. im Register edx steht ursprünglich vor der Addititon +48 der Wert 5

und dieser Wert 5 ist im Assembler Code in ASCII codiert?

0
KarlRanseierIII  24.04.2023, 22:24
@RedDevil1982

Wenn Du vom Quelltext sprichst, dann ja, dort sind Zahlenliterale natürlich ASCII-kodiert, sonst würden sie ja nicht als solche angezeigt.

Im fertigen Binary sieht das natürlich anders aus.

0
RedDevil1982 
Fragesteller
 24.04.2023, 22:25

Oder anders gefragt: Du hast mir ma geschrieben, dass wenn ich den Standartkanal zur Ausgabe verwenden will, dann kann muss ich diesem etwas übergeben, mit dem er etwas anfangen kann.

Als ein char oder einen String in Assembly

Woher weiß ich, dass ich den Standardausgabe Kanal in Assembyl eben nur diese Übergeben kann und keine Zahl?

0
KarlRanseierIII  24.04.2023, 22:40
@RedDevil1982

Das liegt einfach daran, daß der Standardausgabekanal eine Konsole ist und Ziffern in den meisten Kodierungen genauso wie in ASCII kodiert sind.

Würde ich stdout in eien Datei umleiten, dann wäre diese, wenn Du ASCII nach STDOUT schreibst, eben ASCII kodiert, nutzt Du UTF-8, dann UTF-8.

Das Terminal/die Konsole/der Terminalemulator liest quasi Deinen stdout und interpretiert ihn gemäß Festlegung.

0