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

[ تمت الإجابة ]سؤال عن القفز الطويل

بدأه PT_DOS في 12 أبريل 2010 · 14 رد · 1,477 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

لقد كنت استخدم برنامج emu8086 v4.08

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

jmp 0900h:0000h

و هي تعمل في ال emu8086

و لكن حين حاولت ترجمة البرنامج باستخدام مترجم

MASM 6.11

اصبح يعطيني خطأ في السطر المكتوب فيه

jmp 0900h:0000h

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

MASM 6.11

مع معالج 386

لانني اضفت تعليمة

.386

و شكرا

#2
PT_DOS كتب:

بسم الله الرحمن الرحيم

لقد كنت استخدم برنامج emu8086 v4.08

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

jmp 0900h:0000h

و هي تعمل في ال emu8086

و لكن حين حاولت ترجمة البرنامج باستخدام مترجم

MASM 6.11

اصبح يعطيني خطأ في السطر المكتوب فيه

jmp 0900h:0000h

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

MASM 6.11

مع معالج 386

لانني اضفت تعليمة

.386

و شكرا

0900h:0000h تمثل segment:offset

هل لديك segment أساسه (عنوانه القاعدي base addr) يساوي 900h ؟

حاول تدرس وتفهم ما المقصود بـ seg:offset في تمثيل الذاكرة - واترك عملية التحويل إن لم تكن مضطراً للقيام بها بشكل يدوي، للـ linker.

استخدم linear addresses - العنوان السابق يتم تمثيله بالقيمة 9000h كـ linear address وهو ناتج (0900h > إزاحة لليسار بمقدار 1 يصبح 9000h > يضاف إليه الإزاحة 0000h أي يبقى 9000h) فكما ترى إن لم يكن لديك في البرنامج العنوان 9000h فسينتقل التنفيذ إلى الـ.. لا مكان -- بناء عليه، استخدم JMP label حيث label هي لافتة تشير إلى المكان الذي تريد نقل التنفيذ إليه ويتم احتساب عنوانه بشكل تلقائي من الـ Linker.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3

( شكرا لك اخ xacker علي التفاعل )

نعم 0900 موقع في الزاكرة

و ال0000 هي الازاحة

و البرنامج عبارة عن لودر لكارنل

يحملها من القرص المرن في العنوان 0900:0000

و يعطها التحكم

كان الامر jmp 0900h:0000h

يعمل في برنامج emu8086

و يعمل في جهاز و همي

و لكن لا يعمل في جهاز حقيقي

و لكي يعمل في جهاز حقيقي لابد من استخدام مترجم masm

و استخدام تعليمة

.386

و لكنه يعطي خطأ في سطر jmp 0900h:0000h

و لا اعلم لماذا

( ان شاء الله عتدما يكتمل البرنامج ساطرحه في هذا المنتدي للفائدة و النقاش و التطوير)

و شكرا

تم تعديل هذه المشاركة بواسطة PT-DOS في 16 أبريل 2010 في 00:49

#4

السلام عليكم

تحميل النواة بمقاطعة البيوس 0x13

الخيار 0 ( xor) لتهيئة القرص للقرائة

الخيار 2 لقرائة القطاعات

mov [bootdrv], dl
xor ax, ax
int 0x13
mov ax,0x100

mov es,ax
mov bx,0
mov ah,2
mov al,1
mov ch,0
mov cl,2
mov dh,0
mov dl,[bootdrv]
int 0x13
jc readFail
ret

readFail:
mov si, readErrorMsg
call ShowMsg
ret

سيتم تحميل النواة الى العنوان 0x100:0 ويمكنك القفز اليه لاعطائها التحكم بالتعليمة jmp

jmp dword 0x100:0

تم تعديل هذه المشاركة بواسطة Ph-RevIng في 18 أبريل 2010 في 19:29

#5

ايضا اعطاني خطأ في

jmp dword 0x800:0

و هذا الكود الذي كتبته

mov dl,0

mov ah, 02h

mov al, 5

mov ch, 0

mov cl, 2

mov dh, 0

mov bx, 800h

mov es, bx

mov bx, 0

int 13h

jmp dword 0x800:0

ياتي الخطاء في السطر الاخير

#6

ضع نص الخطأ اخي لا يمكننا معرفة الخطأ من لا شيئ

#7

Loader.asm<136>:error A2206:missing operator in expression

السطر رقم 136 هو سطر تعليمة

jmp dword 0x800:0

انا استخدم مترجم masm ‎6.11

و امر الترجمة من سطر الاوامر

ml /AT Loader.asm

#8

اممم صراحة لا اعرف Syntax الصحيحة على MASM

سابقا قمت بعمل نواة لكن باستعمال NASM والقفزة تشتغل بشكل عادي

جرب NASM

#9

طيب ما هو امر الترجمة في ال

nasm

لاني لم استخدمة من قبل

و لكن هل عملت النوة التي صممتها علي جهاز حقيقي

لاني قمت بتصميم نواة و محمل علي برنامج emu8086

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

Virtual PC

و ايضا بي فلوبي افتراضي ببرنامج

virtual floppy

و عندما نقلت نظام التشغيل لجهاز حقيقي لم يعمل

و عملت بعدها قطع اقلاع يظهر اسمي بمترجم masm

و نجح و الان حاولت ان اعمل محمل فاصبح يعطيني هذا الخطأ

تم تعديل هذه المشاركة بواسطة PT-DOS في 19 أبريل 2010 في 00:07

#10

بالنسبة للترجمة فستجد مشاكل اخرى متل Nasm Syntax

راجع هده السلسلة

http://a.michelizza.free.fr/pmwiki.php?n=TutoOS.TutoOS

تم تعديل هذه المشاركة بواسطة Ph-RevIng في 19 أبريل 2010 في 00:29

#11

(اسف علي التاخير)

شكرا لك

يعطيك العافية

هذا ما كنت ابحث عنه

بالمناسبة هل طرحت فكرة عمل نظام تشغيل 16بت او 32 بت من قبل

#12

كان هناك حديت في المنتدى عن هدا الامر

ابحت في الارشيف .

#13

عملت بحث عن نظام تشغيل في المنتدي

و جت 8 صفحات لم اجد فيها شي

تم تعديل هذه المشاركة بواسطة PT-DOS في 20 أبريل 2010 في 01:31

#14

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

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

تم تعديل هذه المشاركة بواسطة Ph-RevIng في 20 أبريل 2010 في 01:24

#15

ان شاء الله

انا الان اعمل علي ال file system

و ان شاء الله انتهي منه و اطرحوا للمناقشة

شكرا لك

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

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

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

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

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