امام جواد علیه السلام : ثَلاثٌ مَن کُنَّ فِیهِ لَم یَندَم: تَرکُ العَجَلة ، وَ المَشوِرَة ، وَ التَّوَکُلُ عَلَی اللهِ عِندَ العَزمِ؛
سه چیز است که هر ** آن را مراعات کند ، پشمیان نگردد : 1 - اجتناب از عجله ، 2 - مشورت کردن ، 3 - و توکل بر خدا در هنگام تصمیم گیری .
امام جواد علیه السلام : ثَلاثٌ مَن کُنَّ فِیهِ لَم یَندَم: تَرکُ العَجَلة ، وَ المَشوِرَة ، وَ التَّوَکُلُ عَلَی اللهِ عِندَ العَزمِ؛
سه چیز است که هر ** آن را مراعات کند ، پشمیان نگردد : 1 - اجتناب از عجله ، 2 - مشورت کردن ، 3 - و توکل بر خدا در هنگام تصمیم گیری .
به نظرم کد شما اشتباست ...
1.چرا cx رو 50 گذاشتین؟؟!! شاید مثلا طول رشته 100 باشه !! سوال که طول رشته رو مشخص نکرد!!!
2.cmp دو عملوند رو از هم کم و بعد 2تا رو با هم مقایسه میکنه.... درسته که مثل sub عمل نمیکنه(حاصل رو در اولی نمیریزه و با هم مقایسه میکنه) ولی به نظرم اینجا از دستورات رشته ای استفاده بشه بهتره...
سلام
استاد نوریان سر کلاساشون چند تا تمرین داده بودن که حل کنیم
اگه میشه کمک کنین تا اینا رو حل کنیم
1) وارون کردن دو رشته (وارون یک رشته را در رشته دیگری بریزید)
2)تکه برنامه ای بنویسید که 10 خانه اول رشته str1 را به ابتدای str2 ببرد؟ (بدون دستور movsb یا movsw )
3) با لود کردن 10 خانه آخر رشته str2 در آکومالاتور به ان یه بایت اضافه کند؟ (بدون دستور رشته ای)
4) تعداد کاراکتر های "A" در رشته "str1" را در DX بریزید؟
لطفا اگه میتونید کمک کنین
نوشته اصلی توسط Mahshid
1) وارون کردن دو رشته (وارون یک رشته را در رشته دیگری بریزید)
یه حلقه بسازید تا وقتی که کاربر مثلا کلید انتر رو نزد از کاربر رشته رو دریافت کنه (یعنی کاراکتر به کاراکتر ) . بعد هر کاراکتری که دریافت شد یه کانتر بزارید و بشمارید . وقتی کاربر انتر رو زد یه اشاره گر میسازید که اشاره داره به ابتدای رشته دوم (مثلا di ) و بعد یه اشاره گر دیگه مثلا si رو اشاره بدید به انتهای رشته اول . (میتونید اول si رو به ابتدای رشته اول اشاره بدید بعد جمعش کنید با اون کانتر . اینطوری به انتهای رشته اشاره میکنه ) . (یا اینکه همون موقع که دارید رشته رو کاراکتر به کاراتر دریافت میکنید si افزایش پیدا کنه (اول به ابتدای رشته اول اشاره داره هر کاراکتر که میاد و انتر نیست وارد رشته میکنه و si یک واحد میره جلو و همینطور تا اخر و اینطور si به اخر رشته اول اشاره خواهد کرد .
بعد در یک حلقه تا زمانی که کانتر صفر نشده شروع به کپی کردن از جایی که si اشاره میکنه به جایی که di اشاره میکنه بکنید. si رو یک واحد کم و di رو یکواحد زیاد کنید .
وقتی حلقه تموم بشه رشته دوم شما معکوس رشته اول خواهد بود.
(اگه از ماکروهای IO.h استفاده کنید فکر کنم طول رشته ورودی رو در بایت اول بزاره و اینطور نیازی به محاسبه اون توسط خودتون نیست).
کاری که باید بکنید اینه
نوشته اصلی توسط Mahshid
2)تکه برنامه ای بنویسید که 10 خانه اول رشته str1 را به ابتدای str2 ببرد؟ (بدون دستور movsb یا movsw )
از همون الگوریتم بالا میتونید برای همین استفاده کنید . بجای کل رشته کافیه si رو با 10 جمع کنید . بقیه اش یکسانه.
نوشته اصلی توسط Mahshid
) با لود کردن 10 خانه آخر رشته str2 در آکومالاتور به ان یه بایت اضافه کند؟ (بدون دستور رشته ای)
4 . برای گزینه اخر هم کارتون درسته .منتها نیازی نیست که si رو با di جمع کنید. همون si کافیه . و si رو هر بار یکواحد افزایش بدید که به کاراکتر بعدی رشته اشاره کنه . cx هم برابر با طول رشته قرار بدید نه 50. برای بدست اوردن طول رشته هم میتونید از راهنمایی بالا استفاده کنید .
در مورد اون 50 نمیدونستم واسه طولش چه کنم گفتم همین باشه فعلا
واسه cmp هم آخر جزوه های استاد یه مثالی تقریبا شبیه این بود به خاطر همین یکی از دوستان اینو پیشنهاد کردن
امام جواد علیه السلام : ثَلاثٌ مَن کُنَّ فِیهِ لَم یَندَم: تَرکُ العَجَلة ، وَ المَشوِرَة ، وَ التَّوَکُلُ عَلَی اللهِ عِندَ العَزمِ؛
سه چیز است که هر ** آن را مراعات کند ، پشمیان نگردد : 1 - اجتناب از عجله ، 2 - مشورت کردن ، 3 - و توکل بر خدا در هنگام تصمیم گیری .
امام جواد علیه السلام : ثَلاثٌ مَن کُنَّ فِیهِ لَم یَندَم: تَرکُ العَجَلة ، وَ المَشوِرَة ، وَ التَّوَکُلُ عَلَی اللهِ عِندَ العَزمِ؛
سه چیز است که هر ** آن را مراعات کند ، پشمیان نگردد : 1 - اجتناب از عجله ، 2 - مشورت کردن ، 3 - و توکل بر خدا در هنگام تصمیم گیری .
1.طول STR1 رو در CX میریزه.
2. آدرس STR1 رو در DI میریزه.
3. آدرس STR2 رو در SI میریزه.
4. محتویات SI رو در ثبات اکومولاتور میریزه ، در AL یا AX ، دستور REP این خط رو به تعداد طول رشته یعنی CX تکرار میکنه... پس تا اینجا محتویات STR1 رفته به AX
5. دوباره طول رشته رو گرفتیم... اینطوری هم میشد که همون بالا طول رشته رو در BX هم بریزیم وایجا دوباره BX رو بریزیم در CX
6. حالا که حلقه شروع شد هر بار مقدارCX رو در DI میریزیم
7. STOSB : محتویات AX یا AL رو در DI میریزه... خب حالا چون در خط قبلی مقدارCX رو در DI ریختیم پس از انتهای رشته داریم جای گذاری رو انجام میدیم... یعنی اولین داده میره به انتهای رشته دومی... حالا STOSB مقدار DI رو هم یکی زیاد میکنه ولی چون در ابتدای حلقه هر بار مقدارCX رو در DI میریزیم این یکی زیاد شدن تاثیر نداره...
همین مراحلی که نوشتم رو روی کاغذ پیاده کنید متوجه میشید...
امام جواد علیه السلام : ثَلاثٌ مَن کُنَّ فِیهِ لَم یَندَم: تَرکُ العَجَلة ، وَ المَشوِرَة ، وَ التَّوَکُلُ عَلَی اللهِ عِندَ العَزمِ؛
سه چیز است که هر ** آن را مراعات کند ، پشمیان نگردد : 1 - اجتناب از عجله ، 2 - مشورت کردن ، 3 - و توکل بر خدا در هنگام تصمیم گیری .
علاقه مندی ها (Bookmarks)