PDA

View Full Version : برنامه ای که 2 تا رشته را بگیره و رشته بزرگتر را چاپ کند



majidf4252
پنج شنبه 18 بهمن 1386, 10:58 صبح
با سلام
اگه ممکنه کمکم کنید تا برنامه ای که 2 تا رشته را بگیره و رشته بزرگتر را چاپ کند را بنویسم

MRHagh
جمعه 19 بهمن 1386, 10:28 صبح
حالا این یعنی ، کل برنامه رو میخوای یا کمک میخوای ؟!
برای شروع توضیح ، باید بگم رشته بصورت یک آرایه DB تعریف میشه ، بعد هم با دستورات وقفه ، مقدار دهی میشه . تابع 01 از وقفه 21h این کار رو برات انجام میده ، بصورت زیر :
Str DB 80 Dup(?),10,13
Mov Cx,80
Mov Ah,01
L: Dec Si
Int 21H
Mov Str[Si],Al
Loop L

این کد یک رشته به طول 80 رو از ورودی دریافت میکنه ، البته این یک روش ابتدائی هست و در سایر برنامه ها مطابق کاربردش ، عموما تغییر میکنه .
توابع دیگری از همین وقفه هم هست که مستقیما برای دریافت رشته هست ( اگر توجه کنی ، در تابع بالایی ما با استفاده از تابع دریافت کاراکتر ، رشته را بصورت کاراکتر به کاراکتر دریافت کردیم ) که برای استفاده از آنها باید یه مقدار مسلط تر باشی ، چون نیاز به تعریف بافر در Data Segment هم داری . اگر از این قبیل تابع ها استفاده کنی دیگه دردسر شمارش طول رشته رو هم نخواهید داشت . نمونه کد استفاده از همچین توابعی ، مثل کد زیر است :


Str DB 6,?,6 Dup(FF)
Mov Ah,0AH
Mov Dx,OFFSET Str
Int 21H

پس از استفاده از این تابع و دریافت رشته به وسیله آن ، Dos تعداد کاراکترهای رشته را در بایت دوم بافر قرار میده و جهت اطلاع هم بگم که در بایت اول بافر ، سایز خود بافر قرار میگیره . کد زیر هم برای برداشت طول رشته و قرار دادنش در Cl:


Mov Bx,OFFSET Str
Sub Ch,Ch ;Ch=00
Mov Cl ,[Bx]+1 ;Move Count to Cl

فکر میکنم مشکل برنامه ای که میخوای بنویسی تو دریافت رشته باشه وگرنه محاسبه طول رشته و انتخاب بزرگترین رشته ساده است ... موفق باشید !

majidf4252
شنبه 20 بهمن 1386, 10:04 صبح
با تشکر از شما مشکلم حل شد.