ورود

نسخه کامل مشاهده نسخه کامل : تقسيم يك عدد64 بيي به عدد 32 بيتي به زبان اسمبلي (فوري)



aroosak_kooki
29-11-2008, 13:54
سلام:11:

ممنون ميشم از دوستان اگر برنامه ي تقسيم يك عدد64 بيي به عدد 32 بيتي به زبان اسمبلي رو برام بنويسند ...

واگر ميشه :
تفريق دو عدد 32 بيتي رو :31: هم برام بنويسيد ...

خيلي خيلي ممنون ميشم [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

hoax3r
30-11-2008, 09:49
برای تقسیم از ترکیب EDX:EAX به عنوان عدد 64 بیتی استفاده کن و عدد 32 بیتی ثبات یا یک آدرس حافظه میتونه باشه بعد با دستورات DIV و IDIV تقسیم کن
بعد تقسیم EDX باقی مانده و EAX خارج قسمت هست

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

تفریق رو هم با دستور SUB انجام بده و عدد 32 بیتیت میتونه ثبات های 32 بیتی EAX, EBX, ECX, EDX, ... یا یه آدرس حافظه باشه

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

skylarker
30-11-2008, 14:07
ای بابا
مثلا" اومدیم یه چیزی حالیمون باشه ،دیدیم نیست اونطورا :41:
شرمنده فکر کردم ازین آسون تر باشه :13:
درسمون هنوز به اونجا نرسیده خب :5:
اما این چیزی که این بنده خدا گفته هم میتونه درست باشه :20:
اما خب یه چیزی برات پیدا کردم که یه جورایی به درد بخوره البته بقیه اش با خودته

You cannot synthesize a general n-bit/m-bit division operation using the div and idiv instructions. Such an operation must be performed using a sequence of shift and subtract instructions. Such an operation is extremely messy. A less general operation, dividing an n bit quantity by a 32 bit (on the 80386 or later) or 16 bit quantity is easily synthesized using the div instruction. The following code demonstrates how to divide a 64 bit quantity by a 16 bit divisor, producing a 64 bit quotient and a 16 bit remainder:
dseg segment para public 'DATA'dividend dword 0FFFFFFFFh, 12345678hdivisor word 16Quotient dword 0,0Modulo word 0dseg endscseg segment para public 'CODE' assume cs:cseg, ds:dseg; Divide a 64 bit quantity by a 16 bit quantity:Divide64 proc near mov ax, word ptr dividend+6 sub dx, dx div divisor mov word ptr Quotient+6, ax mov ax, word ptr dividend+4 div divisor mov word ptr Quotient+4, ax mov ax, word ptr dividend+2 div divisor mov word ptr Quotient+2, ax mov ax, word ptr dividend div divisor mov word ptr Quotient, ax mov Modulo, dx retDivide64 endpcseg endsThis code can be extended to any number of bits by simply adding additional mov / div / mov instructions at the beginning of the sequence. Of course, on the 80386 and later processors you can divide by a 32 bit value by using edx and eax in the above sequence (with a few other appropriate adjustments).



این هم آدرس اون سایت هستش



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

on the 80386 and later processors you can divide by a 32 bit value by using edx and eax in the above sequence توی این خط توضیح داده که برای تقسیم 64 به 32 باید جای ax,dx از eax,edx استفاده کنی همون
چیزی که اون بنده خدا گفته بود
نقل قول اولی خوب از آب در نیومد یه سر به آدرس سایت بزنی بهتر مفهومه
خب دیگه ...موفق باشی
در آغوش خدا

skylarker
30-11-2008, 15:13
این لینک هم یه سری توضیحات برای تفریق توی فایلی که داده داره(فایل پی پی تی)که میتونه بدردت بخوره :دی


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

aroosak_kooki
30-11-2008, 22:44
ممنونم از همگی ...
مرسی بیدل جان ..

فقط یه چیزی من از EAX مه استفاده میکنم این خطا رو میده که تعریف نشده

Symbol not defined: EAX

چرا؟ این که دیگه تعریف نمیخواد!!!!![ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

hoax3r
01-12-2008, 00:58
این دستورو اول کدت اضافه کن درست میشه، اگه نشد به جای اینکه اول کد بزاری قبل دستورایی که تو پست قبل دادم بزار

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Shahab_H
01-12-2008, 23:04
وای من از اسمبلی متنفرم!
استادمونم که ماشالا فکر کرده داره c#درس میده انقد برنامه های سنگینی میده که بعضی وقتا کل هفته رو براش می ذاریم آخرم تموم نمیشه!
نمره دادنشم که تعطیل همرو میندازه!

aroosak_kooki
02-12-2008, 02:43
این دستورو اول کدت اضافه کن درست میشه، اگه نشد به جای اینکه اول کد بزاری قبل دستورایی که تو پست قبل دادم بزار

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

منونم
شم امتحانش ميكنم حتما" ...
البته امروز از استادمون پرسيدم كه چرا ميگه تعريف نشده ...گفت چون امبلرتون 64 بيت رو نمخونه تا 32 بيته !!!!

منم گفتم ..به به ...خسته نباشيد :31:

تازه استاد گفته listing رو هم برام بفزستيد !!!
با EAX كه نميشه ...كلي error داره آخرش !!!



وای من از اسمبلی متنفرم!
استادمونم که ماشالا فکر کرده داره c#درس میده انقد برنامه های سنگینی میده که بعضی وقتا کل هفته رو براش می ذاریم آخرم تموم نمیشه!
نمره دادنشم که تعطیل همرو میندازه!


موافقم كاملا"
استاد ما هم همينطوره ..

همه مي دونيم كه آخرش ميافتيم !!!!:13:

hoax3r
02-12-2008, 11:56
چه ارروری میده؟ الان اینو ببین با masm614 کامپایل شده، همون کدی که بالا دادمه، البته چیزی به خروجی نمی فرسته ولی بدون مشکل کامپایل میشه
من فرض گرفتن که برنامه که می خوای بسازی 16 بیتی وگر در 32 بیتی از این جور مشکلا نداری
 

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
 
--------------------------

وای من از اسمبلی متنفرم!
استادمونم که ماشالا فکر کرده داره c#درس میده انقد برنامه های سنگینی میده که بعضی وقتا کل هفته رو براش می ذاریم آخرم تموم نمیشه!
نمره دادنشم که تعطیل همرو میندازه!
 
هر کسی دیگه همچین استادایی بهش می دادن از اسمبلی متنفر میشد.
ولی برعکس من حاظرم هیچ کلاسی نرم فقط سر کلاسهای اسمبلی بشینم:31:
ولی حیف که تا حالا کلاس اسمبلی نداشتم

skylarker
03-12-2008, 11:40
سلام عزیز جان
خوبی؟

مرسی بیدل جان ..

کاری نکردم و قابلی نداشت فقط امیدوارم که نتیجه ای حاصل شده باشه برات
دل تنگ گفتگوتم
مواظب خودتون باشید
سلام برسون
در آغوش خدا باشی...

aroosak_kooki
03-12-2008, 14:53
چه ارروری میده؟

این قسمت صحبتم رو گفتید ؟

كلي error داره آخرش !!!

همون که وقتی با EAX برنامه رو مینویسیم چون چند جا ازش استفاده میشه هر خط error میگیره!!!!


الان اینو ببین با masm614 کامپایل شده، همون کدی که بالا دادمه، البته چیزی به خروجی نمی فرسته ولی بدون مشکل کامپایل میشه
من فرض گرفتن که برنامه که می خوای بسازی 16 بیتی وگر در 32 بیتی از این جور مشکلا نداری

ممنونم...کلی شرمنده کردین منو ...
بل کاملا" درسته برنامه ... چون EAX رو اسمبلر شما می خونه ولی مال ما نه !!!!

ممنونم....خیلی خیلی ممنونم


ولی برعکس من حاظرم هیچ کلاسی نرم فقط سر کلاسهای اسمبلی بشینم[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ](4).gif
ولی حیف که تا حالا کلاس اسمبلی نداشتم

چقدر جالب!!!!! شما رشتتون کامپیوتره دیگه نه ؟ چطور تا الان اسمبلی نداشتین ؟ اگر اسمبلی نداشتین پس چطور اینقدر خوب بلدین ؟


کاری نکردم و قابلی نداشت فقط امیدوارم که نتیجه ای حاصل شده باشه برات
دل تنگ گفتگوتم
مواظب خودتون باشید
سلام برسون
در آغوش خدا باشی...

ممنون..آره خیلی بدردم خورد ....

hoax3r
03-12-2008, 22:05
خوب پس همونطور که خودتون هم گفتین به نظر میاد مشکل از اسمبلرتونه، البته نمیدونم با چه اسمبلری کار میکنید ولی
همین اسمبلر masm نسخه 6.11 به بالا نباید با این کدا مشکل داشته باشند، به هر حال اگه مشکله دیگه ای هست بگین بتونم کمک میکنم


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

رشتم همون کامپیوتره، راستش تازه وارد دانشگاه شدم برای همین اسمبلی ندارم، ولی خیلی به این زبان علاقه دارم

aroosak_kooki
04-12-2008, 15:06
ممنونم hoax3r عزیز
با اضافه کردن کد386. دیگه خطای EAX رو نگرفت ...

برنامه رو نوشتم و برای استادم فرستادم ... خیلی کمکم کردی ... بازم ممنونم

VIDA1367
13-12-2008, 23:03
agha tora khoda yeki in proje ra be man bede zood.....BE ZABANE ASSEMBLI

برنامه ايي به زبان اسمبلي كه به وسيله آن تمامي اعداد 3 رقمي(مبناي 10) كه برابر با مجموع مكعبات ارقامشان مي باشند نمايش داده شود

مثلآ عدد 153 كه مساوي ميشه با 1به توان 3به علاوه 5 به توان 3 به علاوه 3به توان 3

153=1^3+5^3+3^3

mohammadfoladi
09-04-2013, 12:17
سلام
من سورس این برنامه رو میخوام .(تقسیم یک عدد 64 بیتی بر یک عدد 32 بیتی به زبان اسمبلی) کسی هست بلد باشه
بهم بگه