الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سلسلة تعلم الأسمبلر

مغلقرائج
بدأه chik في 12 ديسمبر 2003 · 67 رد · 23,290 مشاهدة · في المواضيع المميزة
مشاركة: واتساب X فيسبوك تيليجرام
#26

السلام عليكم,

أشكر الأخ حاتم على اهتمامه بهدا.

فيما يخص الكود اللي أعطيت لم أجربه. ولكن حسب النضرة الأولية يبدو أنه شغال.

وسأعطي بعض الملاحضات البسيطة :

يمكن مثلا أن نقتصر على تعليمة cmp al,35h واحدة فمثلا يمكن أن نكتب :

cmp al,35h

jz CorrectNumber

jl Less

Code for Bigger

وحتى الكود الدي أعطيت فهو صح وهده الطريقة ستمكننا من ربح بعض الأسطر.

الآن يمكن أن تضيف إلى برنامجك أنه لا ينتهي عند إدخال حرف واحد بل يبقى مستمرا حتى أن نعثر على الرقم الصحيح. وكما يمكن أن نزيد مثلا كود لنتيقن أن المستعمل قد أدخل بالفعل رقما بين 0 و 9 وفي الحالة الأخرى نقول له أن معطياته خاطئة.وبعد ربما الدرس القادم يمكن أن نزيد عدادا إلى برنامجنا ليحسب عدد المرات التي استعملناها لنعثر على الرقم الصحيح. علما أنه يمكن برمجته الآن بطريقة بدائية.

فيما يخص سؤالك الثاني المتعلق بإدخال حرفين أو أكثر فهدا لم نشاهده قبل ولدلك اقتصرت على رقم من حرف واحد للسهولة علما أن التحويل مثلا لعدد من حرفين لا يتم تلقائيا تحويله إلى الرقم المشار إليه بل يجب إما كتابة الكود لهدا أو استعمال بعض المكتبات لأجل دلك. فكل ما ندخله من الكايبورد يعتبر حروف فلو أدخلنا مثلا العدد 13 وهدا يحتاج Interrupt أخرى تقوم بقراءة جملة مثلا سنقرأ الرقم 13 كأنه جملة نقرأ كود أسكي ل 3 وننقص منه 30 هيكس ليعطينا اللرقم 3 نقرأ الحرف الثاني 1 وننقص منه 30 هكس ونضربه في 10 عشاري ونضيف له الرقم 3 حتى نعثر على الرقم 13 عشاري.

ولهدا قلت تبدأ الآن بحرف واحد ونرجع إلى هده المشاكل في وقتها إن شاء الله.

إلى اللقاء.

#27

أخي chick لقد تمكنت من إضافة عداد لعدد المحاولات وعدد المحاولات محصور بين 0..9 فإذا زادت المحاولات عن ذلك سيخطئ العداد وكذلك لن يتمكن المستعمل من الخروج من البرنامج حتى يدخل الرقم الصحيح.وهذا البرنامج:

.MODEL small

.CODE

Text1 db "choose number from 0 to 9",10,13,"$"

Text2 db "your code is less than the correct code",10,13,"$"

Text3 db "your code is biger than the correct code",10,13,"$"

Text4 db "your code is true",10,13,"$"

Text5 db "try number",10,13,"$"

Text6 db "plese enter a number",10,13,"$"

start:

mov bl,30h

mov ax,cs

mov ds,ax

mov dx,offset Text1

mov ah,9

int 21h

return:

mov ah,1

int 21h

cmp al,13

jnz begin

nul:

mov ah,9

mov dx,offset Text6

int 21h

jz return

begin:

cmp al,35h

jz correctnumber

jl less

mov ah,9

mov dx,offset Text3

int 21h

inc bl

jmp return

less:

mov ah,9

mov dx,offset Text2

int 21h

inc bl

jmp return

correctnumber:

mov ah,9

mov dx,offset Text4

int 21h

;------------

inc bl

mov ah,9

mov dx,offset Text5

int 21h

mov ah,2

mov dl,bl

int 21h

;*** Terminate the prog ***

MOV AX,4C00H

INT 21h

end start

كما أرجو من المشرفين تثبيت الموضوع

#28

السلام عليكم,

أضن أنك بدأت تكتسب مفاهيم هذه اللغة علما أن كل مبرمج له طريقته ومنهجيته الخاصة به وللوصول إلأى نتيجة قد يبرمجها كل واحد بطريقته.

