PDA

View Full Version : مبتدی: کمک برای کامل کردن این کد



gh_mohammady
جمعه 06 اردیبهشت 1392, 18:02 عصر
با سلام خدمت اساتید گرامی و سپاس بابت همکاریهای شما
این کد که من نوشتم باید تعداد تکرار حروف را محاسبه کنه ، فکرم این بود که من کارکتر اول رو بریزم تو Di با کل رشته مقایسه کنم بعد کارکتر دوم رو بریزم تو di و الی آخر، نمیدونم چطور این کارو تو حلقه انجام بدم، میشه راهنماییم کنید:


dseg segment 'data'
st label byte
max db 40
len db ?
str db 40 dup(?)
repet db 0
str1 db "PLZ enter String:",'$'
str2 db 10,13,"String is:",'$'
dseg ends
cseg segment 'code'
assume cs:cseg,ds:dseg
main proc far
mov ax,dseg
mov ds,ax
lea dx,str1
call print
lea dx,st
call read
mov cl,len
mov ch,0

mov di,0
mov si,0

for1:
mov bl,str[di]
mov al,str[si]
cmp al,bl
je l1
;inc si
;jmp for1
inc di
l1:
add repet,1
mov str[si],'*'
inc si
loop for1
lea dx,str2
call print
add repet,48

mov dl,repet
mov dh,0
mov ah,2h
int 21h
mov ax,4c00h
int 21h
main endp
print proc near
mov ah,9h
int 21h
ret
print endp
read proc near
mov ah,0ah
int 21h
ret
read endp
cseg ends
end main

gh_mohammady
شنبه 07 اردیبهشت 1392, 13:23 عصر
یعنی انقدر سخته !!!!!!!!!!!!!!!!!!1
میشه خواهش کنم از حضور اساتید محترم که راهنمایی بفرماییند؟

m.j_banitaba
شنبه 07 اردیبهشت 1392, 20:38 عصر
روش کار اینجوری رو بهش می گن نوشتن برنامه به بدترین روش.
اول باید الگوریتم رو بنویسی بعد پیاده سازی کنی.

gh_mohammady
شنبه 07 اردیبهشت 1392, 21:29 عصر
ممنونم
خب میشه کمکم کنید الگوریتم شو پیدا کنم، زمانم خیلی کمه خواهش می کنم ...

m.j_banitaba
شنبه 07 اردیبهشت 1392, 21:58 عصر
یک جدول 256 تایی میخواد که مقدار اولیه همه موارد 0 باشه. سپس مقدار هر حرف را به عنوان اندیس برای inc استفاده میشه چیزی شبیه این

mov al,[di]
inc [ebx+eax]
سپس تمامی حروف غیر صفر را چاپ کن.

gh_mohammady
یک شنبه 08 اردیبهشت 1392, 16:38 عصر
این که فرمودین یعنی چی؟
الان برای چی باید حروف غیر صفر رو چاپ کنم ؟
من میخوام تعداد تکرار حروف رو چاپ کنم مثلا
abbvndd
باید عدد 2 رو چاپ کنه

m.j_banitaba
یک شنبه 08 اردیبهشت 1392, 22:40 عصر
حداکثر تعداد حروف؟

gh_mohammady
دوشنبه 09 اردیبهشت 1392, 20:48 عصر
نه تعداد حروف تکراری رو

programer-ir
سه شنبه 10 اردیبهشت 1392, 21:56 عصر
برنامه شما کاری که می کنه اینه که یک رشته می گیره تو یک حلقه هر دفعه کاراکتر اول رو با تمام کاراکتر ها مقایسه می کنه ....... خوب که چی دقیقا بگید می خوایید چی کار کنید با مثال

m.j_banitaba
سه شنبه 10 اردیبهشت 1392, 23:26 عصر
پس بعد از پر کردن جدول تعداد خانه های بیشتر از یک می شود جواب.

gh_mohammady
پنج شنبه 12 اردیبهشت 1392, 14:43 عصر
بله درسته ، دقیقا همینو میخوام

xman_1365_x
شنبه 14 اردیبهشت 1392, 16:38 عصر
این کد که من نوشتم باید تعداد تکرار حروف را محاسبه کنه ، فکرم این بود که من کارکتر اول رو بریزم تو Di با کل رشته مقایسه کنم بعد کارکتر دوم رو بریزم تو di و الی آخر، نمیدونم چطور این کارو تو حلقه انجام بدم، میشه راهنماییم کنید:

با روشی که ذکر کردین میشه اما کمی کندتر،چراکه پردازنده دستوراتی برای کار با رشته در نظر گرفته!

درون حلقه با روش ها مختلفی میشه انجام داد ساده ترین حالت با لوپ


jmp resume

str db "salam salam"
str_count dw 11
count_find_char db 0
yourchar db 'a'

resume:
xor bx,bx
mov al,yourchar
mov cx,str_count
dec cx ;n-1 loop
l1:
cmp al,str[bx]
jne l2
inc count_find_char
l2:
inc bx
loop l1


موفق باشی