mrunix
14-09-2010, 20:42
Guten Tag, ich lerne seit ein paar Tagen Assembler mit NASM unter Linux x86.
Klappt auch soweit, bis auf einige Fragen, die ich habe:
Ich habe folgenden Code, welcher eine Datei text.txt erstellen soll und 'Erfolg' reinschreiben.
Klappt auch, nur dass er die Datei in test.txtErfolg nennt, kp wieso. Wäre schön wenn das einer erklären könnte.
section .data
f: db 'test.txt'
msg: db 'Erfolg',10
len: equ $-msg
section .text
global _start
_start:
mov eax,8
lea ebx,[f]
mov ecx,777o
xor edx,edx
int 0x80
cmp eax,0x00
je ende
mov ebx,eax
mov eax,4
lea ecx,[msg]
lea edx,[len]
int 0x80
mov eax,6
int 0x80
ende:
mov eax,1
mov ebx,0
int 0x80
Und zudem erstellt der Syscall 8 ja nur Dateien, kann ich mit 5 auch nur welche Öffnen, doch wie kann ich dann hineinschreiben?
2.
; simple readin
section .data
inp: db 0,0,0,0,0,0,0,0,0,0
section .text
global main
main
mov eax,3
xor ebx,ebx
mov ecx,inp
mov edx,10
int 0x80
mov [inp],eax
mov eax,4
inc ebx
mov ecx,inp
mov edx,10
int 0x80
mov eax,1
xor ebx,ebx
int 0x80
Hier werden 10 Bytes Platz reserviert und von STDIN eingelesen, doch es werden nur die letzten 5 Bytes ausgegeben, wieso, ich gebe doch die Startadresse an.
Und vorallem, wie kann ich dynamisch Platz reservieren und Daten einlesen?
Zuletzt, was bedeuted 'byte' bei asm, sprich z.B. mov eax,byte[ecx]
Und wann lohnt es sich esi und edi zu verwenden?
Und wenn ihr gute Dokumentationen habt, auch gerne her damit.
Klappt auch soweit, bis auf einige Fragen, die ich habe:
Ich habe folgenden Code, welcher eine Datei text.txt erstellen soll und 'Erfolg' reinschreiben.
Klappt auch, nur dass er die Datei in test.txtErfolg nennt, kp wieso. Wäre schön wenn das einer erklären könnte.
section .data
f: db 'test.txt'
msg: db 'Erfolg',10
len: equ $-msg
section .text
global _start
_start:
mov eax,8
lea ebx,[f]
mov ecx,777o
xor edx,edx
int 0x80
cmp eax,0x00
je ende
mov ebx,eax
mov eax,4
lea ecx,[msg]
lea edx,[len]
int 0x80
mov eax,6
int 0x80
ende:
mov eax,1
mov ebx,0
int 0x80
Und zudem erstellt der Syscall 8 ja nur Dateien, kann ich mit 5 auch nur welche Öffnen, doch wie kann ich dann hineinschreiben?
2.
; simple readin
section .data
inp: db 0,0,0,0,0,0,0,0,0,0
section .text
global main
main
mov eax,3
xor ebx,ebx
mov ecx,inp
mov edx,10
int 0x80
mov [inp],eax
mov eax,4
inc ebx
mov ecx,inp
mov edx,10
int 0x80
mov eax,1
xor ebx,ebx
int 0x80
Hier werden 10 Bytes Platz reserviert und von STDIN eingelesen, doch es werden nur die letzten 5 Bytes ausgegeben, wieso, ich gebe doch die Startadresse an.
Und vorallem, wie kann ich dynamisch Platz reservieren und Daten einlesen?
Zuletzt, was bedeuted 'byte' bei asm, sprich z.B. mov eax,byte[ecx]
Und wann lohnt es sich esi und edi zu verwenden?
Und wenn ihr gute Dokumentationen habt, auch gerne her damit.