[ASM] Character in String ändern, Adressierungsproblem

TomK79

Grünschnabel
Hallo,

ich bin gerade dabei assembler zu lernen und meine ersten eigenen Programme zu schreiben. Dabei bin ich beim ändern von Characters in Strings auf ein Adressierungsproblem gestoßen.
Ich habe das Problem auf ein Minimalbeispiel in NASM reduziert.

Folgendes funktioniert (print_string habe ich weggelassen):

Code:
...
section .text
   mov si, str_hello                    -> Gibt "hello" auf dem Bildschirm aus
   call print_string
   mov byte [str_hello+1], '$'
   mov si, str_hello                    -> Gibt "h$llo" auf dem Bildschirm aus
   call print_string
...
section .data
   str_hello db 'hello',13,10,0
...

Dann habe ich versucht diese Änderung in einer Schleife durchzuführen, also das zu ändernde Zeichen in Abhängigkeit eines Wertes eines Zählregisters zu setzen. Dies habe ich leider nicht zum laufen bekommen (Ich habe jetzt hier die Schleife weggelassen und nur mit mov die Zählervariable statisch gesetzt):

Code:
...
section .text
   mov si, str_hello                    -> Gibt "hello" auf dem Bildschirm aus
   call print_string
   mov cx, 3
   mov byte [str_hello+cx], '%'
   mov si, str_hello                    -> Soll "hel%o" auf dem Bildschirm ausgeben
   call print_string
...
section .data
   str_hello db 'hello',13,10,0
...

Wenn ich das assemble bekomme ich immer die Fehlermeldung "error: invalid effective address"

Kann mir jemand helfen?

Danke, Gruß

Tom
 
Zuletzt bearbeitet: