Variablen?!
-
Hab mich bei Assembler einbischen eingearbeitet. Hab jetzt 'ne Frage: was ist mit Variablen? Die einzigen Variablen die ich jetzt bei Assembler gesehen hab, waren DWORD und WORD! Was ist eigentlich mit Kommazahlen float und double, wie in den Hochsprachen? Und auch andere wie Intenger? Man kann doch nicht mit DWORD matheaufgaben lösen, oder? Kann mich jemand da einbischen aufklären?
mfg A-lex
-
Hi.
So ganz allgemein (fuer weitergehende Informationen Frage bitte konkretisieren) :
DWord, word usw. geben im Grunde genommen keinen Daten-/Variablen-Typ an, sondern nur die Groesse eines Datenblocks (auf PC 4Byte fuer ein DWord und 2Byte fuer ein Word).
Dahinter kann sich jetzt zB. ein signed oder unsigned integer, ein Pointer, ein String oder auch ein Float verbergen - das kommt eben darauf an, was du mit den Daten an dieser Adresse letztendlich machst und wie du sie interpretierst.
-
Und wie mach ich das jetzt... z.B. ein double deklarieren und es nutzen?
mfg A-lex
-
Ein double passt in ein qword. Wie du es benutzt - naja schau dir halt an, wie es der Compiler macht.
-
Hab diese Tabelle gefunden (soll Variablentypen von Pascal und ihre Gegenstücke in Assembler zeigen).
byte.........BYTE (8 Bit)
word.........WORD (16 Bit)
shortint.....BYTE (8 Bit)
integer......WORD (16 Bit)
real.........FWORD (48 Bit)
single.......DWORD (32 Bit)
double.......QWORD (64 Bit)
comp.........QWORD (64 Bit)
pointer......DWORD (32 Bit)Leider bringt mich das nicht weiter, da ich nicht weis wie man mit denen umgeht. Kann mir jemand helfen oder ein Tut empfehlen, denn in den Tuts die ich hate, sind die auf sowas nicht eingegangen!
mfg A-lex
-
Kann mir jemand helfen? Wie mache ich jezt klar, dass ich ein double haben will und nicht was anderes, den in den datentyp können ja vieles reinpassen!
mfg A-lex
-
A-lex schrieb:
Wie mache ich jezt klar, dass ich ein double haben will und nicht was anderes, den in den datentyp können ja vieles reinpassen!
Zuweisung einer Fliesskommazahl funktioniert in den meisten Assemblern folgendermassen (hier am Beispiel von TASM) :
dataseg ;irgendein initialisiertes Datensegment... MyDouble dq 1.2 ;1,2 - 8Byte QWord
Fertig ist deine mit dem Wert 1,2 vorinitialisierte 8Byte real-Variable (long-real).
Hth, ansonsten weiss ich nicht, was du meinst...
Eine feste Zuweisung des Typs "double" zu einer Variable ist ja wie bereits gesagt nicht moeglich.
-
Kann man mit der Variable normal rechnen z.B. 1.2 - 30.9?
mfg A-lex
-
Ja.
-
Wie!!
-
Krieg' dich mal wieder ein...
Kleines Beispiel unter Verwendung der FPU - wieder TASM:IDEAL P586 model tiny ;DOS .com dataseg MyFloat dq 1.2 ;long-real codeseg org 100h start: ;FPU initialisieren finit wait ;real laden fld [qword ptr ds:MyFloat] ;real auf st(0) addieren fadd [qword ptr ds:MyFloat] ;real in Speicher schreiben und Stack leeren fstp [qword ptr ds:MyFloat] ;beenden ret End Start
Wenn du mehr ueber die FPU lernen willst, kauf' dir ein gutes Asm-Buch. => BoardSuche - wurden schon oefters welche vorgeschlagen.
Alternativ schauen, wie dein Compiler das macht - wurde auch schon einmal vorgeschlagen.
Mit google habe ich das hier gefunden. Sieht ganz brauchbar aus.
Ansonsten darfst du natuerlich auch selbst dein Glueck mit google versuchen.
-
a-lex: Schau Dir mal die Fliesskomma-Befehle des Prozessors an.
FADD z.B. addiert zwei Fliesskommazahlen. Du kannst Dir das IA-32 Referenzhandbuch als PDF-Datei direkt bei Intel runterladen. Geh mal auf deren Webseite zu Mikroprozessoren, such Dir einen aus, und dann zu technische Dokumentation, Referenzhandbuecher usw.
Mit FLD kannst Du z.B. eine Variable in ein Fliesskomma-Register laden.
-
Kann man eine Konstante der FPU übergeben??
mfg A-lex
-
nur einige sehr häufig benutzte konstanten, zb:
fldz ; lädt die 0 nach st(0) fld1 ; lädt die 1.0 in st(0) fldpi ; lädt die zahl [latex]\pi[/latex] in st(0)
all das, wofür es keinen befehl gibt, musst du in einer speicherstelle abspeichern und dann die speicherstelle laden:
blubb dd 0.15391623 ... ... ... fld dword ptr [blubb]