أريد مثلا أن أقول لماذا هذا الكود :

mov ah,1

int 21h

cmp al,13

فربما هذا سيكون زيادة علما أن المستعمل سيضغط Enter قبل أن يدخل الرقم وقد نبدأ بهذا مباشرة.

حين نرجع إلى بداية البرنامج قد نرجع مثلا إلى الكود الذي يبرز الكتابة حتى يعرف المستعمل أنه مطلوب بإدخال الرقم من جديد.

هذه مجرد آراء شكلية وليست لها علاقة مباشرة مع اللغة .

فيما يخص الخروج من البرنامج قبل أن نعثر على الرقم الصحيح يمكن مثلا أن نزيد شيئا ونقول للمستعمل أنه إذا أراد الخروج فليضغط على زر نختاره نحن مثل x أو ESC على سبيل المثال وهذا سيمكنه من المغادرة قبل العثور على الرقم الصحيح.

فيما يخص العداد فأنت قد تفوقت فيه وهو كما قلت محصور بين 0 و 9 .ويجب أن نعرف أن هذه ليست الطريقة الجيدة لذلك كما قلت سابقا ولكن تبقى الطريقة الوحيدة حسب ما توصلنا إليه من الدروس وسأقول لماذا.

حسب دروسنا استعملنا الرجسترات لمختلف المتغيرات وكمثالك في العداد اخترت مثلا الرجستر bl ولنعلم أننا محظوظون في هذا لأان أي شيء في البرنامج لا يقوم بتغيير هذا الرجستر وأخص بالذكر لم نستعمل في برنامجنا أية Interrupt تغير هذا الرجستر فمثلا Interrut التي استملناها تغير al فلو حدث وتغير الرجستر bl أو bx فلن يعمل عدادنا بالطريقة الصحيحة.وسنرى في المرة القادمة كيف نزيد متغيرات في برنامجنا حتى تسهل مأموريتنا وحتى لا نهتم بمسار الرجسترات.

على العموم البرنامج جيد رغم الإقتصارات الآنية ولكن سنقوم بتحديها في كل خطوة إن شاء الله.

الآن وبعد أن بدأت تكتب برامج يمكن أن تقوم ب Debug لبرامجك حتى تتمكن من العثور على الأخطاء حين تكون موجودة. فهل تعرف استعمال هذه الأنواع.

فيمكنك مثلا استعمال Debug الذي يأتي مع الوندوز أو استعمال برنامج أقوى من ذلك مثل Softice والذي يعتبر أحسنهم.

أتمنى لك التوفيق وإلى اللقاء.

#29

جزاك الله كل خير ،،

و تحية لك :)

#30

شكرا لك أخي chick على التوضيح أما بخصوص debug والذي يكتب في الدوس ويتم به البرمجة أيضا برامج على شكل com على ما أظن إن كان هذا المطلوب فلقد إستخدمته سابقا وذلك بتتبع بعض الدروس في المواقع الأجنبية ولكن لم أفهامه لقلة الدروس وإن كان هذا debug الذي تتحدث عنه فلا أعرف كيف يتم به تصحيح الأخطاء وحتى العمل به كثيرا أما Softice فلا أعرفه وأين أجده وأرجو أن توضح لي أين الأخطاء مادام البرنامج ينفذ ويعمل بشكل جيد أو هناك أخطأ أخرى وجزاكم الله خيرا وأن يثبت أجركم

كما أتمنى من الأخت العصامية المشاركة معنا إن كانت مبتدئة أيظا

#31

Assalam

Sorry to write in english cause I am on holliday for the Aid Al Adha and I have no Arabic on this computer.

When I spoke about Debug I didn't mean your program is not right but it's a good way to learn for the future programs.

Pour Hatem je pense que le français serait plus comprehensible si je ne me trompe.

Je suis tout d'abord desole de ne pas ecrire en Arabe car je suis en vacances por la fete de l'Aid El Adha et sur cet ordinateur je n'ai pas l'arabe

Quand j'ai parle de Debud je ne voulais pas dire que ton programme contient des erreurs mais c'est une bonne maniere d'apprendre a se servire de ce genre de programme pour le future car les programmes comme debug permettent de faire fonctionner le programme pas à pas et on peut à chaque étape voire comment reagit notre programme et ainsi corriger s'il y a des fautes .ce ne serait pas des fautes de programmation directe mais plutot des erreurs de fond. Et on viendra apres sur ce genre d'exercices.

