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

ابحت عن برنامج بلغة الاسمبلي وهو

مغلق
بدأه tasm في 28 يونيو 2004 · 16 رد · 2,653 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

اريد منكم لو تكرمتو برنامج يغير ساعة النظام او برنامج يتعامل مع ساعة النظام

او حتى طباعة الوقت للنظام على الشاشة

بلغة الاسمبلي

وشكراً جزيلاً

#2

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

كان من الأحسن أن توضح إذا كنت تريد استعمال الأسمبلر 32 أو 16 بت.

ففي 32 بت يمكنك استعمال API التالية : GetSystemTime وهذه ستعطيك وقت الحاسوب ويمكنك أن تستخرج منه الساعة والدقيقة إلى غير ذلك ومن ثم يمكنك إضهارها على الشاشة أو أن تعمل به ما تريد . وكما أن هناك SetSystemTime وهذه تمكنك من تغيير وقت الكمبيوتر كيفما تريد.

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

إلى اللقاء.

#3

حبيبي انا اتعمل مع الاسمبلر 16 رجاء اتساعدني

باسرع ما يمكن

#4

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

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

إلى اللقاء.

#5

صديقي chink انت جداً مهضوم وانسان باين عليك كريم جداً انا اعرفك بنفسي

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

ونتمني من الله ان نفيدك وتفيدني

وللعلم انا اتعامل مع الاسمبلر 16 ولك جزيل الشكر والعرفان

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

#6

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

أهلا بالأستاذ ابراهيم.

ما نوع البرامج الذي تريدها. أنا من وقت اتجهت نحو البرمجة 32 بايت ولا أعود إلا مرة مرة إلى 16 بت إلا في بعض الحالات اللازمة.

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

نتمنى من الله التوفيق في عملنا وإلى اللقاء.

#7

وجهت نضرتك جميلة جداً وانا معك وهي نتناقش في مواضيع في الاسمبلي

لكن الاول انا اتعامل مع 16 بت وكيف الراي

لو عندك موضوع جديد تبنا اتناقشو فيه اعرضه

#8

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

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

لقراءة تاريخ الكمبيوتر سنعتمد على المقاطعة 21 والدالة رقم 2A وهذه لا تتطلب معطيات إضافية فقط يجب على الرجستر AH أن يحتوي على رقم الدالة 2A .وبعد استدعاء المقاطعة تكون عندنا الأشياء التالية :

- الرجستر CX يحتوي على العام مثلا 2004 .

- الرجستر DH يكون فيه الشهر وهو عدد من 1 إلى 12

- الرجستر DL يحتوي على تاريخ اليوم وهو عدد من 1 إلى 31 كما نعلم ذلك

- الرجستر AL يكون فيه رقم من 0 إلى 6 ليدل على اليوم . 0 هو الأحد 1 هو الإثنين إلخ.

أما إذا أردنا أن نغير التاريخ فما علينا إلا أن نملأ الرجسترات السابقة بالتاريخ الجديد ونستدعي المقاطعة 21 مع الدالة 2B .

وفي الملف المرفق تجدون البرنامج مع الكود الخاص به وهو مبني ب Masm 6 . وكذلك تجدون فيه ملف TheMac.inc وهذا الملف سبق وأن وضعته هنا وهو يحتوي على اثنين ماكرو : AtoW أو Asii to Word وهذه تحول جملة أسكيي إلى الرقم الموالي لها والثانية :WtoA أو Word To Ascii وهذه تحول لنا عددا من نوع وورد إلى أسكيي وهذه تمكننا مثلا من طبع عدد رقمي.

إلى اللقاء.

GetDate.zip

#9

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

والآن سأعطي برامج يقرأ ساعة الكمبيوتر وهم كالمثال السابق وسنستعمل المقاطعة 21 مع الدالة 2C .وبعد استدعاء الدالة يكون عندنا مايلي :

- الرجستر CH يحتوي على الساعة وهو عدد من 0 إلى 24 .

- الرجستر CL يحتوي على الدقائق وهو كما نعلم عدد من 0 إلى 60

- الرجستر DH يحتوي على الثواني

- الرجستر DL على مئة أجزاء من الثانية

وكذلك إذا أردنا أن نغير ساعة الكمبيوتر ما علينا سوى أن نملأ الرجسترات السابقة بالساعة الجديدة ونستدعي دائما المقاطعة 21 مع الدالة 2D .

إلى اللقاء.

GetTime.zip

تم تعديل هذه المشاركة بواسطة chik في 29 يونيو 2004 في 16:19

#10

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

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

wtoa ax,dx

لان هذه التعليمة اول مرة اتمر عليه

ياعزيزى عند شؤال أخر

هل لو تنفد البرمامج نحصل على الناتج في النظام العشري او الاسكي

#11

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

