السلام عليكم
سأضع في هذه الصفحة أكواداً قام الأخ
سأضع في هذه الصفحة أكواداً قام الأخ
.model small .stack 100h .data msg db "Hello World!",10,13,"$" .code start: mov ax,@data mov ds,ax mov dx,offset msg mov ah,9 int 21 mov ax,0c07h int 21 end start
================================================================
هدا نفس البرنامج Hello World لكن استعملت في مكان التعليمة mov (التي نضع بها محتوى المتغير msg في dx) بتعليمة أخرى وهي lea و حدفت كلمة offset قبل اسم المتغير كود البرنامج:
.model small .stack 100h .data ;قسم البيانات msg db "Hello World!",10,13,"$" .code ; قسم الكود start: ; بداية الكود mov ax,@data ; نضع مقطع البيانلت في المسجل ax mov ds,ax ; نضع قيمة ax في ds (data segment) lea dx,msg ; كما قلت استعملت lea لوضع قيمة msg في dx و حدفت كلمة offset mov ah,9 ; اجراءات اضهار نص في الشاشة int 21 ; تنفيد الأمر mov ax,0c07h ; هنا يقوم البرنامج بإنتضار زر مدخل ثم يقفل البرنامج int 21 ; تنفيد الأمر end start ; نهاية الكود
=================================================================
لكن في هذا المثال سأقوم بتكبير حجم شاشة البرنامج Hello World هذا الكود الثالث و هو نفس البرنامج و إظهار الرسالة, كذلك سنتعرف على كيفية كتابة الرسالة على أكثر من سطر : الكود
; ArabTeam2000 ; Program CodedBy Z3r0n3 .model small .stack 100h .data ; قسم البيانات msg db "--------------------",10,13 ; لاحظ أن المتغير إنتهى ب 10,13 وهي تعني الرجوع الى السطر db "| Hello World!",10,13 ; عندها يرجع الى السطر و يكتب محتوى هذا ثم يقوم بالرجوع الى السطر db "| CodedBy Z3r0n3 ",10,13 ; نفس الشيئ db "| ArabTeam2000",10,13 ; نفس الشيئ db "--------------------","$" ; لاحظ هنا أنه انتهى بـ "$" وهي تعني نهاية المتغير .code ; قسم الكود start: ; بداية الكود mov ax,@data ;ax نضع قسم البيانات في mov ds,ax ; (data segment) ds في ax نضع قيمة mov ax,13h ; (Full Screen)هنا سنقوم بتغيير شاشة البرنامج على حجم الشاشة int 10h ; تنفيذ الأمر mov dx,offset msg ; dx في msg نضع قيمة mov ah,9 ;\ إضهار int 21h ;/ الرسالة mov ah,7 ; يقوم بانتضار زر مدخل int 21h ; تنفيذ أمر mov ax,4c00h ; (Inactif) هنا يقوم بإيقاف تشغيل البرنامج لاحظ ان شاشة البرنامج سيكتب فيها int 21h ; تنفيذ أمر end start ; نهاية الكود
===============================================================
فكرة عن البرنامج : البرنامج سيسألك 4 أسئلة و أنتم ستجيبون عنها طبعا الفائدة لن تكون في الإجابة عن الأسئلة بل ستكون في معرفة كيف برمج و ماهو الجديد في البرنامج و ماذا سأستفيد من البرنامج في هذا البرنامج استعملت شيئ جديد و هو ال Procedure
; ArabTeam2000 ; Program CodedBy Z3r0n3 .model small .stack 100h .data ; قسم البيانات question1 db "Whats your name? : ","$" question2 db 10,13,"Where are you from ? : ","$" ;\ question3 db 10,13,"How old are you ? : ","$" ;| لاحظ أن المتغيرات تبدأ بـ 10,13 لكي يكتب النص في سطر جديد question4 db 10,13,"Do you like Assembly (Y/N) ? : ","$" ;/ .code ; قسم الكود start: ; بداية الكود mov ax,@data ; ax نضع قسم البيانات في mov ds,ax ; (data segment) ds في ax نضع قيمة mov dx,offset question1 ; \ dx نضع محتوى المتغير في المسجل call write ; / كتابة نص procedure نطلب call read ; قرائة نص procedure نطلب call waiter ; تنتظر الضغط على أي زر procedure نطلب mov dx,offset question2 ; \ dx نضع محتوى المتغير في المسجل
call write ; / كتابة نص procedure نطلب call read ; قرائة نص procedure نطلب call waiter ; تنتظر الضغط على أي زر procedure نطلب mov dx,offset question3 ; \ dx نضع محتوى المتغير في المسجل call write ; / كتابة نص procedure نطلب call read ; قرائة نص procedure نطلب call waiter ; تنتظر الضغط على أي زر procedure نطلب mov dx,offset question4 ; \ نضع محتوى المتغير في المسجل dx call write ; /procedure كتابة نص نطلب call read ; قرائة نص procedure نطلب call Exit ; إيقاف البرنامج procedure نطلب write proc ; كتابة نص procedure بداية mov ah,9 ; الرقم 9 هو رقم الخاص بكتابة نص على الشاشة int 21h ; تنفيذ الأمر السابق Ret ; الرجوع للأمر الذي يلي طلب تنفيذ هذه الدالة write endp ; كتابة نص procedure نهاية waiter proc ; إنتظار الضغط على الزر procedure بداية mov ah,7 ; الرقم 7 هو رقم الخاص بانتظار ادخال زر int 21h ; تنفيذ الأمر السابق Ret ; الرجوع للأمر الذي يلي طلب تنفيذ هذه الدالة waiter endp ; إنتظار الضغط على الزر procedure نهاية read proc ; قرائة نص بداية procedure mov ah,0ah ; رقم خاص بقرائة نص : ha0 int 21h ; تنفيذ الأمر السابق Ret ; الرجوع للأمر الذي يلي طلب تنفيذ هذه الدالة read endp ; قرائة نص procedure نهاية Exit proc ; إيقاف البرنامج procedure بداية mov ax,4c00h ; هذا الرقم خاص بإقاف البرنامج و غالبا ما ستجده في البرامج الأخرى int 21h ; تنفيذ الأمر السابق Ret ; الرجوع للأمر الذي يلي طلب تنفيذ هذه الدالة Exit endp ; إيقاف البرنامج procedure نهاية end start ; و أخيرا نهاية الكود
========================================================
نهاية أكواد Z3r0n3
الرابط الأصلي
ليست هناك تعليقات:
إرسال تعليق