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