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 Start

    So 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.


Anmelden zum Antworten