NASM dynamisch Speicher reservieren

Schnacki

Mitglied
Hallo, ich habe mal eine Frage:

Ich versuche dynamisch einen String zu speichern und ihn dann ausdrucken, nur leider schreibt er nichts:

Code:
section .text
global _start
_start:

%define	LIMIT	4			; about 100Megs
mov eax, 45
mov	ebx,0				; get bottom of data segment
int 80h
add	eax,LIMIT			; allocate +LIMIT memory
mov	ebx,eax
mov eax, 45
int 80h

mov eax, "TEST"
mov esi, eax

mov eax, 4
mov ebx, 1
mov ecx, esi
mov edx,4
int 80h

mov eax,1
xor ebx,ebx
int 80h
Wisst ihr woran das liegen kann?
 
Hallo,

in Zeile 14 schreibst du den Wert von "TEST" in das Register eax. Eigentlich willst du den Wert aber in den Speicher schreiben an die Adresse, die in eax steht. Das geht folgendermaßen:
Code:
mov dword [eax], "TEST"
Funktioniert aber auch nur, weil "TEST" zufälligerweise aus 4 Bytes (entspricht einem dword) besteht.

Für Strings beliebiger Länge würde man es etwa so machen:
Code:
mov esi, msg
mov edi, eax
mov ecx, len
rep movsb
Und im Datenbereich:
Code:
section .data
msg db 'Hallo Welt!',0x0a
len equ $-msg

Grüße,
Matthias
 
Danke schonmal für die Antwort

Und im Datenbereich:
Code:

section .data
msg db 'Hallo Welt!',0x0a
len equ $-msg

Aber genau so möchte ich das ja nicht machen.
Ich möchte halt Speicher während der Laufzeit reservieren, um darin dann einen String abzuspeichern.
 
Ich schreibe im Moment einen kleinen Compiler, in dem es auch Zeichenvektoren geben soll.
Und dafür müsste ich halt dynamisch Speicher reservieren.
 
Ja danke,
stimmt
wie kann man denn den reservierten Speicher mit Daten füllen?

Weil mit mov kann man ja höchstens 4 Byte verschieben...
 

Neue Beiträge

Zurück