*Markus: Assembler nasm, Zahlen addieren

Hallo,

bei allen Assemblertutorials findet man ständig eine gewisse Datei namens asm_io.inc die eingebunden wird, um grundlegende Ausgaben einfach realisieren zu können. Diese Datei besitze ich leider nicht und weiters gehört sie ohnehin nicht zum Standardinventar von nasm, wie ich recherchiert habe.
Jedenfalls wollte ich ohne diese Datei versuchen, 2 Zahlen miteinander zu addieren, was aber nach der Eingabe der 2. Zahl mit einem "Segmentation Fault" endet. Ich weiß, dass es daran liegt, einen Integer einzulesen bzw auszugeben, aber wie macht man das? So sieht es bisher aus:

  
section .bss  
zahl1 resb 10 ;10 bytes reservieren  
zahl2 resb 10 ;10 bytes reservieren  
ergebnis resb 20  
  
section .data  
msg1 db "Gib eine Zahl ein:", 0x0A  
len1 equ $-msg1  
msg2 db "Gib eine zweite Zahl ein:", 0x0A  
len2 equ $-msg2  
  
section .text  
global _start  
  
_start:  
;string 1 ausgeben  
mov al, 4 ;syscall write  
mov ebx, 1; 1 = stdout  
mov ecx, msg1  
mov edx, len1  
int 0x80 ; kernelaufruf  
;string lesen  
mov al, 3 ;syscall read  
mov ebx, 0 ; von stdin lesen  
mov ecx, zahl1  
mov edx, 10  
int 0x80  
;string2 ausgeben  
mov ax, 4  
mov ebx, 1  
mov ecx, msg2  
mov edx, len2  
int 0x80  
;string lesen  
mov al, 3  
mov ebx, 0 ; von stdin lesen  
mov ecx, zahl2  
mov edx, 10  
int 0x80  
;addieren  
mov eax, zahl1  
mov ebx, zahl2  
add eax, ebx  
mov [ergebnis], eax  
;Summe ausgeben  
mov al, 4  
mov ebx, 1  
mov ecx, ergebnis  
mov edx, 20  
;exit aufrufen  
mov al, 1  
mov ebx, 0  
int 0x80  

Markus.

--
http://www.apostrophitis.at
STANDAR_D_  - ist das wirklich so schwer?
  1. Mir scheint, da fehlt ein bischen was:

    Du liest die Zahlen von stdin ein, konvertierst sie aber nicht von ascii nach Binärformat, addierst die Adressen der beiden Zahlenpuffer und schreibst anschließend die binäre Summe in die ersten 4 Ergebnispuffer-Bytes. Die für Ausgabe werden dann zwar die Parameter in die Register geladen, aber der Systemcall fehlt. Dann folgt das exit.

    Ich würde an Deiner Stelle mal einen Assemblerdebugger zu Rate ziehen, dann siest Du, wo es knallt und warum.