كتبت برنامج بلفة الأسمبلي على
tasm
واستخدمت فيه تعليمات مثل
[mov al,[si
[mov al,[12
ولكن أي منها لايعمل :wacko:
خصوصا أن البرنامج يعمل من القرص المرن و بدون نظام التشغيل
أرجو المساعدة :(
كتبت برنامج بلفة الأسمبلي على
tasm
واستخدمت فيه تعليمات مثل
[mov al,[si
[mov al,[12
ولكن أي منها لايعمل :wacko:
خصوصا أن البرنامج يعمل من القرص المرن و بدون نظام التشغيل
أرجو المساعدة :(
شكوت لوكيع سوءحفظـي ____ فأرشدني إلى ترك المعاصي
وقال لــــي إن العــلم نـــور ____ونـور الله لا يؤتــى لعــــاصي
الاولى لا ارى فيها خطا, باي حال ضع نص الخطا الذي يظهر.. ام يجب ان "نضرب بالمندل" ! :huh:
الثانية خاطئة 100%, كيف تريد ان تقوم بسحب بيانات من عنوان "اسمه" 12 :P
ان اردت وضع القيمة 12 في al ازل الـ [ ]
اخيرا, هو يعمل على نظام تشغيل.. اقله الـ DOS *-)
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
يا أخي x
لم تظهر لي رسالة خطأ ---------لاتضرب بالمندل---------- :angry:
وأنا ما بدي أضع القيمة 12 في al
أنا أريد أن أضع متوى الذاكرة ذو الازاحة 0012 في al
وأخيرا استطعت تشغيل البرنامج على أقل من dos :D
ولكن المشكلة ليست في صحة التعليمة و لكن في آلية تنفيذها
ملاحظة هذا البرنامج يعمل كما أريد في dos
شكرا أخي x أريد منك رد أخر ------وأقل وقع------
وشكرا
Ahmadte1 كتب:يا أخي xلم تظهر لي رسالة خطأ ---------لاتضرب بالمندل---------- :angry:
وأنا ما بدي أضع القيمة 12 في al
أنا أريد أن أضع متوى الذاكرة ذو الازاحة 0012 في al
وأخيرا استطعت تشغيل البرنامج على أقل من dos :D
ولكن المشكلة ليست في صحة التعليمة و لكن في آلية تنفيذها
ملاحظة هذا البرنامج يعمل كما أريد في dos
شكرا أخي x أريد منك رد أخر ------وأقل وقع------
وشكرا
ملاحظة إني أعتقد أن الذاكرة بطيئة بالنسبة للمعالج و لن نظام التشغيل يحل هذه المشكلة و بدونه المشكله قائمة و هذا ما أريد بدووون نظام تشغيل
شكوت لوكيع سوءحفظـي ____ فأرشدني إلى ترك المعاصي
وقال لــــي إن العــلم نـــور ____ونـور الله لا يؤتــى لعــــاصي
Ahmadte1 كتب:يا أخي xلم تظهر لي رسالة خطأ ---------لاتضرب بالمندل---------- :angry:
طالما التعامل مع الاسمبلي فسنبقى نضرب بالمندل *-)
اقتباسوأنا ما بدي أضع القيمة 12 في alأنا أريد أن أضع متوى الذاكرة ذو الازاحة 0012 في al
هذا مثال لتوضيح فكرتي:
mov bl, Offset ByteVal ; OK: Offset statement does not use brackets mov bl, Offset [ByteVal] ; Error: offset cannot be taken of the ; contents of memory lea bx, [ByteVal] ; OK: Load effective address of "ByteVal" lea bx, ByteVal ; Error: brackets required
لا يمكنك ان تستخدم offset مع قيمة عددية, انت تفترض انك تعلم ان الازاحة 12 فيها قيمة معينة لكن للحصول على محتواها يجب ان يكون لها مرجع (label)
اقتباسشكرا أخي x أريد منك رد أخر ------وأقل وقع------
Everyone has his/er own times
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
يا أخي x
المهم ليس في تعليمات التعامل مع الذاكرة
فالأولى صحيحة و هذه متفقين عليها
و لكنها لاتعمل عند الاقلاع بدون نظام تشغيل :wacko:
إي عند التعامل مع bios فقط
هل هناك تعليمة غير mov
أو أي تعليمة تنتظر الذاكرة حتى تأتي بالقيم (وأظن أن هذه المشكلة)
أو مقابل هذه التعليمة في p3 (قد تكون هذه هي المشكلة)
ملاحظة البرنامج نفسة يعمل في dos بشكل صحيح :wacko:
و هذا كتاب مرفق
كيف تكتب البرنامج و يعمل بدون نظام تشغيل :P
شكوت لوكيع سوءحفظـي ____ فأرشدني إلى ترك المعاصي
وقال لــــي إن العــلم نـــور ____ونـور الله لا يؤتــى لعــــاصي
MOV تعليمة عامة تتعلق بالمعالج وليس بنظام التشغيل وخلافه فان لم يعمل البرنامج فهذا بسبب خطوة ناقصة لديك وليس لان التعليمة لا تعمل او ان هناك بديل عنها
اخيرا عندما تقول
اقتباسخصوصا أن البرنامج يعمل من القرص المرن و بدون نظام التشغيل
فهذا =! "انا اقوم بكتابة boot loader للاقلاع منه بعد انهاء الـ post"
اقرا المزيد عن فيروسات قطاع التمهيد.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
المعرفة بالغيب عند العرافين :P
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
Xacker كتب:المعرفة بالغيب عند العرافين :P
هممم فهمت الأن
هو ما يسمى ZeN :) عند بعضهم
اقتباسلا أستطيع التعامل مع الذاكرة, بدون نظام تشغيل
أخي Ahmadte1 لو أوضحت الأمر من البداية لكان أحسن
و كتابتك للأمرين لا يسمن ولا يغني من فهم...
المهم، ما كتبته صحيح
و المشكلة ان ما تريد قرائتة قد لا يكون موجود بعدم و جود النظام
-
أذكر ماذا تريد أن تقراء من الذاكرة ، int ؟
-
أو اطرح برنامجك كاملا و ليس أمرين فقط حتى يمكن مساعدتك
يا أخوتي هذا كود البرنامج
model tiny .code org 100h start: jmp aaa ahmad db 'AHMAD' aaa: mov cx,5 lea si,ahmad next: mov ah,0eh mov al,[si] mov bl,7 int 16 inc si loop next big: ;أقصد هذا لايوجد دوس لاعادة القيادة له jmp big end start
هذا البر نامج هو تجربتي لطباعة اسمي بدون نظام تشغيل
أولا هل فيه خطأ
tasmلم يقل ذلك
(هو فيه خطأ في الازاحة 100 وذلك لأنها غير موجوده إلا عند وجود النظام(هو ينشؤها
و حللتها بواسطة تغير هذه التعليمة بواسة الdebug
فما المشكلة
حملت البرنامج في قطاع الاقلاع
البرنامج يظهر خرابيش فقط
تم تعديل هذه المشاركة بواسطة Xacker في 5 يونيو 2006 في 22:50
شكوت لوكيع سوءحفظـي ____ فأرشدني إلى ترك المعاصي
وقال لــــي إن العــلم نـــور ____ونـور الله لا يؤتــى لعــــاصي
نظريا كما تقول لا يوجد خطأ, لكن الا يقوم tasm باظهار مشاكل عند هذا السطر
jmp aaa
هناك تعليمة اسمها AAA ولا ادري لم لم يحصل تعارض هنا فـ Masm على سبيل المثال يعتبرهما تعليمتان على سطر واحد وليس label
model tiny
>
.model tiny
ahmad db 'AHMAD'
انهيها بـ $ من يعلم
ahmad db 'AHMAD', '$'
ان لم يحل هذا المشكلة فتاكد من اجرائيات الـ boot loader
تم تعديل هذه المشاركة بواسطة Xacker في 5 يونيو 2006 في 22:59
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
السلام عيكم
قمت بالتعديلات التي قلت لي عليها و هذا مأفعله بالضبط
وتعرف مالمشكلة التي تواجهني
mov ax,bx
mov al,[si]
mov cx,10
كلها لاتعمل
إما أن المعلاج p3 لا يتعام مع mov
أو أن المسجلات ax......لايعرفها
أريد حلا
الملف المرفق يبين ما قمة به بالتفصيل
شكوت لوكيع سوءحفظـي ____ فأرشدني إلى ترك المعاصي
وقال لــــي إن العــلم نـــور ____ونـور الله لا يؤتــى لعــــاصي
مستحيل ما تقوله بخصوص mov لانها مدعومة من كل المعالجات.
المهم, راجع هذه الصفحة: http://www.ctyme.com/intr/rb-0106.htm
كما ترى البارامترات لديك تختلف عن البارمترات التي يجب استخدامها.. ايضا لاحظ انك تستخدم
int 16
هذه تتحول الى
int 10h
اعتقد انك تعلم هذا لكن انتبه للبارمترات.
عند jmp big ايضا قم باستخدالة وظيفة انهاء البرنامج تماما.. اما عند دمجه مع الـ boot loader فيجب ان تعمل على نقل التحكم الى نظام DOS ليتابع عمله.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
تريد صنع نظام تشغيل :D
- مشكلتك أنك أهملت شيئ مهم
عند تحميل برنامجم في الذاكرة يكون في 7C00h
سواء تغير org 100h بالموضع الحقيقي org 7C00h
او تحسب مكان وجود النص المراد طبعة بطريقة ما، مثل المثال أسفل
-
شيئ مهم أخر، يجب أن يطون أول امر JMP SHORT متبوع بأمر NOP و لا تنسى وضع 0AA55h في نهاية 512 لأنها Signature
-
تعديل بسيط وليس كامل...هو عملك...ـأكمل أنت :lol:
.model tiny .code org 100h start: jmp short delta nop delta: call aah ahmad db 'AHMAD' aah: pop si mov cx,5 ;lea si,ahmad next: mov ah,0eh mov al,[si] mov bl,7 int 16 inc si loop next big: jmp big end start
لا تستخدم Debug بل اكتب برنامجك الخاص للكتابة على القرص
المثال مرفق، استخدم write_floppy.bat
رائع جدا كل شيئ تمام شكر :D :D :D :D :D :D :D ا
لكن هنا أسئلة
لماذا nop بعد jmp
لماذا في 7c00 أنا حملته في 3e
كيف كتبت pop si بدون مايكون في push و كيف ضمنت أن العنوان سينطبق على المتحول
البرنامج awrite يحمل البرنامج في القطاع 0 أليس كذالك
شكرا جزيلا أخي محمد
يا أخي xacker لاتواخزني تعديت على mov و على المعالج ;)
بس بجد ماكنت عم بعرف شو صار
وانتظرو نظام تشغيل إن شاء الله قيبا :rolleyes:
شكوت لوكيع سوءحفظـي ____ فأرشدني إلى ترك المعاصي
وقال لــــي إن العــلم نـــور ____ونـور الله لا يؤتــى لعــــاصي
السلام عليكم
BIOS يقراء اول Sector و بحث عن Signature في نهايته AA55 أيضا في البداية امر قفز قصير JMP Short متبوع ب NOP
و بعدها مواصفات القرص....
لتفهم الأمر جيدا قم بعمل Desassembly لأول Sector في قرص مرن...
اقتباسكيف كتبت pop si بدون مايكون في push و كيف ضمنت أن العنوان سينطبق على المتحول
قبل الوصول للأمر POP استعملنا Call
Call تستخدم لأستدعاء Proc و تعود اليها بعد تنفيذ الأمر Ret
في الحقيقة ِCall تضع موضع الرجوع في Stack
الموضع هو الأمر الذي يلي Call مباشرة في حالتنا هو النص المراد طبعه
هل فهمت ؟
-
awrite تقريبا
اقتباسلماذا في 7c00 أنا حملته في 3e
لأن اول Sector يحمل و ينفذ في ذلك الموضع من طرف Bios
شكرا جزيلا أخي محمد على التوضيح :)
شكوت لوكيع سوءحفظـي ____ فأرشدني إلى ترك المعاصي
وقال لــــي إن العــلم نـــور ____ونـور الله لا يؤتــى لعــــاصي
هذا الموضوع مغلق.