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

لا أستطيع التعامل مع الذاكرة

مغلق
بدأه Ahmadte1 في 3 يونيو 2006 · 16 رد · 1,409 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كتبت برنامج بلفة الأسمبلي على

tasm

واستخدمت فيه تعليمات مثل

[mov al,[si

[mov al,[12

ولكن أي منها لايعمل :wacko:

خصوصا أن البرنامج يعمل من القرص المرن و بدون نظام التشغيل

أرجو المساعدة :(

شكوت لوكيع سوءحفظـي ____ فأرشدني إلى ترك المعاصي

وقال لــــي إن العــلم نـــور ____ونـور الله لا يؤتــى لعــــاصي

#2

الاولى لا ارى فيها خطا, باي حال ضع نص الخطا الذي يظهر.. ام يجب ان "نضرب بالمندل" ! :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

#3

يا أخي x

لم تظهر لي رسالة خطأ ---------لاتضرب بالمندل---------- :angry:

وأنا ما بدي أضع القيمة 12 في al

أنا أريد أن أضع متوى الذاكرة ذو الازاحة 0012 في al

وأخيرا استطعت تشغيل البرنامج على أقل من dos :D

ولكن المشكلة ليست في صحة التعليمة و لكن في آلية تنفيذها

ملاحظة هذا البرنامج يعمل كما أريد في dos

شكرا أخي x أريد منك رد أخر ------وأقل وقع------

وشكرا

Ahmadte1 كتب:
يا أخي x

لم تظهر لي رسالة خطأ ---------لاتضرب بالمندل---------- :angry:

وأنا ما بدي أضع القيمة 12 في al

أنا أريد أن أضع متوى الذاكرة ذو الازاحة 0012 في al

وأخيرا استطعت تشغيل البرنامج على أقل من dos :D

ولكن المشكلة ليست في صحة التعليمة و لكن في آلية تنفيذها

ملاحظة هذا البرنامج يعمل كما أريد في dos

شكرا أخي x أريد منك رد أخر ------وأقل وقع------

وشكرا

ملاحظة إني أعتقد أن الذاكرة بطيئة بالنسبة للمعالج و لن نظام التشغيل يحل هذه المشكلة و بدونه المشكله قائمة و هذا ما أريد بدووون نظام تشغيل

شكوت لوكيع سوءحفظـي ____ فأرشدني إلى ترك المعاصي

وقال لــــي إن العــلم نـــور ____ونـور الله لا يؤتــى لعــــاصي

#4
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

#5

يا أخي x

المهم ليس في تعليمات التعامل مع الذاكرة

فالأولى صحيحة و هذه متفقين عليها

و لكنها لاتعمل عند الاقلاع بدون نظام تشغيل :wacko:

إي عند التعامل مع bios فقط

هل هناك تعليمة غير mov

أو أي تعليمة تنتظر الذاكرة حتى تأتي بالقيم (وأظن أن هذه المشكلة)

أو مقابل هذه التعليمة في p3 (قد تكون هذه هي المشكلة)

ملاحظة البرنامج نفسة يعمل في dos بشكل صحيح :wacko:

و هذا كتاب مرفق

كيف تكتب البرنامج و يعمل بدون نظام تشغيل :P

boot.rar

شكوت لوكيع سوءحفظـي ____ فأرشدني إلى ترك المعاصي

وقال لــــي إن العــلم نـــور ____ونـور الله لا يؤتــى لعــــاصي

#6

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

#7

ما معنى: "نضرب بالمندل" ؟؟؟

d4baa0.gif
#8

المعرفة بالغيب عند العرافين :P

Do as I say, not as I do

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

#9
Xacker كتب:
المعرفة بالغيب عند العرافين :P

هممم فهمت الأن

هو ما يسمى ZeN :) عند بعضهم

اقتباس
لا أستطيع التعامل مع الذاكرة, بدون نظام تشغيل

أخي Ahmadte1 لو أوضحت الأمر من البداية لكان أحسن

و كتابتك للأمرين لا يسمن ولا يغني من فهم...

المهم، ما كتبته صحيح

و المشكلة ان ما تريد قرائتة قد لا يكون موجود بعدم و جود النظام

-

أذكر ماذا تريد أن تقراء من الذاكرة ، int ؟

-

أو اطرح برنامجك كاملا و ليس أمرين فقط حتى يمكن مساعدتك

d4baa0.gif
#10

يا أخوتي هذا كود البرنامج

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

شكوت لوكيع سوءحفظـي ____ فأرشدني إلى ترك المعاصي

وقال لــــي إن العــلم نـــور ____ونـور الله لا يؤتــى لعــــاصي

#11

نظريا كما تقول لا يوجد خطأ, لكن الا يقوم 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

#12

السلام عيكم

قمت بالتعديلات التي قلت لي عليها و هذا مأفعله بالضبط

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

mov ax,bx

mov al,[si]

mov cx,10

كلها لاتعمل

إما أن المعلاج p3 لا يتعام مع mov

أو أن المسجلات ax......لايعرفها

أريد حلا

الملف المرفق يبين ما قمة به بالتفصيل

post-77339-1149562163_thumb.jpg

شكوت لوكيع سوءحفظـي ____ فأرشدني إلى ترك المعاصي

وقال لــــي إن العــلم نـــور ____ونـور الله لا يؤتــى لعــــاصي

#13

مستحيل ما تقوله بخصوص 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

#14

تريد صنع نظام تشغيل :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

aBoot.rar

d4baa0.gif
#15

رائع جدا كل شيئ تمام شكر :D :D :D :D :D :D :D ا

لكن هنا أسئلة

لماذا nop بعد jmp

لماذا في 7c00 أنا حملته في 3e

كيف كتبت pop si بدون مايكون في push و كيف ضمنت أن العنوان سينطبق على المتحول

البرنامج awrite يحمل البرنامج في القطاع 0 أليس كذالك

شكرا جزيلا أخي محمد

يا أخي xacker لاتواخزني تعديت على mov و على المعالج ;)

بس بجد ماكنت عم بعرف شو صار

وانتظرو نظام تشغيل إن شاء الله قيبا :rolleyes:

شكوت لوكيع سوءحفظـي ____ فأرشدني إلى ترك المعاصي

وقال لــــي إن العــلم نـــور ____ونـور الله لا يؤتــى لعــــاصي

#16

السلام عليكم

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

d4baa0.gif
#17

شكرا جزيلا أخي محمد على التوضيح :)

شكوت لوكيع سوءحفظـي ____ فأرشدني إلى ترك المعاصي

وقال لــــي إن العــلم نـــور ____ونـور الله لا يؤتــى لعــــاصي

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

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