ورود

View Full Version : کمک برای محاسبه فاکتوریل به صورت بازگشتی



amir_pro
پنج شنبه 07 دی 1385, 12:39 عصر
سلام
کسی از دوستان هست که راهی را برای نوشتن برنامه فاکتوریل به صورت بازگشتی ارائه دهد؟

raha_hakhamanesh
چهارشنبه 13 دی 1385, 08:53 صبح
با سلام

دو مسئله است یک چطور کار خاتمه پیدا کنه و دومی اینکه چطوری مقادیر ذخیره بشوند
برای اولی از یک شمارنده استفاده کنید بطور مثال خود عدد مناسب است و شرط زیر را برای گردش قرار دهید
با فرض آنکه عدد در BX است
cmp bx,0
jg next
برای دومی باید کمی ابتکار به عمل بدهید و از خانه های حافظه مشابه یک متغییر بزرگ استفاده کنید چون مشخص نیست حاصل ضرب شما در یک رجیستر جا می شود یا خیر (که احتمال زیاد نمی شود) بنابراین با هر ضرب حاصل در حافظه قرار گرفته و در ضرب بعدی مضروب فیه در مقدار حافظه قبلی ضرب می شود.

موفق باشید

Younes
چهارشنبه 20 دی 1385, 09:50 صبح
باسلام
این برنامه بصورت بازگشتی فاکتوریل را حساب می کند فقط چون یک کلمه ای درنظر گرفتم فقط تا فاکتوریل 7 پیش می رود . بعنوان شروع بد نیست.
در برنامه اصلی فقط axرا مقدار بدهید و زیر برنامه را صدا کنید.
fact
proc
cmp ax,1
jg L1
ret
L1: push ax
dec ax
call fact
pop cx
mul cx
ret
fact endp

roxen13
جمعه 22 دی 1385, 16:33 عصر
من در برنامه های بازگشتی به زبان اسمبلی مشکل دارم.مثلا" در کدی که شما نوشتید وقتی خودم trace می کنم هیچ وقت به خط 8 به بعد نمی رسه.می شه توضیح بدید تا مشکلم حا بشه؟
ممنون

greenway
جمعه 22 دی 1385, 18:18 عصر
من در برنامه های بازگشتی به زبان اسمبلی مشکل دارم.مثلا" در کدی که شما نوشتید وقتی خودم trace می کنم هیچ وقت به خط 8 به بعد نمی رسه.می شه توضیح بدید تا مشکلم حا بشه؟
ممنون

برای Trace کردن حالتهای مختلفی هست . به احتمال زیاد شما کلید اشتباهی ( Step Over ) رو برای Trace کردن call fact استفاده می کنید که باعث میشه ، تا انتهای عملیات (‌با توجه به بازگشتی بودن تابع ) انجام بشه ( معمولا F8 ) ، برای Trace این تابع باید از Step Into استفاده کنید ( معمولا F7 ) .

موفق باشید