بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
من خلال هذا الدرس سوف اثبت بعون الله تعلى ان الاسمبلى ليست اصعب من سى, بل على العكس ربما تكون فى بعض الاحيان اسهل.
من ضمن الاشياء التى تظهر لنا ان سى اسهل من الاسمبلى هى وجود المكتبات الجاهزه مثل ال stdio, ولو طلبنا من احد مبرمجى ال سى عدم استخدام هذه المكتبات وطلبنا منه كتابة برنامج مثال Hello World لوجد المسئله شاقه.
ولكن لن نطلب منهم ذلك بل سنقوم نحن باءختلاس مكتبت ال stdio وإستخدامها.
والان نقارن حتى نرى الفرق......
#include <stdio.h>
main()
{
printf ("Hello World!\n");
return 0
}وهنا الاسمبلى..
.486 .model flat, stdcall include <c:\masm32\include\crtdll.inc> includelib <c:\masm32\lib\crtdll.lib> .data szHW db "Hello World",13,10,0 .data? .code start: invoke printf ,addr szHW ret 0 end start
الشرح:
كما ترون الفرق ليس كبير. اول سطرين فى الاسمبلى هى لتحديد نوع ال Prossesor و ال operating system. بمعنى ان هذا البرنامج لا يعمل على Prossesor اقل من 486. جميع برامج ال Windows95 فما بعد تحتاج الى model flat. سنقوم لاحقاُ فى شرحها بتوسع, كذالك stdcall .
include و includelib هما لإستخدام المكتبه stdio.h التى تستخدم فى سى.
إذا لم تفهم كل هذه الاشياء فلا تقلق المهم التركيز فى الاتى لانه اهم جزء..
الباقى مقسم الى 3 اجزاء.. .data , .data? و .code .
.data هى المتغيرات المعرفة مثل
MyInteger dw 100 MyByte db 3 MyString db "Hello World",0
.?data هى المتغيرات الغير المعرفة مثل
MyInteger DW ? MyByte db ? MyString db 20 dup (?)
.code هو بداية البرنامج و start: و end start هى بمثابت الاقواس.
والان مثال اخر
.486 .model flat, stdcall option casemap:none include <c:\masm32\include\crtdll.inc> includelib <c:\masm32\lib\crtdll.lib> .data szMyString1 db "What is your name : ",0 szMyString2 db "Oh I like this name %s ",13,10,0 szMyString3 db "How old are you :",0 szMyString4 db "Only %d years Old",0 .data? szName db 50 dup (?) szAge db ? .code start: invoke printf ,addr szMyString1 invoke gets,addr szName invoke printf ,addr szMyString2,addr szName invoke printf ,addr szMyString3 invoke gets, addr szAge invoke atoi, addr szAge ;atoi converts string to integer, return value is in eax invoke printf ,addr szMyString4,eax;eax contains the Age ret 0 end start
لمتابعت الدرس تحتاج الى compiler وتستطيع الحصول عليه من هذا الرابط:
http://spiff.tripnet.se/~iczelion/files/masm32v8.zip
وكذالك تحتاج ل ctrdll.lib و ctrdll.inc والذى تحصل عليه من هذا الرابط:
www.nada.kth.se/~su00-aab/crtdll.zip
بعد تنصيب ال compiler عليك بنسخ الفايل ctrdll.inc الى c:\>masm32\include و الفايل ctrdll.lib الى c:\>masm32\lib.
طريقة ال compile:
c:\>ml /c /coff filename.asm
بعد نجاح ال compile تستطيع القيام بال link على النحو التالى :
c:\>link /subsystem:consle filename.obj
الى هنا ينتهى الدرس الاول, الدرس التالى سيكون بعون الله تعلى الاسبوع القادم, و الموضع عن العمليات الحسابيه. ولكن لابد ان ارى مشاركات و اهتمام حتى يكون هناك تواصل, ايضاُ اريد ان اعرف عدد المهتمين بهذا الدرس.
والسلام ختام
احمد غريب
