ممكن اعرف كيف
استخدم nasm
يعنى لمة يكون عندى كود وعاوز اترجمة
ساعدونىىىىىىى
ممكن اعرف كيف
استخدم nasm
يعنى لمة يكون عندى كود وعاوز اترجمة
ساعدونىىىىىىى
اقتباسQnix ~ # cat > helloworld.asmsection .data
msg db "Hello world",0xa
len equ $ - msg
section .text
global _start
_start:
mov edx,len
mov ecx,msg
mov ebx,1
mov eax,4
int 0x80
mov ebx,0
mov eax,1
int 0x80
Qnix ~ # nasm -f elf helloworld.asm -o helloworld.o
Qnix ~ # ld helloworld.o -o helloworld
Qnix ~ # ./helloworld
Hello world
ليش تستخدم الـINT في برمجة 32 بت ؟؟
int 80 تقوم بعمل اتصال للكيرنل ( call kernel )
في الليونكس نستعمل ال syscalls وهاذا اعتقد انه جديد على مبرمجي ويندوز
ابحث هنا لبعض المعلومات
http://www.google.com/linux?hl=en&lr=&q=syscall
section .data msg db "Hello world",0xa len equ $ - msg section .text global _start _start: mov edx,len mov ecx,msg mov ebx,1 mov eax,4 int 0x80 mov ebx,0 mov eax,1 int 0x80
كما ترى يوجد لدينا قسمين هم data و text
ال data يحمل النص الذي نريد طباعته وطول النص
ال text يحمل نقطه الادخال وهي _start التي سوف يقوم اللنكر الخاص بملفات ELF بتعريفها على انها الديفولت
في ال _start يوجد لدينا هاذا الكود
mov edx,len وهو لطول النص
mov ecx,msg المأشر لكتابه النص
mov ebx,1 لل stdout
mov eax,4 يقوم بعمل call للرقم 4 بلأصح يقوم بعمل call لل sys_write وهي اللتي ستقوم بطباعه النص
int 0x80 يقوم بعمل call للكيرنل
mov ebx,0 يقوم بجعل اول syscall هي ال exit
mov eax,1 يقوم بعمل call للرقم 1 وهو sys_exit ليخرج من البرنامج
int 0x80 يقوم بعمل call للكيرنل
هاكذا هي الاسمبلي في ليونكس ..
تم تعديل هذه المشاركة بواسطة Qnix في 27 نوفمبر 2005 في 15:43
هذا الموضوع مغلق.