ورود

View Full Version : سوال: راهنمایی در مورد چند یک برنامه در اسمبلی



mahmoodtaherinia
شنبه 09 خرداد 1388, 11:05 صبح
سلام

تکه برنامه زیر برای مشخص کردن متقارن بودن رشته است .ظاهر همه چی درسته و درست کار نمی کنه .ممنون می شم راهنمایی کنید



call Erase
lea si,buffer
lea di,buffer

lea bx,buffer
call lenst



mov ax,lenst1

add di,ax
while:
mov al,[si]
cmp al,[di]
jne print_no
inc si
dec di
cmp si,di
jl while
printit msg16
jmp exit
print_no:
printit msg17
exit:
call Back_menu
main endp


در ضمن اگه میشه در مورد الحاق دو رشته هم یه توضیح بفرمایید

با سپاس

mahmoodtaherinia
شنبه 09 خرداد 1388, 18:19 عصر
یعنی کسی نیست راهنمایی کنه

Blue Angel
شنبه 09 خرداد 1388, 18:44 عصر
اگه کل برنامه رو بذاری شاید بتونم برات درستش کنم.....

alihassanabadi
شنبه 09 خرداد 1388, 20:18 عصر
سلام
برنامت رو همیشه کامل بزار
راه ه های مختلفی برا مقایسه دو رشته داریم
با فرض اینکه میخوایم رشته ها رو از ورودی بگیریم
البته من الان تو کافی نت هستم اگه جایی اشتباه بود ببخشید
خب تو بخش data کد زیر رو بنویس


slist1 label byte
max1 db 50
len1 db ?
buf1 db 50 dup(?)


slist2 label byte
max2 db 50
len2 db ?
buf2 db 50 dup(?)


و داخل سگمنت کد این کد رو مینویسی
رشته اول و دوم رو با هم دریافت میکنی با استفاده از تابع 0ah به این صورت


mov ah,0ah
lea dx,slist1
int 21h

mov ah,0ah
lea dx,slist2
int 21h
lea si,buf1
lea di,buf2
l1:mov byte ptr dl,ds:[si]
mov byte ptr bl,ds:[di]
cmp dl,'$'
je exit
cmp bl,'$'
je exit
cmp dl,bl

jne exit
inc si
inc di
jmp l1

exit:


گفتم که تو کا فی نت هستم میدونم برنامه اشتباست ولی این یه دونه از راه حلاش بود
یعنی بیای buf اول رو بریزی تو si
و buf دوم رو بریزی تو di و هر بار این دو تا رو با هم مقایسه کنی وبعد یک واحد به هر دوتاشون اضافه کنی
دیگه بقیش بستگی به خودت داره
با تشکر
سعادت دیگران بخش مهمی از خوشبختی ماست

mahmoodtaherinia
شنبه 09 خرداد 1388, 23:35 عصر
سلام
برنامت رو همیشه کامل بزار
راه ه های مختلفی برا مقایسه دو رشته داریم
با فرض اینکه میخوایم رشته ها رو از ورودی بگیریم
البته من الان تو کافی نت هستم اگه جایی اشتباه بود ببخشید
خب تو بخش data کد زیر رو بنویس


slist1 label byte
max1 db 50
len1 db ?
buf1 db 50 dup(?)


slist2 label byte
max2 db 50
len2 db ?
buf2 db 50 dup(?)
و داخل سگمنت کد این کد رو مینویسی
رشته اول و دوم رو با هم دریافت میکنی با استفاده از تابع 0ah به این صورت


mov ah,0ah
lea dx,slist1
int 21h

mov ah,0ah
lea dx,slist2
int 21h
lea si,buf1
lea di,buf2
l1:mov byte ptr dl,ds:[si]
mov byte ptr bl,ds:[di]
cmp dl,'$'
je exit
cmp bl,'$'
je exit
cmp dl,bl

jne exit
inc si
inc di
jmp l1

exit:

گفتم که تو کا فی نت هستم میدونم برنامه اشتباست ولی این یه دونه از راه حلاش بود
یعنی بیای buf اول رو بریزی تو si
و buf دوم رو بریزی تو di و هر بار این دو تا رو با هم مقایسه کنی وبعد یک واحد به هر دوتاشون اضافه کنی
دیگه بقیش بستگی به خودت داره
با تشکر
سعادت دیگران بخش مهمی از خوشبختی ماست

سلام دوست عزیز
ممنون از شما به خاطر جواب
ولی منظور من متقارن بودن رشته اینه که آیا از هر طرف که رشته بخونی فرقی می کنه یا نه .