Call Funktion



  • Hallo ich versuche gerade den Text Hallo 2 mal hintereinander auszugeben vorhin funktionierte es aber jetzt auf einmal nicht mehr hab ich da was falsch gemacht ?

    .MODEL SMALL 
    .STACK 100h 
    .DATA 
    
    Hallo1 DB "hallo",10,13,"$" 
    
    .CODE
    
    start:
    
            mov ax,@data
    	mov ds,ax
    
    	mov dx,offset Hallo1 ; meldung im register dx speichern
    
    	mov cx , 2
            call RepStr
    
    	mov ah,4Ch 
    	int 21h 
    
    RepStr PROC NEAR
    
    	push ax     ; ax wert aufm stack speichern
    	push cx     ; cx wert auf dem stack speichern
    
    	mov ah,09h
    
    LoopLbl:
    
            int 21h	
    
            Loop LoopLbl
    
    	pop cx
    	pop ax   
    
    	ret
    
    RepStr endp 
    
           end start
    


  • So auf den ersten Blick kein Fehler erkennbar.
    Was "funktioniert nicht" (was passiert statt der erwarteten Ausgabe)?
    Was hast du schon versucht, bzw. veraendert?
    Schon mal versucht, mit einem Debugger zu arbeiten?



  • Nobuo T schrieb:

    So auf den ersten Blick kein Fehler erkennbar.
    Was "funktioniert nicht" (was passiert statt der erwarteten Ausgabe)?
    Was hast du schon versucht, bzw. veraendert?
    Schon mal versucht, mit einem Debugger zu arbeiten?

    Kopiert push cx eigentlich den Inhalt des Registers cx auf den Stack oder schiebt ihn dahin? Bzw ist es sichergestellt, dass der Inhalt von cx sich nach push cx nicht geändert hat?



  • Ja, "push cx" ist von der Funktion aequivalent zu folgendem Code

    sub sp, 2
    mov [ss:sp], cx
    


  • Den Text aus der Alten Datei hab in ein neue Datei kopiert und jetzt gehts es ...



  • LOL das ist interessant.

    Datei mit dem Namen test.asm erstellt. <--- Funktioniert

    Datei umbenannt in call.asm <--- Funktioniert NICHT

    Also Datei wieder in test.asm umbenannt und siehe da es funktioniert wieder.

    Hat da wer eine logische erklärung für ?



  • Mhhm wenn ich die Datei nicht call.asm nenne geht es nicht.

    Dann nenn ich sie einfach anders.



  • Wie sieht denn der Aufruf aus?
    Kommandozeile? Batchdatei? Makefile?
    Was steht da genau?



  • Tatsächlich.!
    Wenn die Datei "call.asm" heißt, spruckt er garnichts auf den Schirm aus. 😕

    Assembliert durch: ml call.asm
    Aufruf: call.exe


Anmelden zum Antworten