Je vous souhaite une bonne fete de l 'Aid et à la prochaine In Cha Allah.

#32

السلام عليكم

أخي chick وإلى الجميع عيدكم مبارك وكل عام وأنتم بخير أما بخصوص اللغة الفرنسية فأنا لا أجيدها كثير أستطيع فهم ماكتبت ولكن لا أستطيع التحاور بها أما الإنجليزية فأنا أفضل بكثير

وأتمنى للجميع عيد سعيد وكل عام إن شاء الله وأنتم بخير111111

#33

السلام عليكم

أخي chick أين أنت وأين بقية الدروس أرجو أن تكون في صحة جيدة أو هذا نهاية الدروس كما يحدث في جميع المنتديات العربية تبدأ الدروس ثم تتوقف المهم أشكرك على الدروس التي قدمتها إلي أو بالأحرى إلينا وجزاك الله خيرا وجعلها في ميزان حسناتك وأتمنى لك التوفيق.

#34

السلام على الجميع

في الحقيقة كنت في مهام أخرى منذ مشاكل المنتدى ودخلت في مشاريع أخرى. وسأحاول إن شاء الله أن أجد الوقت لإتمام الدروس. وكما يعلم الجميع فحين نكون في مسار شيء ما وحين ننقطع فغالب الأحيان تكون العودة صعبة شيء ما لأننا نكون دخلنا في مسائل أخرى.

على العموم أتمنى أن نستمر في ما قريب.

إلى اللقاء.

#35
hatem كتب:
السلام عليكم

شكرا لك أستاذنا chick على التواصل وأنا متأسف على التأخير لأني الآن في سفر ومن حبي وإهتمامي للتعلم هذه اللغة أردت تصفح الإنترنات خارج الديار وأرجو منك إتمام  هذه الدروس وبهذه الطريقة لأني أرى في ذلك هي الطريقة الجيدة لتعلم هذه اللغة جزاكم الله خيرا وأرجو منكم إتمام هذه الدروس بدون يأس وفقكم الله

تم تعديل هذه المشاركة بواسطة musa في 30 مارس 2004 في 00:51

#36

السلام عليكم

أخي العزيز chik

الحقيقة أود شكرك على هذا الموضوع الرائع الذي أرجو أن يتواصل

وأريد أن أعبر لك عن مدى إهتمامنا بها النوع من البرمجة فـأرجو أن

يتواصل كرمك علينا وتتواصل دروسك لنا.

أخي HATEM

هذه بعض البرامج التي قمت بها في نطاق الإجابة على أسئلة أستاذنا

mov bl,'A'

mov dl,'A'

mov ah,2

int 21h

jmp compar

ecrir:

mov dl,32

mov ah,2

int 21h

mov dl,bl

mov ah,2

int 21h

compar:

inc bl

cmp bl,'X'

jz saut

cmp bl,5Bh

jz ext

jmp ecrir

saut:

jmp compar

ext:

mov ax,4c00h

int 21h

*********************

mov dl,'A'

mov cl,0

mov ah,2

int 21h

jmp comparer

ecrire:

inc cl

inc dl

mov bl,dl

mov dl,10

mov ah,2

int 21h

mov dl,13

mov ah,2

int 21h

mov dl,bl

mov ah,2

int 21h

jmp comparer

comparer:

cmp cl,10

jz exit

jmp ecrire

exit:

mov ah,7

int 21h

mov ah,4ch

int 21h

وعندي سؤال لوسمحت وهو هل يمكن كتابة أكثر من

تعليمة في سطر واحد مثل

Cmp ah,bh

Jz jmp function

ولك أخي العزيز جزيل الشكر والله يوفقك

#37

السلام عليكم

أخي chick مرحبا بعودتك وأرجو منك تكملة الدروس جزاك الله خيرا وبنفس الأسلوب وشكرا

#38

السلام عليكم,

سأحاول إن شاء الله. والآن يجب أن أرى ماذا قدمت من قبل حتى لا أعاود الأشياء.

أمهلني قليلا من الوقت الأخ حاتم وإن شاء الله يكون خير.

إلى اللقاء

تم تعديل هذه المشاركة بواسطة chik في 16 أبريل 2004 في 21:42

#39

السلام عليكم

أهلا بعودتك أستذنا chick

أرجو أن تقبلو ني بينكم في هذه السلسلة من الدروس التي أرجو من الأستاذ

أن لا يبخل علينا بها والحقيقة أني أصبحت من المغرمين بهذه اللغة فأرجو أن

يتواصل هذا المشوار .

لقـد كانت آخر إشكالية مطروحة من قبل الأخ hatem متمثلة في كيفية برمجة

عداد لأكثر من 9 وقد تمكنت من التوصل لحل هذه المشكلة و أرجو أن تعطيني

رأيك أخي chick و hatem كما أريد أن أوضح أن هذا العداد يصل إلى 99

لكن يمكن توظيفه إلى أي عدد على نفس المنوال وشكرا.

.model small

.code

upn db " entrer un autre nombre inferieur ",10,13,"$"

undern db " entrer un autre nombre superieur ",10,13,"$"

debut db " pour commancer entrer un nobre de 1 -> 9",10,13,"$"

debut1 db "BY JFRX",10,13,"$"

err db " Le nombre doit etre de 0 -> 9",10,13,"$"

sorti db " voulez vous continuer (y/n)",10,13,"$"

okk db " voila c'est mon numero",10,13,"$"

esss db " vouz avez reussi apres ($"

fss db ") fois",10,13,"$"

start:

mov ax,cs

mov ds,ax

mov dx,offset debut1

mov ah,9

int 21h

first:

mov dx,offset debut

mov ah,9

int 21h

mov bl,48 ; <--->

mov bh,48 ; <--->

saisi:

mov ah,1

int 21h

cmp al,48 ; 0

jl erreur

cmp al,57 ;9

jg erreur

cmp bl,57 ;<--->

jz dixieme ;<--->

inc bl

verifn:

cmp al,35h

jl sous

jg sur

mov dx,offset okk

mov ah,9

int 21h

mov dx,offset esss

mov ah,9

int 21h

mov dl,bh

mov ah,2

int 21h

mov dl,bl

mov ah,2

int 21h

mov dx,offset fss

mov ah,9

int 21h

choix:

mov dx,offset sorti

mov ah,9

int 21h

mov ah,1

int 21h

cmp al,121

jz first

cmp al,110

jz exit

jmp choix

erreur:

mov dx,offset err

mov ah,9

int 21h

jmp saisi

dixieme:

mov bl,48 ;<--->

inc bh ;<--->

jmp verifn

sous:

mov dx,offset undern

mov ah,9

int 21h

jmp saisi

sur:

mov dx,offset upn

mov ah,9

int 21h

jmp saisi

exit:

mov ah,4ch

int 21h

end start

end

#40

السلام عليكم,

الأخ JFRX أشكرك على اهتمامك بهدا الموضوع . كنت أفكر من أن أتمم هده الدروس وبما أن الأخ afeef يقوم بوضع دروسه ولدا قلت نترك درسا واحدا حتى لا تتخبط الأمور وسأكون رهن الإشارة في أي شيء وإدا اقتضى الحال يمكن أن أزيد في هدا الشكل والرأي باطبع يبقى لباقي الإخوان.

هدا من جهة ومن جهة ثانية حبدا لو تكتب الكود داخل خانة الكود ليظهر بصورة أوضح وحتى لا تنقلب الأمور. وعلى العموم سآخده كما هو وسأرى ما فيه لأنه من الصعب قراءته في حالته هده.

سأحاول إعطاءك ملاحضاتي لاحقا وإلى دلكم الحين أقول لك إلى اللقاء.

#41

