Hilfe bei Rechenaufgabe



  • In diesen code sollte man über xor, or und and rechnen können:

    DOSSEG
    	.MODEL	SMALL
    	.STACk	100H
    	.DATA
    
    InAsk	dq	10,13,"Gib ein Bolean ein: ",0
    InRec	dq	10,13,"Wähle den Rechentyp: ",0
    InOut	dq	10,13,"Das Ergebnis lautet: "
    
    TRUE	equ	0FFh
    FALSE	equ	0h
    
    	.CODE
    begin: 	mov	ax,@DATA
    	mov	ds,ax
    ;AND-------------------
    	mov	ah,TRUE
    	and	ah,FALSE
    ;XOR-------------------
    	mov	ah,TRUE
    	xor	ah,FALSE
    ;OR--------------------
    	mov	ah,TRUE
    	or	ah,FALSE
    ;Ausgabe---------------
    	writeS	InAsk
    	mov	ah,1
    	int	21h
    	writeS	InRec
    
    	mov	ah,1
    	mov	InOut,1
    	writeS	InOut
    ;Ende------------------
    	mov	ax,4c00h
    	int	21h
    	end begin
    

    Nur leider zeigt mir die Console 7 Errors, und ich finde keine :S
    hoffe auf hilfe.



  • Info: Es ist in TASM geschrieben.



  • - dq -> db (declare byte)
    - wo wird writeS definiert?
    - DOS-Strings werden mit '$' terminiert.
    - InOut ist als Zeichenkette deklariert, wird aber auch wie ein integer verwendet.
    (- TRUE sollte als -1 definiert werden)

    Nur leider zeigt mir die Console 7 Errors

    Schön 😉



  • Mein Code sieht jetzt so aus:

    DOSSEG
    	.MODEL	SMALL
    	.STACk	100H
    	.DATA
    
    InAsk	db	10,13,"Gib ein Bolean ein: ",0
    InRec	db	10,13,"Wähle den Rechentyp: ",0
    InEnd	db	10,13,"Das Ergebnis lautet: "
    
    TRUE	equ	0FFh
    FALSE	equ	0h
    
    	.CODE
    begin: 	mov	ax,@DATA
    	mov	ds,ax
    ;AND-------------------
    	mov	ah,TRUE
    	and	ah,FALSE
    ;XOR-------------------
    	mov	ah,TRUE
    	xor	ah,FALSE
    ;OR--------------------
    	mov	ah,TRUE
    	or	ah,FALSE
    ;Ausgabe---------------
    	print	InAsk
    	mov	ah,1
    	int	21h
    	print	InRec
    
    	mov	ah,1
    	mov	InEnd,1
    	print	InEnd
    ;Ende------------------
    	mov	ax,4c00h
    	int	21h
    	end begin
    

    Was meinst du damit dass mit $ Dos-Strings terminirt werden?
    (ist noch dass einzigste problem



  • Kann mir niemand helfen?
    Ich kann einfach nichts im buch oder google finden :S
    Hoffemir kann jemand zur string termienirung helfen falls dass ernstgemeint war.



  • Wenn dein "print"-Macro intern DOS-Funktion 09 benutzt (ah=9, int21h), muss das letzte Zeichen in allen Strings, die du mit diesem Macro auf den Bildschirm bringst, ein "$" sein. Falls das Macro anders funktioniert, ist das \0 als letztes Zeichen in deinen Strings wahrscheinlich eine gute Idee.

    Ist deine Frage damit beantwortet? Es ist naemlich nicht ganz einfach, dir zu folgen.



  • Manello schrieb:

    Kann mir niemand helfen?
    Ich kann einfach nichts im buch oder google finden :S
    Hoffemir kann jemand zur string termienirung helfen falls dass ernstgemeint war.

    1. Du benutzt ein Makro namens "writeS". Dieses Makro ist nicht Bestandteil von TASM. Du hast es sicherlich in einer Datei namens "macros.mac", die Dir Dein Dozent zur Verfügung gestellt hat. Nun musst Du Deinem Programm diese Datei noch bekannt machen:
    include macros.mac (eine Zeile hinter .CODE)
    

    macros.mac muss sich dabei im Ordner des ASM-Programms befinden.

    InAsk dq 10,13,"Gib ein Bolean ein: ",0
    InRec dq 10,13,"Wähle den Rechentyp: ",0
    InOut dq 10,13,"Das Ergebnis lautet: "

    "dq" bedeutet "Data Quadword" = 8 Bytes - das ist falsch. Deine Daten sind eine Folge von Bytes, also wäre "Data Byte" = "db" richtig.

    1. Die Terminierung - also das Abschlusszeichen eines Strings - ist für "writeS" eine Null, soweit ist Dein Programm richtig. Allerdings fehlt beim letzten String diese Terminierung. Terminierung ist nichts Göttliches, sondern nur ein Hinweis an das Programm, dass der String jetzt endet. Bei bestmmten DOS-Funktionen (INT 21h) ist dieser Hinweis keine Null sondern das Zeichen "$".

    viele grüße
    ralph


Anmelden zum Antworten