Der Martin: Zwei Zahlen mit Assembler addieren und ausgeben

Beitrag lesen

Hallo Markus,

ok, danke, jetzt ist es mir schon mal teilweise klar.

gut, das ist doch schon mal was. ;-)

section .data
zahl1  dw  1000
zahl2  dw  1500
len  equ  $ - zahl1   ;Hierbei hab ich mich an Hello World orientiert

; das ergibt den Wert 4 (den Speicherbedarf von 2 WORDs)

section .text
global _start

_start:

mov  edx, len
mov  ecx, [zahl1]
add  ecx, [zahl2]

; jetzt enthält ECX den Wert 2500

mov  eax, 4
mov  ebx, 1
int  0x80

; und das OS versucht nun, einen String mit 4 Zeichen Länge
                         ; auszugeben, der an der Speicheradresse 2500 beginnt

mov eax, 1 ;system call number (sys_exit)
int 0x80   ;Kernel benachrichtigen

Was habe ich jetzt wieder falsch gemacht?

Du hast den Unterschied zwischen String und Zahl nicht beachtet. Die Systemfunktion #4, die du hier verwendest, gibt einen _String_ aus, dessen Adresse (->Pointer) in ECX übergeben wird.
Wenn du einen Zahlenwert ausgeben möchtest, wird's _richtig_ anspruchsvoll. Dann müsstest du den Zahlenwert nämlich "von Hand" in einen String umwandeln. Für einen Einsteiger ist das eine verdammt harte Nuss.

So long,

Martin

--
Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde.