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

1.القراءة من لوحة المفاتيح
 

1.1 القاطعة المحدثة 21h (الخاصة بـ DOS )

1.1.1 قراءة جملة بالدالة 0Ah

الدخول   :                   رقم الدالة   =     AH 
                           عنوان المتغير  =    DS:DX  
الخروج  :     الجملة التي تم إدخالها    =   عنوان المتغير+2

هذه الدالة تشبه إلى حد ما للدالة ()scanf أو بكل تدقيق للدالة ()gets  في اللغة C .

وتشبه كذلك إلى حد ما للدالة ()readln  في اللغة Pascal .

إلا أن هناك شرط في هذه الدالة ( أي 0Ah  ) وهو : عند إعطاء عنوان المتغير (ليكن message ) لـ DX فإن الجواب أي الجملة التي تم إدخالها من طرف المستعمل تكون قي (message+2).

كما أن المتغير message  يجب أن يكون مملوءا بالرمز '$' في منطقة التعريفات المهيأة.

مثال :

                            ;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 ah,0ah            ; لقراءة جملة
mov dx,msg           ; المتغير الذي سنضع فيه الجملة
int 21h                   ; msg+2 سيكون الجواب في

mov ah,0eh           ; لكتابة حرف
mov al,10              ; للرجوع إلى السطر
int 10h                   ;
mov al,13              ;للرجوع إلى بداية السطر
int 10h                   ;

mov ah,09h            ; لإظهار الجملة على الشاشة
mov dx,msg+2       ; عنوان الجملة
int 21h

mov ah,02h            ;الدالة اذهب إلى
mov dx,0A08h       ;اذهب إلى السطر 10 و العمود 8
int 10h

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

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


[SEGMENT .data]        ;Initialised data segment
msg times 10 db '$'        ;طول المتغير هو 10 ويجب إدخال 7 حروف فقط

[SEGMENT .bss]         ;Uninitialised data segment

1.1.2 قراءة حرف

 الدالة  01h : قراءة حرف مع إظهاره أثناء الإدخال

الدخول   :                         رقم الدالة  = AH
الخروج  :        رقم الحرف المضغوط  = AL

هذه الدالة شبيهة تماما بالدالتين ()getchar  في C .

 الدالتين  07h  و 08h: قراءة حرف دون إظهاره أثناء الإدخال

الدخول   :                         رقم الدالة  = AH
الخروج  :        رقم الحرف المضغوط  = AL

هاتين الدالتين شبيهتين تماما بالدالتين ()getch  في و readkey  في Pascal

 الدالة 0Bh : للتأكد فقط هل تم الضغط على مفتاح

الدخول   :                                   رقم الدالة  = AH
الخروج  : (تم الضغط على حرف على الأقل) 0 = ZF
                         رقم الحرف المضغوط = AL 
                             ( لم يضغط على شيء) 1 = ZF

هذه الدالة شبيهة تماما بالدالتين ()kbhit  في و keypressed  في Pascal

 

1.2 القاطعة الآلية 16h (الخاصة بالآلة : لوحة المفاتيح )

1.2.1 قراءة حرف

 الدالتين 00h  و 10h: قراءة حرف دون إظهاره أثناء الإدخال

الدخول   :                         رقم الدالة  = AH
الخروج  :        رقم الحرف المضغوط  = AL

هاتين الدالتين شبيهتين تماما بالدالتين ()getch  في و readkey  في Pascal

 الدالتين 01h  و 11h : للتأكد فقط هل تم الضغط على مفتاح

الدخول   :                                    رقم الدالة  = AH
الخروج  : (تم الضغط على حرف على الأقل) 0 = ZF
                        رقم الحرف المضغوط = AL 
                             ( لم يضغط على شيء) 1 = ZF

هاتين الدالتين شبيهتين تماما بالدالتين ()kbhit  في و keypressed  في Pascal

 


2. الكتابة على الشاشة


2.1 كتابة حرف

تم التطرق إليه في الفقرات السابقة.

 

2.2 كتابة جملة

 باستعمال الدالة 09h  للقاطعة 21h

09h  كتابة جملة  AH = رقم الدالة
 DS:DX = عنوان متغير الجملة
 mov dx,jomla
 mov ah,9
 int 21h
 ...
 jomla db 'Salam',10,13,'$'


 باستعمال الدالة 13h  للقاطعة 10h

AL = طريقة الكتابة:
    الزوج 0: يتحول المشير (cursor) إلى نهاية الجملة;
    الزوج 1: تعيين لون للجملة.
BH = صفحة الشاشة (غالبا ما تكون تساوي 0).
BL = لون الجملة إذا كان الزوج 1 للخزان AL نشيط.
CX = عدد الحروف المكونة للجملة.
DL,DH = إحداثيات (السطر والعمود) للجملة.
ES:BP = عنوان الجملة.

 


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


التمرين 6.1

أنجز شفرة تمكن من قراءة جملة ثم إظهارها في وسط الشاشة.


التمرين 6.2

أنجز شفرة تمكن من قراءة 5 كلمات ( طولها هو 10 أحرف)   ثم إظهارها عكس الإدخال.

مثال :

Entrer 5 kalimate :
kalima 1: Assalam
kalima 2: 3alaikom
kalima 3: Kaifa
kalima 4: haloka
kalima 5: hihi
hihi
haloka
kaifa
3alaikom
Assalam
press any key to continue...


التمرين 6.3

أنجز شفرة تمكن من قراءة حرف مع إظهاره عند الإدخال، بعد ذلك أظهره مكررا ثلاث مرات باستعمال الخاصية times.

مثال :

Entrer harf : a
aaa
press any key to continue...


التمرين 6.4

أنجز شفرة تمكن من قراءة حرف دون إظهاره عند الإدخال، بعد ذلك أظهره مكررا 10 مرات باستعمال الخاصية times.

مثال :

Entrer harf : 
bbbbbbbbbb
press any key to continue...

 


 

 

أضف تعليقا


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

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