PDA

View Full Version : سوال: به دست آوردن طول یک رشته در اسمبلی



amir9372
شنبه 21 دی 1392, 00:19 صبح
سلام می خواستم بدونم که چطور میشه طول یک رشته رو در اسمبلی به دست آورد ؟

alireza_s_84
شنبه 21 دی 1392, 11:35 صبح
سلام می خواستم بدونم که چطور میشه طول یک رشته رو در اسمبلی به دست آورد ؟

این رشته کجا خونده شده؟

amir9372
شنبه 21 دی 1392, 14:16 عصر
این رشته از کاربر گرفته میشه

alireza_s_84
شنبه 21 دی 1392, 23:44 عصر
این رشته از کاربر گرفته میشه
خب دو راه برای گرفتن رشته از کاربر وجود داره:
1- استفاده از توابعی که فقط یک کارکتر ورودی میگیرند
2- استفاده از تابع 0AH وقفه 21
در روش اول میتونید یک متغیر تعریف کنید و بعد از ورود هر کارکتر مقدار اون رو یک واحد افزایش بدین
در روش دوم هم که کلا در لیست پارامتر شما یک متغیر برای ذخیره طول واقعی رشته وارد کردین و اصلا نیازی نیست شما کاری بکنید

amir9372
یک شنبه 22 دی 1392, 01:22 صبح
بله شما درست میگین ، من از روش دوم استفاده کردم ( ولی شاید کلمه ای که کاربر مینویسه به اون اندازه که من معین کردم نباشه )
این یه بازی هستش که یک نفر میاد یک کلمه مینویسه و نفر دوم 3 بار بیشتر از تعداد حروف کلمه مورد نظر فرصت داره که اون کلمه رو حدس بزنه ( مثلا اگه کلمه 4 حرفی باشه نفر دوم 7 بارمیتونه حدس بزنه )

alireza_s_84
یک شنبه 22 دی 1392, 14:08 عصر
بله شما درست میگین ، من از روش دوم استفاده کردم ( ولی شاید کلمه ای که کاربر مینویسه به اون اندازه که من معین کردم نباشه )
این یه بازی هستش که یک نفر میاد یک کلمه مینویسه و نفر دوم 3 بار بیشتر از تعداد حروف کلمه مورد نظر فرصت داره که اون کلمه رو حدس بزنه ( مثلا اگه کلمه 4 حرفی باشه نفر دوم 7 بارمیتونه حدس بزنه )
شکل کلی تعریف تابع به اینصورت هست:

strTemp LABEL BYTE
MaxLen DB 31
ActLen DB ?
strInput DB 31 DUP(?)

LEA DX,strTemp
MOV AH,0AH
INT 21H

من یک متغیر تعریف کردم که کاربر میتونه یک رشته با حداکثر 30 کارکتر وارد کنه ولی ممکنه کاربر تنها 10 یا 15 کارکتر وارد کنه ، در اینجا من با استفاده از ActLen میتونم طول واقعی رشته وارد شده توسط کاربر رو بدست بیارم.

amir9372
یک شنبه 22 دی 1392, 23:48 عصر
ببخشید میشه بگین actlen چطوری این کارو انجام میده ؟
رشته رو میگیریم ، شرط آخر رشته در اسمبلی علامت $ هستش حالا باید حروف این رشته رو یکی یکی با $ مقایسه کنیم و یک شمارشگر داشته باشیم

alireza_s_84
دوشنبه 23 دی 1392, 01:58 صبح
ببخشید میشه بگین actlen چطوری این کارو انجام میده ؟
رشته رو میگیریم ، شرط آخر رشته در اسمبلی علامت $ هستش حالا باید حروف این رشته رو یکی یکی با $ مقایسه کنیم و یک شمارشگر داشته باشیم

دوست عزیز اگر شرط انتهای رشته $ باشه شما از روش دوم استفاده نمیکنی ، روش دوم شرط انتهای رشته یا ورود کلید اینتر هست یا رسیدن به حداکثر طول مجاز
ضمنا توی مثالی که من زدم تابع بطور خودکار طول واقعی رشته رو توی متغیر ActLen ذخیره میکنه و تنها کافیه شما هرجا لازم بود اون رو بخونی.

amir9372
دوشنبه 07 بهمن 1392, 20:52 عصر
ممنون دوست عزیز که جواب دادین :
میشه برای مقایسه دو رشته هم کمکم کنید ، قراره کلمه اولی که گرفته شده با کلمه دوم مقایسه بشه و حروف مشترکشون سر جاش چاپ بشه