إن wtoa ax,dx التي هي في البرنامج ليست تعليمة خاصة وإنما هي ماكرو كتبتها وهي في الملف TheMac.inc ويمكن أن تشاهد الكود الخاص بهذه الماكرو. وهذه الماكرو كتبتها حتى تسهل الأمر لمن يريدوا استعمالها وما تقوم به هذه الماكرو هي تحويل عدد مثلا نقول 3287 إلى مقابله من الأسكي وهذا سيسهل علينا طباعة العدد. والماكرو تتطلب بارامتران : الأول من نوع وورد وهو طبعا سيكون العدد الذي نريد تحويله والبارامتر الثاني هو موقع في الذاكرة الذي سنضع فيه الجملة المقابلة للعدد وبما أن طول العدد قد يختلف ولهذا ملأت هذا الموقع ابتداءا من الآخر وهذا ليس مشكلا لأن الماكرو ستعطينا بداية الجملة بعد حسابها في الرجستر DX وقد اخترت هذا الرجستر لأن في غالب الأحيان نريد طبع الجملة ولهذا سيكون عندنا عنوانها في هذا المجلد ونكون قد أعطينا نصف الشغل لما يخص الدالة 09 للمقاطعة 21 .

اقتباس
هل لو تنفد البرمامج نحصل على الناتج في النظام العشري او الاسكي

لم أفهم جيدا المقصود هنا.

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

إلى اللقاء.

#12

أخي الغالي شكراً شكراً شكراً وجزاك الله الف خير

يأخي أريد منك ان توضح لي هل البرنامج هذا ينفد علي 16 بت او 32 بت للعلم فقط انا أستخدم 16 بت هل ايتنفد؟

تانياً ياخي العزيز قلتلي ما فهمت الجملة :-

هل لو تنفد البرمامج نحصل على الناتج في النظام العشري او الاسكي

أتناء تنفيد البرنامج الذي ارسلته لي (الخاص بتاريخ والزمن) هل نحصل على الناتج متلا 30-6-2004 ام برموز الاسكي ؟

#13

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

البرنامج هو للدوس يعني 16 بايت وهو يشتغل في هذه البيئة كما يمكن أن نشغله مثل باقي البرامج على الوندوز أو نقول 32 بايت.

هل جربت البرنامج.

هو البرنامج يعطينا النتيجة على الشكل التالي :

برنامج التاريخ يعطي مثلا :

wen :26 : 06 :2004

وبرنامج الساعة يعطي النتيجة على الشكل التالي :

11 : 24 :45

بما أننا أضهرنا هذه الأرقام فهي على شكل أسكي وكما ذكرت مسبقا هذا ما تقوم به الماكرو التي أعطيتها.

إلى اللقاء.

#14

أخي chik انا اسف لو كنت تقيل عليك في طلباتي

عموماً البرنامجين اللذان يحملان الاسم gettime و getdate ما تنفدن عندي والسبب عند اجراء المرحلة الاولة وهي التجميع تظهر رسالة خظأ مفاده

can't locate file : themac.inc

لماذا

رجاء اعطيني الحال

#15

أخي العزيز chik اعتبر اخر رد ملغي وهذا هو الرد الصحيح

البرنامجين اتنفدن معي اخيراً لكن بعد ما غيرت في الاتي:-

1- لغيت الكلمة os-dos من السطر التاني وه model small , os_dos

2- ونسخت الملف themac.exe الي نفس مسار البرنامجين.

ولكن السؤال لمادا ضفت العبارة os_dos مع model small

والسؤال التاني لمادا اصلا themac.inc انا بأمكاني طباعة التاريخ لو حصلت عليه في احد المسجلات؟بطريق التجزئة اي القسمة على عشرة

والسؤال الاهم ماهي LOCAL NextChar و LOCAL OneMore الموجودة في themac.inc

واخير ماالمقصود بالامتداد .inc الموجود في themac

مع خالص تحياتي

#16

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

أولا أريد أن أعرف ماذا تستعمل لبناء البرامج . فكما قلت مسبقا أنا أستعمل Masm 6 لهذا الغرض.

وللجواب على تساؤلاتك :

- لقد زدت os_dos وهذه تعني فقط Operating System Dos وكما ذكرت يمكن حذفها ويبقى البرنامج يشتغل.

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

include TheMac.inc

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

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

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

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

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

وبما أنه في الكود للمثال استدعينا الماكرو عدة مرات فمن الواجب أن نستعمل هذه الطريقة أو كان بالإمكان أن نستعمل Labels الخاصة :@@

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

أتمنى أن أكون أعطيت شرحا مفهوما رغم ضعف الأسلوب.

إلى اللقاء.

#17

السالم عليكم ورحمة الله

اريد برنامج بلغة الاسمبلي يقوم بقراءة ساعة النظام وإظهارها على الشاشة بشكل ساعة ذات عقارب (analog clock)

وتحياتي

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

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