أنت هنا:برمجها»المجمع NASM»الدرس 5: التعريفات والثوابت
الدرس 5: التعريفات والثوابت الدرس 5: التعريفات والثوابت
قيم الموضوع
(1 تصويت)
 
سيحتاج المبرمج مما لا شك فيه إلى تعريف بعض المتغيرات والقيم الثابتة في برنامجه. لذلك وجب التطرق إلى هذه الخاصيات في هذه الفقرة من سلسلة دروس المجمع ناسم.

 
1. التعريفات
 
1.1 مقدمة
كل لغة من لغات البرمجة لها تعريفات لأنواع المتغيرات.
الخوارزم C Pascal Basic
 حرف
 صحيح قصير
 صحيح متوسط
 صحيح طويل
 حقيقي
 مضاعف
 char
 short
 int
 long
 float
 double
 char
 integer
 -
 -
 real
 double
 
وكذلك بالنسبة للمجمع توجد 5 أنواع للمتغيرات ، إلا أنه لا يوجد أي نوع للأعداد الحقيقية (سنتطرق لذلك في الدروس متقدمة المستوى).
 
هناك نوعين من التعريفات: المهيأة وغير المهيأة.
 
1.2 التعريفات المهيأة
1.2.1 الأنواع
الخوارزم المجمع NASM عدد الأثمان المجال الحقيقي المجال الموجب
 حرف DB 1  (27-1)....-27  (28-1)....0
 صحيح قصير DW 2 (215-1)....-215 (216-1)....0
 صحيح متوسط DD 4  (231-1)....-231  (232-1)....0
 صحيح طويل

DQ

8

(263-1)....-263

(264-1)....0

 صحيح ممتد DT 10 (279-1)....-279 (280-1)....0
 
1.2.2 الأمثلة
أمثلة للتعريف المهيأ.

في Nasm 

 

في C

 car     db    'c'

تكافئ  char   car = 'c';
 msg1  db   'salam','$' تكافئ  char msg1[6] = "salam";
 nbr1   db    69 تكافئ  char  nbr1 = 69;
 entier  dw   1000 تكافئ  short   entier = 1000;
 tab     dd   10,20,30,40 تكافئ  int   tab[4] = {10,20,30,40};

ملاحظة : الكتابات التالية متكافئة

  msg  db  'salam',10,13,'$'

تكافئ

 

 msg  db  's'
         db   'a'
         db   'l'
         db   'am'
         db   10
         db   13,'$'  
 
1.2.3 أين نضع التعريف المهيأ في NASM المجمع ؟
يوضع كل تعريف مهيأ في القطعة data.

                 ;NASM-IDE ASM Assistant Assembler Project File
[BITS 16]        ;Set code generation to 16 bit mode
[ORG 0x0100]     ;Set code start address to 0100h


[SEGMENT .text]  ;Main code segment
                 ;هنا نضع الشفرة أو المشروع

[SEGMENT .data]  ;Initialised data segment
                 ;هنا نضع التعريفات المهيأة

[SEGMENT .bss]   ;Uninitialised data segment

 
1.2.4 مثال تطبيقي : كتابة جملة على الشاشة
تذكير : الدالة 09h للقطعة 21h تقوم بكتابة الجمل على الشاشة

                 ;NASM-IDE ASM Assistant Assembler Project File
[BITS 16]        ;Set code generation to 16 bit mode
[ORG 0x0100]     ;Set code start address to 0100h

[SEGMENT .text] ;Main code segment
mov ax,3        ;لمسح الشاشة
int 10h

mov
ah,09h
mov dx,nom      ;عنوان الجملة dx نضع في
int 21h

mov ah,02h      ;للرجوع إلى السطر  10 و 13
mov dl,10   
int 21h
mov dl,13   
int 21h


mov ah,09h
mov dx,msg      ;عنوان الجملة dx نضع في
int 21h
 

mov ah,0        ;انتظار المستعمل
int 16h

mov ax,4c00h    ;هذه الدالة ضرورية لإنهاء الشفرة أو المشروع
int 21h

[SEGMENT .data]  ;Initialised data segment
nom  
db 'Salamo 3alaikom','$'     ; رمز الدولار في آخر الجملة ضروري
msg  
db 'kaifa alhal ?!!',10,13,'$' ; 10,13 للرجوع إلى السطر فقط

[SEGMENT .bss]   ;Uninitialised data segment

 

 

1.2 التعريفات غير المهيأة

1.2.1 الأنواع

الخوارزم المجمع NASM عدد الأثمان المجال الحقيقي المجال الموجب
 حرف resb 1  (27-1)....-27  (28-1)....0
 صحيح قصير resw 2 (215-1)....-215 (216-1)....0
 صحيح متوسط resd 4  (231-1)....-231  (232-1)....0
 صحيح طويل

resq

8

(263-1)....-263

(264-1)....0

 صحيح ممتد rest 10 (279-1)....-279 (280-1)....0

1.2.2 الأمثلة

أمثلة للتعريف المهيأ.

في Nasm

 

في C

 car     resb    1

