z-boson hat geschrieben:Hallo.
Ich bin "newbee" in ASM, bin aber schon C/C++ average, hoffe ich doch.
Das aber tut nichst zur Sache.
Ich wollte hier lediglich mein Verständniss zwischen den Unterschieden/bzw interfaces von MASM und MASM32 widergeben und daraufhin einige Kommentare hören, zB. ob das von mir richtig geraffdt wurde.
Ok.
.
1)
MASM32 bringt die ml anstatt "MASM" als Kommandozeilentool mit, die nur über die Umgebungsparameterumstellung von jedem Ordner aus aufzurufen ist?
-
also 'ml.exe' ist der eigentliche Kompiler des MASM32 Packs, und 'ml.exe' wird auch über Kommandozeilen Optionen gesteuert, in dem Umgebungsparameterblock muss 'Set Path' auf den Ordner Zeigen der ml.exe enthält, also ist deine Annahme soweit richtig
2)
Rainer Backers erster Code braucht die .model und .386 Angabe, um zu laufen und nicht "symbol type conflict" in der ersten mov anweisung auszugeben?
die '.model' Angabe teilt MASM die Art der zu erstellenden Datei mit, also Speicherverwendung, Protected Mode oder Real Mode
die '.386' Angabe sagt MASM was für ein Prozessorbefehlssatz zur Verfügung steht.
Ja, 'Symbol Type Conflict' ist möglicherweise eine Fehlermeldung die Ausgegeben wird wenn diese 'Pseudoopcodes' fehlen.
-
3)
Der linker des MASM32 packages ist nicht geeignet für MASM 16 bitting.
-
Richtig!
4)
Wieso nicht?
Wenn ich doch LEDIGLICH nur die anderen Register Sprich exy nutzen will, zusätzlich zu ah, al, warum muss ich, wenn ich doch schon ne 32 ( in meinem Fall 64) Bit Maschine habe, nur auf 16 Bit Regs zugreifen?
-
natürlich kannst Du auch innerhalb eines 32 Bit Programms 16 oder 8 Bit Befehlssatz nutzen. Jedoch umgangssprachlich sind 16 Bit Programme vom Typ '.exe' oder '.com' Programme die unter MS DOS laufen bzw. unter Win2000/XP in der DosBox, der Unterschied liegt ausser in der anderen Speichernutzung auch in der Betriebssystem Schnittstelle: Win32 Programmen nutzen bis auf wenige Ausnahmen (LowLevel Zuriff auf den Festplattencontroller), die Windows API, wärend DOS oder '16 Bit' Programme idr die Interupt 21h und die Bios Interupt Schnittstellen benutzen.
5)
Heisst invalid fixup type 0x0001, dass eine nachträgliche Verbesserung im Code nicht mit einer bereits erstellten .obj geupdated/überschrieben werden kann?
-
Gute Frage, 'Invalid Fixup' ist eine Ausgabe des Linkers und besagt das ein Programmteil nich 'relocatiert' werden kann. Alle .obj fangen mit einem Addressoffset von Null an, und der Relocator fügt zum Zusammensetzen der Teile einen sogenannten 'Delta Offset' hinzu damit alle Speicheraddressen nacher am richtigen Platz liegen.
6)
Kann doch nicht sein, das, bloss weil der MASM32 32 heisst, LEDIGLICH für WINDOWS-APPS optimiert wurde, der muss doch auch die übrigen 32 bit ansprechen können und damit im .486 Mode betrieben werden können.
-
welche übrigen 32 Bit? ein Pentium Processor hat zwei 32 Bit 'Pipelines'
, das bedeutet aber nicht das man diese zur freien Benutzung hat, diese werden zwecks Geschwindigkeitsoptimierung vom Befehlsdecoder des Prozessors verwendet, meines Wissens nach hat das Anwendungsprogramm darauf keinen Einfluss
7)
Ich lade mir den neuen Linker runter, passe die make.bat an, dann läuft das so wie gewollt, auch mit Zugriff auf die übrigen 16 Registerbits?!?!
---
--
Dann kannst Du Programme für MS Dos Erstellen, den Zugriff auf die 'unteren' 16 Bit eines 32 Bit Registers hast Du sowieso (siehe oben).
Hoffe, das wird nicht als Fragenflooding

gewertet, ist nur ne Art selbstcheck, der hier nun frei bombadiert werden darf.
-
Vielen Dank im Voraus.
No Prob. was wäre denn ein Forum wenn man keine Fragen stellen dürfte
