fehlersuche



  • hier mal ein Beispiel wie man das Menü implementiern könnte:

    MASM			; masm-mode
    .model small
    .Stack 100h 
    
    ; Ausgabe-macros definieren
    	sz macro arg
    		LOCAL szLbl
    		.data
    			szLbl db arg,'$'
    		.code
    		mov dx,OFFSET szLbl
    	endm
    	num macro n
    		LOCAL numLbl
    		.data
    			numLbl db n
    			db '$'
    		.code
    		mov dx,OFFSET numLbl
    	endm
    	print macro args:VARARG
    		FOR arg,<&args>
    
    			xyz INSTR 1,<&arg>,<">
    			IF xyz
    				sz arg
    			ELSE
    				num arg
    			ENDIF
       			mov ah,09h
    	    	int 21h 
    		ENDM		
    	endm
    
    .Code   
    start:
        mov ax, @data 
        mov ds, ax 
    
    	print "Wilkommen",13,10
    @menu:
    	print "Bitte Operation Wählen:",13,10
    	print 9,"Motor   [0]",13,10
    	print 9,"Ansage  [1]",13,10
    	print 9,"stop    [2]",13,10
    	print 9,"Heizung [3]",13,10
    	print 9,"beenden [4]",13,10
    
    	.while 1	; unendlich Schleife
    		mov ah,0ch	; Einghabepuffer löschen
    		int 21		;
        	mov ah,08h
        	int 21h
        	.if al == '0'
        		call proc1
        	.elseif al == '1'
        		call proc2
        	.elseif al == '2'
        		call proc3
        	.elseif al == '3'
        		call proc4
        	.elseif al == '4'
        		.break			; ausbruch aus Schleife -> Prog beenden
        	.else
        		print "Falsche eingabe!",13,10
        		jmp @menu  		
        	.endif		
    	.endw
    
        mov ax, 04c00h 
        int 21h      
    
    proc1 proc 
    
    	print "Motorsteuerung",13,10
    
    	ret
    
    proc1 endp
    
    proc2 proc 
    
    	print "Ansage",13,10
    
    	ret
    
    proc2 endp
    
    proc3 proc 
    
    	print "stop",13,10
    
    	ret
    
    proc3 endp
    
    proc4 proc 
    
    	print "Heizung",13,10
    
    	ret
    
    proc4 endp
    
    end start
    


  • hmm ja das sieht eigentlich besser aus, erinnert sehr an c programmierung mit dem else if und so..

    das problem ist das mein dozent diese version nicht möchte 😞 ich kann ihm sowas doch in der prüfung nicht hinklatschen 😞



  • cookielein schrieb:

    hmm ja das sieht eigentlich besser aus, erinnert sehr an c programmierung mit dem else if und so..

    das problem ist das mein dozent diese version nicht möchte 😞 ich kann ihm sowas doch in der prüfung nicht hinklatschen 😞

    warum nicht? - es ist ein Bestandteil des Assemblers!



  • cookielein schrieb:

    hmm ja das sieht eigentlich besser aus, erinnert sehr an c programmierung mit dem else if und so..

    das problem ist das mein dozent diese version nicht möchte 😞 ich kann ihm sowas doch in der prüfung nicht hinklatschen 😞

    Wuerde ich auch nicht empfehlen, es sei denn du legst es darauf an, das Unterrichtskonzept zu sabotieren. 😃
    Ist vielleicht uebersichtlich und kann evtl. vom TASM verarbeitet werden (obwohl ich nicht weiss, ob die MASM-Unterstuetzung beim TASM so weit reichte), aber das ist eben kein Assembler-Code, sondern MASM-Code.



  • Es kann hilfreich sein, seine Programmteile modular anzulegen. Auf diese Weise lassen sich bestimmte Module testen und austauschen - das kann u.a. die Fehlersuche sehr erleichtern.
    Auf diese Weise findet man auch schneller falsche Assembler- oder Linkeraufrufe o.ä.

    z.B.

    Ausgabe1:
    push ax
    mov ah,09
    int 21
    pop ax
    ret
    

    und Aufrufen mit Call Ausgabe1

    Für das vorgelegte Programm empfiehlt sich außerdem, es schrittweise im Debugger auszuführen. Nur die Interrupts sollten nicht schrittweise durchgangen werden, die müssen im Ganzen ausgeführt werden.

    Da bestimmte Fehler wie:

    heizung:
        mov ah,08h
        int 21
    

    auch häufiger vorkommen, kann man sich die Assemblerdirektive EQU zunutze machen:
    (auf diesen praktischen Trick bin ich gar nicht selber gekommen, der stand in dem Buch Programmiersprache Assembler von Reiner Backer drin)

    int 21 EQU int 21h
    


  • nachtfeuer schrieb:

    int 21 EQU int 21h
    

    zeig mir mal einen Assembler, der das Schluckt.



  • DeinMeiser schrieb:

    nachtfeuer schrieb:

    int 21 EQU int 21h
    

    zeig mir mal einen Assembler, der das Schluckt.

    Ok Ok, Sorry - ein Leerzeichen zuviel - es müsste heißen

    int21 EQU int 21h
    

    Sehen wir Sie denn demnächst auch mal wieder in einer tollen Talkshow, Herr Meiser?



  • welche bücher benutz du denn wenn ich mal fragen darf ?

    also ich hab die bücher

    Assembler: Maschinennahes Programmieren von Anfang an. Mit Windows-Programmierung [Taschenbuch]
    Backer, Reiner

    Assembler ge-packt
    Rohde, Joachim

    Assembler: Grundlagen der Programmierung
    Roming, Marcus

    3 bücher und ich komm trotzdem nicht weiter xD



  • Mal eine andere Frage, was erhoffst du dir von der Assembler-Programmierung?
    Das Windowszeugs wird dir nicht viel bringen, außer für eine paar dreckige Hacks. Und die maschinennahe Programmierung ist ja ganz fein, aber eigentlich bringt dir das auch nicht viel. Die Befehle sind nicht bei jedem Assembler gleich, die CPUs haben teilweise unterschiedliche Befehle. Und was noch viel wichtiger ist, die CPUs wollen Aufgaben teilweise völlig unterschiedlich lösen. Mehr als ein wenig Grundverständnis wie so eine Maschine tickt wirst du also nicht erhalten. Da kommt aber auch in C eine Menge rüber, besonders was das praxisrelevante Wissen betrifft.



  • was ich mir erhoffe ? naja um es klar und deutlich zu sagen, ich erhoffe mir die prüfung zu bestehen :))



  • mein fehler ist doch bei der schl5 oder ?



  • ah ich hab mein fehleeeeeer.......... ein h vergessen und alles geht drunter und drüber xD


Anmelden zum Antworten