[السلام عليكم

أخي chik لقد إشتقت إلى دروسك وهذه ليست مجاملة والله لقد تفاعلت مع الدروس التي كنت تقدمها وأحسست بعض النشاط والتركيز لتعلم الأسمبلي ولكن الآن بدأت أحس ببعض الركود وذلك لقلة التمارين وأرى أن طريقتك في إلقاء الدروس جيدة وتساعدة على تعلم لغة البرمجة وهذا لا يعني أن بقية الدروس لم تأتي بفائدة لقد إستفدت منها كثيرا وخاصة دروس الأخ afeef.

أخي chik أرجو منك إتمام هذه السلسلة من الدروس بنفس الطريقة ولو درس واحد كل أسبوع

كما أرجو من كل من أرد تعلم الأسمبلي 16 بيت أن بساهم في التصويت على تثبيت هذه السلسة وطلب إتمام الدروس وجزاكم الله كل الخيرا

#42

ياليت

وهنا الصفحات الثلاث السابقه بما فيها من دروس

asmxchik.zip

محمـــــــــد

المملكه العربيه السعوديـــه

[الفريق العربي للبرمجه الأفضـل دائما]

/

::::::::::::::::::::::::::::::::::::

msvbvm60.dll = فيجوال بيسك

.................= دلفــــــــــــــي

::::::::::::::::::::::::::::::::::::

#43

السلام عليكم

هذا مجهود كبير اخي chick

بارك الله فيك

#44

سلام عليكم

je m' appellez amin

je suis a tudiant a l' universite'

je suis palestinien

salut!!!!!!!!!!!!!!

#45

السلام عليكم,

مرحبا بالأخ أمين وأتمنى أن تقضي معنا وقتا ممتعا ومفيدا إن شاء الله.

إدا أراد اإخوان أن نستمر في أمثلتنا أقترح أن يقترح أحدكم المجال الدي نريد أن نتعلمه أو مثالا نحاول أن نبرمجه درجة بدرجة وفي كل خطوة نتناقش عن الأشياء الجديدة. وأقترح هدا لأني لا أعرف مستوى المعنيين بالأمر وهدا قد يجعلنا لا نعيد الأشياء المعروفة.

إلى اللقاء.

#46

السلام عليكم

شكرا لك أخي chik على التجاوب أظن أن أغلبيتنا لا يعرف الكثير عن الأسمبلي سوى الدروس التي قدمتها أنت ودروس الأخ عفيف جزاكم الله خيرا ومن بعض الأسئلة المطروحة وأنا أأيدك الرأي في طرح مثال أو مشروع لبرمجة برنامج ما ومن خلاله نتعلم على المفاتيح الجديدة و من الأفضل أن نستعمل معه GRAPH إطار على سبيل المثال وداخله حقول وخطوة خطوة حتى نستطيع برمجة بعض الألعاب البسيطة وذلك لتعلم البرمجة وليست للهو وجزاكم الله خيرا

#47

السلام عليكم,

فيما يخص برمجة برامج مثل الألعاب لا أضن أن هناك من لازال يستعملها تحت نضام 16 بايت علما أن هذا كان من بين المشاكل التي طرحت في بداية استعمال وندوز إذ كانت الألعاب ثقيلة فيها قبل أن تظهر تقنية DirectX وعلما أن مثل هذه البرامج تكون أسرع في الدوس لأننا نتعامل مباشرة مع الفديو. والآن بعد أن ظهرت تقنيات كما قلت مثل DirectX أو OpenGL فقد كسبت الوندوز ما كان ينقسها من السرعة في هذا الميدان ولذا لم نلاحظ اليوم برامج من هذا النوع تحت بيئة الدوس.

وحتى لبرمجة برامج صغيرة قد يتطلب منا معرفة البرمجة لأننا سنستعمل حسابات ومقارنات مختلفة لذى يتوجب علينا معرفة أساسيات البرمجة البدائية.

فما هو رأي الآخرين.

إلى اللقاء.

#48

السلام عليكم

أخي وأستاذنا chick لا أدري ماذا أصاب الجميع يريدون التعلم من دون أي مشاركات أي كالدروس التي كان يقدمها الأخ عفيف جزاه الله خيرا

أخي chick أرجو منك إتمام الدروس صدقني لحد الآن لم أستفيد من الدروس المطروحة كما إستفدت من هذه السلسة وهذا ليس إنقص من قيمة دروس الآخرين ولكن لكل طريقته وأنا أعجبتني هذه الطريقة ولكن العيب الوحيد فيها هو عدم التجاوب من طرف الذين يريدون التعلم بالرغم من إلحاحنا على المشاركة في هذه السلسلة ولحد الآن مازلت أطلب منهم المشركة.

وفي الأخير أرجو منكم إتمام هذه الدروس وخاصة في هذا الأسبوع لإني يوميا أتصفح المنتدى لأني وعلى ما أظن سأتهاون كالآخرين بعد هذا الأسبوع وذلك لإبتعادي عن المنزل وسأحاول الدخول من مقاهي الإنترنا المهم التعلم وأرجو منك تفهم الأمر وجزاكم الله خيرا

#49

.

بانتظـار دروسـك اخي ChiK

اتمنى تستمر بهذا المجهود

#50

هكذا نريد التفاعل يأخي عيسى ونرجو من الأخرين المشاركة أيضا

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…