Problem mit Array
-
Hallo wie kann ich ermitteln wie lange das array wert ist ?
In C würde ich jetzt strlen nehmen ^^mov cx, länge vom array wert <-- Da in CX möchte ich gerne die Länge des Arrays haben aber ich hab 0 Ahnung wie das gehen könnte.
Hat wer eine Idee ?
.model small .stack 100h .data wert db 10 dup ("1","2","3") , "$" wert2 db 10 dup ("1","1","1") , "$" .code start: mov ax,@data mov ds,ax mov si,offset wert mov di,offset wert2 mov cx, länge vom array wert i: mov al,[si] mov dl,[di] add dl,al sub dl,30h mov ah,2h int 21h inc si inc di loop i mov ah,4ch int 21h end start
-
Dafür gibt es den SIZEOF-Operator:
mov cx,SIZEOF wert
cx = Stringlänge + Terminierungszeichen
-
Da bekomme ich diese Fehlermeldung:
OBJ Datei wird erstellen Turbo Assembler Version 4.1 Copyright (c) 1988, 1996 Borland International Assembling file: var.ASM **Error** var.ASM(23) Undefined symbol: SIZEOF Error messages: 1 Warning messages: None Passes: 1 Remaining memory: 412k Datei Linken Turbo Link Version 7.1.30.1. Copyright (c) 1987, 1996 Borland International Fatal: Unable to open file 'var.obj'
-
So funkioniert es bei mir aber ist das so sinnvoll gelöst?
.model small .stack 100h .data count db 3 dup("."),"$" wert db 10 dup ("1","2","3") , "$" wert2 db 10 dup ("1","1","1") , "$" .code start: mov ax,@data mov ds,ax mov si,offset wert mov di,offset wert2 mov cx,size count i: mov al,[si] mov dl,[di] add dl,al sub dl,30h mov ah,2h int 21h inc si inc di loop i mov ah,4ch int 21h end start
-
TASM im MASM Modus sollte SIZEOF kennen ... kannst ja mal ausprobieren.
Was SIZE macht kann ich dir nicht sagen, es liegt aber nahe das es die Größe zurückgibt - Ein Test sollte Klarheit bringen
-
"size" gibt laut der TASM quick reference im masm-Modus die Anzahl der fuer den Operanden reservierten Elemente * der Groesse deren Typs in Byte zurueck (also praktisch wohl die Zahl der Bytes die fuer eine "Variable" reserviert wurden).
Sollte also das sein was du suchst. Wenn du allerdings die Laenge von dem Array bei "wert" haben willst, wozu hast du dann jetzt "count"?
"sizeof" kennt der TASM nicht.
-
Masm kenn SIZE aus Kompatibilitätsgrunden. Würde bei dem string wert z.B. 10 zurückgeben und nicht 31.
Eventuel ist es bei TASM ähnlich gelagert.
-
Ich hatte mich eben gewundert wieso der 10 mal die Ausgabe macht
wert db 10
wert db 3 ^^ So gehts wie ich es mir vorgestellt habe :>
btw wo gibt es die TASM Quick Reference sowas hab ich gar nicht.
.model small .stack 100h .data wert db 3 dup ("1","2","3") , "$" wert2 db 3 dup ("1","1","1") , "$" .code start: mov ax,@data mov ds,ax mov si,offset wert mov di,offset wert2 mov cx,size wert i: mov al,[si] mov dl,[di] add dl,al sub dl,30h mov ah,2h int 21h inc si inc di loop i mov ah,4ch int 21h end start
-
Ist das hier die komplette Offizielle Reference ?
http://www.faqs.org/faqs/assembly-language/x86/borland/
Oder er gesagt wo gibt es die Komplette ?
-
Die TASM Quick Reference ist eines der "Buecher" (also so richtig mehrere hundert Seiten Papier), die dem TASM beilagen, wenn man ihn gekauft hat.
Das waren 2 sehr ausfuehrliche User Manuals, und eben diese Referenz mit allen Befehlen.
Waren damals durchaus sehr hilfreich, als mit Internet noch nicht so viel war.
-
Probier mal das hier:
entweder Konstante anlegen:
z.B. (das hängt von der Länge des Arrays ab)
Länge db 30
oder
länge db $ - wertx benutzen
(man sollte auch im Debugger gucken, was vor sich geht, und eventuell die eine oder andere Fehlkalkulation von Hand anpassen.)