Markus Pitha: Zwei Zahlen mit Assembler addieren und ausgeben

Beitrag lesen

Hallo,

Danke, aber mein Verständnisproblem ist hier begründet:

mov edx,len                    ;message length
  mov ecx,msg                    ;message to write
  mov ebx,1                      ;file descriptor (stdout)
  mov eax,sys_write              ;system call number (sys_write)
  int 0x80                       ;call kernel to execute system call

Ich schiebe die Länge nach edx, die Nachricht aber nach ecx, wieso? Warum zwei verschiedene Register, und warum gerade edx und ecx. Warum nicht beispielsweise ebx und ecx?
Mit den nächsten Zeilen ist meine Verwirrung komplett: Ich schiebe "stdout" nach ebx. Nun stehen 3 verschiedene Dinge in 3 verschiedenen Registern, aber sys_write wird plötzlich wieder nach eax geschoben, also steht nun in allen Registern irgendetwas, so wie ich das sehe. Woher weiß überhaupt "stdout", dass es den Inhalt von ecx ausgeben muss? Was wäre, wenn ich etwas nach edx schreibe, und diesen Wert ausgeben will?
Ich verstehe den Zusammenhang zwischen den Registern eigentlich überhaupt nicht und wann ich welches wofür benutzen muss.

Markus.

--
http://www.apostrophitis.at
STANDAR_D_  - ist das wirklich so schwer?