تكافئ  char   car ;
 msg1   resb   20 تكافئ  char msg1[20] ;
 nbr1    resb    69 تكافئ  char  nbr1[69];
 entier   resw   1 تكافئ  short   entier ;
 tab      resd   100 تكافئ  int   tab[100] ;

ملاحظة : الكتابات التالية متكافئة بعضها ببعض

 msg   resb  10  msg   resw  5  msg   resw  3
         resw   2
 msg   resb  1
         resb   2
         resb   4
         resb   1
         resb   2
1.2.3 أين نضع التعريف غير المهيأة في NASM المجمع ؟
يوضع كل تعريف غير مهيأ في القطعة bss.

                 ;NASM-IDE ASM Assistant Assembler Project File
[BITS 16]        ;Set code generation to 16 bit mode
[ORG 0x0100]     ;Set code start address to 0100h


[SEGMENT .text]  ;Main code segment
                 ;هنا نضع الشفرة أو المشروع

[SEGMENT .data]  ;Initialised data segment
                 ;هنا نضع التعريفات المهيأة

[SEGMENT .bss]
   ;Uninitialised data segment
                 ;
هنا نضع التعريفات غير المهيأة

1.2.4 مثال تطبيقي

                 ;NASM-IDE ASM Assistant Assembler Project File
[BITS 16]        ;Set code generation to 16 bit mode
[ORG 0x0100]     ;Set code start address to 0100h

[SEGMENT .text] ;Main code segment

movax,4c00h    ;هذه الدالة ضرورية لإنهاء الشفرة أو المشروع
int 21h

[SEGMENT .data]  ;Initialised data segment
msg  
db'character Please: ','$'   

[SEGMENT .bss]   ;Uninitialised data segment
col  resb    1  
com  resw    2
cof  rest    20

 


2 الثوابت

تعريف :الثابتة هي عدد لا يتغير أثناء التنفيذ.
+ في C نعرف الثوابت بـ const أو define#.
+ في Pascal نعرف الثوابت بـ const.
+ أما في المجمع NASM فنعرف الثوابت بـ define%
 
أمثلة:

%define SIZE 100   ; SIZE = 100 تعني أن
...
...
mov eax, SIZE       
 ; eax = 100

أين نضع الثوابت

                 ;NASM-IDE ASM Assistant Assembler Project File
[BITS 16]        ;Set code generation to 16 bit mode
[ORG 0x0100]     ;Set code start address to 0100h
%define SIZE 100     ;هنا نضع الثوابت

[SEGMENT .text]  ;Main code segment
                 ;هنا نضع الشفرة أو المشروع

[SEGMENT .data]  ;Initialised data segment
                 ;هنا نضع التعريفات المهيأة

[SEGMENT .bss]
   ;Uninitialised data segment
                 ;
هنا نضع التعريفات غير المهيأة


الخاصية times في المجمع NASM

هذه الخاصية تفيد في تكرار أمر معين.

مثال: الكتابات التالية متكافئة:

 msg    db  'kkkkk'

تكافئ

 msg    times 5 db 'k'

 msg1  db  'hhhhhhhh','$'


تكافئ

 msg1  times 8 db 'h'
          db             '$'     

 col     db  'SalamSalamSalam','$'

تكافئ

 col     times 3 db 'Salam'
         db     '$'     

 int 10h
 int 10h
 int 10h    


تكافئ

 times 3 int 10h

مثال تطبيقي:

                             ;NASM-IDE ASM Assistant Assembler Project File
[BITS 16]            ;Set code generation to 16 bit mode
[ORG 0x0100]    ;Set code start address to 0100h

[
SEGMENT .text] ;Main code segment
mov ax,3             ;مسح الشاشة
int 10h

mov ah,09h
mov dx,msg1
int 21h

times 1000 nop   ; تعني لا عملية   nop
                            ; وهنا لدينا انتظار لـ 1000 لا عملية

mov ah,0eh
mov al,'s'
times 10 int 10h     ; تكرار 10 مرات

mov ah,0          ;انتظار المستعمل
int 16h

mov ax,4c00h         ;هذه الدالة ضرورية لإنهاء الشفرة أو المشروع
int 21h

[SEGMENT .data]      ;Initialised data segment
msg1  times  100 db 'k'
           db                   '$'
[SEGMENT .bss]         ;Uninitialised data segment

 


تمارين تطبيقية

ملاحظة: استعمل المجمع NASM لحل التمارين التالية.


التمرين 5.1

أنجز شفرة تقوم بتعريف 3 متغيرات لـ 3 جمل :'ALLAH Akbar' و 'Besmi ALLAH' و 'Salam 3alaikom'.

أظهر هذه الجمل على الشاشة  كما يلي :

ALLAH Akbar

                         Besmi ALLAH

Salam 3alaikom


التمرين 5.2

أنجز شفرة  بإظهار ما يلي

 

Salam 3alaikom 3alaikom 3alaikom

Salllllllllllllllllllam 3alaikoooooooom


  

أضف تعليقا


إصنعها يريد أن يتأكد أنك لست روبوتا، لذلك أحسب ما يلي:

كود امني
تحديث