PDA

View Full Version : کمک در ساخت پروژه سرچ و چاپ نتیجه



smrahmadi
سه شنبه 22 اردیبهشت 1394, 21:45 عصر
با عرض سلام و خسته نباشید خدمت همه ی اساتید ......

بنده برای پروژه درس اسمبلی در دانشگاه یک پروژه از سوی استاد مربوطه دریافت کردم که باید به صورت زیر باشه :

یک کلمه از کاربر بگیره و متناسب با اون کلمه یه خروجی به ما بده ..........
مثلا اگر کلمه Mov وارد شد یه خروجی متنی بده مثل in yek code dar zaban asembelist .
و دیگر کلمات هم به این شکل

حالا اگر میشه از اساتید میخوام که مقداری به بنده کمک کنن من اصلا نمیدونم باید از کجا شروع کنم و چه کدی باید بنویسم

راستی ما با EM8086 کار می کنیم با تشکر

masoud.8086
چهارشنبه 23 اردیبهشت 1394, 16:58 عصر
سلام
برای حل این برنامه راهای زیادی وجود داره ولی بهترین راخ استفاده از جدوله..بیا رشته هاتو داحل جدول تعریف کن بعد همون جا که رشته مورد نظر رو وارد میکنه میای اونو ذخیره میکنه و بعد میای کارکتر به کارکتر مقایسه میکنه و اگه برابر بود رشته مقابل همون ورودی رو در جدول چاپ میکنی..موفق باشی..

smrahmadi
جمعه 01 خرداد 1394, 19:01 عصر
چه جوری میشه از جدول استفاده کرد

smrahmadi
جمعه 01 خرداد 1394, 19:07 عصر
الان خودم این کد رو نوشتم ولی کار نمیکنه ، فکر کنم نوع ورودی با نوع رشته ای که من تعریف کردم فرق میکنه ، چون وقتی ورودی رو مثل رشته تعریف شده وارد میکنم باز هم میگه برابر نیستند !!!!! و وقتی مقایسه رو بین دوتا رشته و یا بین دو ورودی قرار میدم و وقتی با هم یکسان باشند پیغام یکسان بودن رو چاپ می کنه :














jmp start ; jump over data declaration




msg: db "Lotfan Dastore Mored Nazar Ra Vared Konid", 0Dh,0Ah, 24h
mcmp: db "In Cmp Ast",0Dh,0Ah, 24h







string DB 101
DB ?
DB 101 DUP (?)







start: mov dx, msg ; load offset of msg into dx.
mov ah, 09h ; print function is 9.
int 21h ; do it!



MOV AH, 0ah
LEA DX, string
INT 21h








cld


; load source into ds:si,
; load target into es:di:
mov ax, cs
mov ds, ax
mov es, ax
lea si, str1
lea di, str2


; set counter to string length:
mov cx, size


; compare until equal:
repe cmpsb
jnz not_equal


; "yes" - equal!
mov al, 'y'
mov ah, 0eh
int 10h


jmp exit_here


not_equal:


; "no" - not equal!
mov al, 'n'
mov ah, 0eh
int 10h


exit_here:


; wait for any key press:
mov ah, 0
int 16h


ret


; strings must have equal lengths:
x1:
str1 db string
str2 db 'Ali'
size = ($ - x1) / 2











میشه یه راهنمایی کنید :(

smrahmadi
جمعه 01 خرداد 1394, 20:44 عصر
اگه میشه یه توضیح راجب جدول بدین

masoud.8086
جمعه 01 خرداد 1394, 22:30 عصر
برای تعریف جدول به شکل زیر عمل کنید
a db 123
456
789
تا وقتی که یک داده دیگه تعریف نکنید این جدول ادامه داره..موفق باشید

smrahmadi
یک شنبه 03 خرداد 1394, 10:51 صبح
برای تعریف جدول به شکل زیر عمل کنید
a db 123
456
789
تا وقتی که یک داده دیگه تعریف نکنید این جدول ادامه داره..موفق باشید


متوجه منظورتون نمیشم !!! نکنه منظور شما از جدول تعریف مثل همون آرایه هست :متفکر: شایدم بنده درست متوجه نشدم ؟؟؟؟

استاد یه سوال الان کدی گه بالا نوشتم رو مشاهده کنید .... گفتم بعد از اینکه کاربر کلمه Ali رو وارد کرد مثلا یه خروجی متناسب با اون بده

اما متاسفانه اون ALi که کاربر وارد می کنه با Ali که از نوع رشته در برنامه در خط های انتهایی وجود داره برابر شناخته نمیشن دلیلش چی می تونه باشه ؟؟؟؟؟

اصلا مگه جنس ورودی که از کاربر میگیره چی هست که با String که در برنامه وجود داره یکی شناخته نمیشه ؟

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

واقعا ممنون میشم پاسخ بدین به خدا گیج شدم :گریه:

masoud.8086
یک شنبه 03 خرداد 1394, 11:24 صبح
بله دقیقا همون ارایس.. ببینید برای مقایشه رشته بهتر بیاد از دستورات معمولی استفاده کنید تا movsb و.. برای مقایسه کلمه علی که داخل برنامه تعریف شده و کلمه علی که کاربر زده شما باید بیای اینو کارنر به کارنر مقایسه کنی یهنی کارکتر اول علی داخل برنامه با کارکتر اول علی که کاربر وارد کرده بای این کار باید از دوتا اشاره گر استفاده کنی (با ی اشارگرم میشه)و رشته ها تو داخل ارایه بریزی. فرض کن دو تا ارایه داریم به اسم a , b که هر دوی اینا کلمه علی رو دارن وقتی میخوای باه ممقایسه کنی که باهم برابرن یا نه باید بیای به شکل زیر مقایسه کنی


mov si,0

mov cx,len
k:
cmp a
mov al,a[si]
cmp al,b[si]
jne exit
inc si
loop k

رشته برابر است
jmp l
exit:

رشته برابر نیست
l:

smrahmadi
یک شنبه 03 خرداد 1394, 19:03 عصر
میشه یه توضیح برای کدی که قرار دادین بدین

masoud.8086
یک شنبه 03 خرداد 1394, 22:29 عصر
توی این کد دارم خونه اول ارایه که کاربر وارد کرده رو به رو لا خونه اول رشته که دارم مقایسه میکنم اگه برابر نبود بعنی برابر نیست اگر برابر بود میرم خونه دوم ارابه رو با خونه دوم رشته مربوطه مقایسه میکنم..تا اخرین کارکتر مع اگه برابر بود یعنی کل رشته برابر هست

smrahmadi
پنج شنبه 07 خرداد 1394, 17:05 عصر
با عرض پوزش هر کاری کردم نشد :گریه:

میدونم تقاضای زیادیه اما اگه میشه کد بالا رو به صورت یه سورس خیلی کوچک بهم بدین واقعا ممنونتون میشم