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

مساعدة في الeffective Address

مغلق
بدأه UUNUU في 5 فبراير 2008 · 7 رد · 1,855 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

انا استخدم nasm 16 bit

عندي مصفوفة موجودة في العنوان 0xb800

هذه المصفوفة حجمها 200 بايت اريد تعبئة هذه المصفوفة ب 0x45 في كل بايت

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

mov es,0xb800
mov dword [es:0],0x45

لكن مو معقول انسخ هذا الكود و الصقه 200 مره (طبعا مع تغيير الoffset)

اريد ان اقوم بتعبئة المصفوفة باستخدام loop

هذه محاولاتي التي باءت بالفشل

counter db 0

mov es,0xb800
mov cx,0
agine:
mov dword[es:counter]
inc cx
add [counter],1
cmp cx,200
jnz agine

المشكله هنا انه اذا جاء يحسب قيمة الcounter ياخذ عنوانه وليس القيمة الموجوده في العنوان

حاولت ان استخدم ريجيستر عوضا عن متغير لكن ظهر لي خطا

ارجوكم ساعدوني

#2

لماذا استخدمت counter اصلا ؟؟ يمكنك استعمال cx فقط

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#3

nasm يظهر خطا اذا استخدمت ريجيستر في العنوان

مثل

mov dword[es:cx],0x45

ينتج عنها خطأ

تم تعديل هذه المشاركة بواسطة UUNUU في 5 فبراير 2008 في 17:25

#4

مثلا:

.data
counter	db	0

.code
start:
mov	di,0xB800
mov es,di
agine:
mov cs:[counter], 0x45
inc counter
cmp counter,0xC8
jnz agine
end	start

Do as I say, not as I do

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

#5

اخي جنكي nasm مايقبل هذا الامر

mov cs:[counter], 0x45

يقولي خطا

شيّب راسي حتى لقيت الحل من دقايق (جربت جميع انواع الsyntax حتى لقيت الحل)

طلع nasm يقبل bx في العنوان و الحل كذا

mov [si:bx],0x45

وشكرا لجميع من ساعدني

تم تعديل هذه المشاركة بواسطة UUNUU في 6 فبراير 2008 في 08:24

#6

أخي الكريم هذا معروف, لكن مشكلتك لم تكن هنا, أنا كنت أنظر إلى المسجل ES المستخدم بصراحة.. لو أي مسجل آخر ينفع كان الحل وجد من زمن :)

بأي حال, بالتوفيق

Do as I say, not as I do

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

#7

انا آسف تراني اخطات في كتابة الحل الصحيح كتبت is بدل es الحل الصحيح اللي طلع معي هو كذا

mov [es:bx],0x45

و اخي junkie مافهمت عليك وش تقول بس بكل الاحوال شكرا لمتابعتك للموضوع

تم تعديل هذه المشاركة بواسطة UUNUU في 6 فبراير 2008 في 11:02

#8

SI مسجل تستطيع استخدام تقريبا اي مسجل آخر معه

ES عليك للعنونة استخدام base register او index value

بمعنى ممكن تكون الازاحة قيمة ثابتة او استخدام مثلا احد المسجلات العامة معه مثل ax,bx,cx,dx

Do as I say, not as I do

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

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

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