Loop Frage und Olly Frage
-
Hallo zusammen
Ich arbeite mit dem TASM. Ich möchte einen einfachen Loop realisieren, irgendwo wird wohl noch der Hund begraben sein:
NAME Speicher ; Programmname ;-------------------- Symbole definieren ----------------------- LPT1 EQU 378h ; Adresse für Drucker ;-------------------- Datensegment definieren ------------------ Data_s SEGMENT ; Start des Data-Segmentes var1 DB 15 ; Variabel definieren Byte mit 15d var2 DW 1234h ; Variabel definieren Word mit 1234h Data_s ENDS ; Ende des Data-Segmentes ;-------------------- Code Segment / Program ------------------- Code_s SEGMENT ASSUME DS:Data_s, CS:Code_s ; Pseudobefehl Start: MOV AX, Data_s ; Data-Seg init MOV DS, AX endless: NOP MOV AX, 0B800h ; Ausgabe auf der DOS-Konsole MOV ES, AX MOV SI,0 ; Pointer für Quelle, holen MOV DI,0 ; Pointer für Ziel, schreiben in Speicher MOV CX, 5h ; Anzahl Schleifendurchgänge MOV AH, 07h ; Textattribute (Schriftfarbe und Hintergrund) hope: NOP MOV AL, DS:[SI] ; aus Speicher Lesen INC SI LOOP hope Code_s ENDS END Start
Der Loop wird einfach übergangen.
-----------------------------------
Nun zur zweiten Frage, kann ich mit OllyDBG keine selbst erstellen Executables von TASM aufmachen?
Danke für Eure Hilfe.
-
Der Loop wird einfach übergangen.
was sollte dieses programm denn tun, ausser 5 bytes aus ds:si zu lesen aber nirgends hinzuschreiben?
-
Im Moment noch nichts. Ich denke mal, man sollte beim Suchen von Fehlern immer auf ein Minimum von Code beschränken. Es bringt nichts hier ein komplettes Programm zu posten, obwohl der Fehler nur in einem kleinen Segment auftritt.
Code_s SEGMENT
ASSUME DS:Data_s, CS:Code_s ; Pseudobefehl
Start: MOV AX, Data_s ; Data-Seg init
MOV DS, AX
endless:NOP
MOV AX, 0B800h ; Ausgabe auf der DOS-Konsole
MOV ES, AX
MOV SI,0 ; Pointer für Quelle, holen
MOV DI,0 ; Pointer für Ziel, schreiben in Speicher
MOV CX, 5h ; Anzahl Schleifendurchgänge
MOV AH, 07h ; Textattribute (Schriftfarbe und Hintergrund)
hope: NOP
MOV AL, DS:[SI] ; aus Speicher Lesen
MOV ES:[DI],AX ; Zeichen mit Attribut schreiben
INC DI
INC DI
INC SI
LOOP hope
Code_s ENDS
END StartSo nun gibt es auch einen kleinen Sinn, Speicherhinhalt wird auf der Konsole ausgegeben. Ist zwar nicht die beste Möglichkeit, aber was solls.
-
Ich hatte mal irgendwo gelesen, dass loop-Befehl sehr langsam ist... wäre
dec ecx jnz hope
nicht besser?
-
Dann muss doch vorher noch ein cmp rein, dec ändert doch keine Flags.
-
Doch dec setzt die Flags (OF, SF, ZF, AF & PF). Hätteste mal in den Intel Manuals nachgeschaut
Trotzdem würd ich loop verwenden.
-
analyzer schrieb:
Nun zur zweiten Frage, kann ich mit OllyDBG keine selbst erstellen Executables von TASM aufmachen?
Mit OllyDgb kann man nur Win32-Executables öffnen. Für 16-bit brauchst du einen Disassembler/Debugger.
-
bluecode schrieb:
Doch dec setzt die Flags (OF, SF, ZF, AF & PF). Hätteste mal in den Intel Manuals nachgeschaut
Trotzdem würd ich loop verwenden.
Dann habe ich dies wohl falsch im Kopf.
Das Problem mit dem loop besteht immernoch.