نمایش نتایج 1 تا 23 از 23

نام تاپیک: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

  1. #1

    مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    یه رشته ای رو از کاربر دریافت کردیم و میخواهیم که اولین کاراکتر رو با آخرین کاراکتر در رشته رو مقایسه کنه و اگه مثل هم بودند با یه پیغام اعلام کنه .

    مشکلی که من دارم مقایسه کردن اولین کاراکتر با آخرین کاراکتر هستش .
    دوستان می تونند راهنمایی کنند ؟

  2. #2

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    دوستان کسی راه حلی به ذهن اش نمیرسه .
    اگه اولین عنصر Buffer رو درون یک ثبات بریزیم و بعد اگه بخواهیم با اندیس دادن به Buffer آخرین عنصر رو با ثبات مقایسه کنیم . به نظرتون عملی هست !

  3. #3

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    فقط کافیه یک اشاره گر به ابتدا بافر و دیگری به انتهای بافر اشاره کنه بعد مقایسه کنید
    برای این کار یک ثبات مشترک برای نگهداری آدرس شروع و برای رفتن به انتها هم طول بافر رو در ثبات bx قرار بدین و مقایسه کنید ، همین
    موفق باشی

  4. #4

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    من به این شکل نوشتم ولی کار نمیکنه
    mov cl,buf[bx]
    mov bx,0
    mov bl,buf[bx]
    cmp cl,bl
    je Label_1

  5. #5

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    من برنامه تون رو تصحیح کردم:

    "buf db "MARYAM
    len db 6


    mov bx,len-1
    mov cl,[buf+bx]
    mov bx,0
    mov bl,[buf+bx]
    cmp cl,bl
    je Label_1

  6. #6

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    من برنامه تون رو تصحیح کردم:
    فقط این خط سوم رو هم باید اصلاح کنید
        xor bx,bx
    mov bl,len-1

    و نیازی به خط پنجم نیست و در خط ششم هم به bx فقط کاربردی که میتونه داشته باشه بخواین عناصر دیگه ای هم بررسی کنید که برای کم کردن دستورات باید از si,di کمک بگیرین

  7. #7

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    جناب xman_1365_x ، آیا منظورتون این بود؟

    buf db "MARYAM"
    len db 6

    mov si,buf
    mov di,buf+len-1
    cmpsb
    je Label_1

    البته من خواستم کمترین تغییرات رو به کدشون بدم

  8. #8

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    آیا منظورتون این بود؟
    نه منظورم این نبود،این کدتون اشتباه هست. کد قبلی هم دستور mov bx,len-1 اشتباه هست حواسم نبود شما از آدرس کم کردین نه مقدار و نمیتونین 8 بیتی رو به 16 بیت انتقال بدین که در کد زیر درستش رو نوشتم
    این حالت برای مقایسه اولین و آخرین هست

    org 100h

    mov bh,0
    mov bl,len
    dec bl
    mov cl,[buf+bx]
    cmp cl,buf
    je Label_1


    Label_1:

    ret

    buf db "MARYAM"
    len db 6
    end

    موفق باشید

  9. #9

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    تشکر فراوان از دوستان عزیز من برنامه رو با اصلاحات شما دوستان دوباره نوشتم و برنامه به درستی کار میکند .
    اما یه سوال از جناب xman_1365_x
    چرا buf+bx کردیم ؟ مگه مقدار bx چند هستش
    و برای چی dec BL ؟
    باز هم از دوستان کمال تشکر رو دارم
    آخرین ویرایش به وسیله M.amin : سه شنبه 06 دی 1390 در 23:13 عصر

  10. #10

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    کمی بعد از من پست دادین انگار جواب رو ندیدین

    .model small
    .stack
    .data
    msg1 DB 13,10,"Matn Mored Nazar Ra Vared Konid : :",13,10,"$"
    msg2 DB 13,10,"Charakter Aval Ba Akhar Mosavi Hastand ",13,10,"$"
    msg3 DB 13,10,"Charakter Aval Ba Akhar Mosavi Nistand ",13,10,"$"
    string LABEL BYTE
    max DB 20
    len DB ?
    buf DB 20 dup(?)
    .code
    main proc far

    mov ax ,@data
    mov ds,ax

    lea dx,msg1
    mov ah,09h
    int 21h

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

    xor bx,bx
    mov bl,len
    dec bl

    mov cl,[buf+bx]
    cmp cl,buf
    je Label_1
    lea dx,msg3
    mov ah,09h
    int 21h
    jmp exit

    Label_1: lea dx,msg2
    mov ah,09h
    int 21h


    exit:

    mov ah,4ch
    int 21h
    main endp
    end main

  11. #11

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    جناب xman_1365_x
    اون دوتا تکه کدی که گذاشتم و فرمودین غلطه، از نظر MACRO ASSEMBLER اشتباهه ،ولی از نظر FASM درسته و خودم تستش کردم(با EMU)
    من کد M.amin رو چک نکردم ولی کد زیر نسخه ی MACRO ASSEMBLER اون دوتا کد خودم که بالا گذاشتم:


    buf db "MARYAM"
    len db 6

    lea si,buf
    lea di,buf
    add di,offset len-1
    mov al,[di]
    cmp [si],al
    je EXIT

    که مثل کدهای قبلی کار می کنندو ممنون از اینکه اینقدر توجه دارید و وقت می گذارین

  12. #12

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    دوستان سعی کنید با یک نام کاربری وارد شین
    چرا buf+bx کردیم ؟ مگه مقدار bx چند هستش
    و برای چی dec BL ؟
    مقدار bx =len-1=6-1 یک واحدی که کم میشه برای اینه عنصر اول همون آدرس بافر هست برای همین یک واحد کم میکنیم طول بافر رو
    دستور dec برای کم کردن یک واحد هست همون منهی یک که داریم
    برنامه رو در امولاتور خط به خط اجرا کنید تغییرات رو مشاهده کنید!

  13. #13

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    نقل قول نوشته شده توسط pe32_64 مشاهده تاپیک
    جناب xman_1365_x
    اون دوتا تکه کدی که گذاشتم و فرمودین غلطه، از نظر MACRO ASSEMBLER اشتباهه ،ولی از نظر FASM درسته و خودم تستش کردم(با EMU)
    من کد M.amin رو چک نکردم ولی کد زیر نسخه ی MACRO ASSEMBLER اون دوتا کد خودم که بالا گذاشتم:


    buf db "MARYAM"
    len db 6

    lea si,buf
    lea di,buf
    add di,offset len-1
    mov al,[di]
    cmp [si],al
    je EXIT

    که مثل کدهای قبلی کار می کنندو ممنون از اینکه اینقدر توجه دارید و وقت می گذارین
    بله بازم میگم اشتباه هست مثل همین کدی که گذاشتین، چرا ؟
    کد شما مشکلش اینه آدرس len رو با آدرس buf جمع میکنید و به آدرس اشتباه میرین و برنامه اشتباه میشه خروجیش! کد های قبلی هم خودتون تست کنید مشکلتون رو متوجه میشین
    کد شمارو درست کردم تغییرات رو بررسی کنید
    org 100h

    dec len
    lea si,buf
    lea bx,buf
    add bl,len
    mov al,[bx]
    cmp [si],al
    je EXIT
    cld
    EXIT:
    stc

    ret
    buf db "MARYAM"
    len db 6
    end

  14. #14

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    نقل قول نوشته شده توسط xman_1365_x مشاهده تاپیک
    برنامه رو در امولاتور خط به خط اجرا کنید تغییرات رو مشاهده کنید!
    بله ، من دقیقا متوجه شدم .
    اما حالا اگه اگه بخواهیم یه کم برنامه رو تغییر بدیم . اگه بخواهیم رشته ای رو که داریم رو از آخر به اول چک کنیم که آیا با رشته وارد شده مساوی است یا خیر . ( مثلا ABA رو از هر طرف چک کنیم مساوی هستند )
    به نظرتون باید چه کار بکنیم ؟

  15. #15

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    جناب xman_1365_x این کد درسته؟(اشتباهشو درست فهمیدم)



    STACK SEGMENT PARA STACK 'Stack'
    DB 1024 DUP(0)
    STACK ENDS
    DATASEG SEGMENT PARA 'data'
    buf1 db "ASM"
    buf db "MARYAM"
    buf2 db "peyman"
    len1 db 8
    len db 6
    len2 db 56
    DATASEG ENDS
    CODESEG SEGMENT PARA 'Code'
    MAIN PROC FAR
    ASSUME SS:STACK,DS:DATASEG,CS:CODESEG
    MOV AX,DATASEG
    MOV DS,AX
    MOV ES,AX
    s:
    lea si,buf
    lea di,buf
    mov bl,len
    dec bl
    cbw
    add di,bx
    mov al,[di]
    cmp [si],al
    je EXIT
    jmp s
    EXIT:
    MOV AX,4C00H
    INT 21H
    MAIN ENDP
    CODESEG ENDS
    END MAIN


  16. #16

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    این کد درسته؟(اشتباهشو درست فهمیدم)
    با در نظر نگرفتن دستور cbw که اضافه هست و دستور jmp s باعث میشه برنامه توی حلقه بینهایت گیر کنه اگر کاراکتر برابر نباشه ، باقیش همون روش هست که نمونه کد گذاشتم و درسته
    البته bh=0 نکردین در این برنامه اشکالی نداره اما در برنامه های دیگه باید حواستون باشه باعث میشه اشتباه میشه
    موفق باشی

  17. #17

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    مطابق دستورتون برنامه تصحیح شد:


    STACK SEGMENT PARA STACK 'Stack'
    DB 1024 DUP(0)
    STACK ENDS
    DATASEG SEGMENT PARA 'data'
    buf1 db "ASM"
    buf db "MARYAM"
    buf2 db "peyman"
    len1 db 8
    len db 6
    len2 db 56
    DATASEG ENDS
    CODESEG SEGMENT PARA 'Code'
    MAIN PROC FAR
    ASSUME SS:STACK,DS:DATASEG,CS:CODESEG
    MOV AX,DATASEG
    MOV DS,AX
    MOV ES,AX
    lea si,buf
    lea di,buf
    xor bx,bx
    mov bl,len
    dec bl
    add di,bx
    mov al,[di]
    cmp [si],al
    je EXIT
    jmp Next
    Next:
    mov ah, 1
    int 21h
    EXIT:
    MOV AX,4C00H
    INT 21H
    MAIN ENDP
    CODESEG ENDS
    END MAIN


  18. #18

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    در مورد چک کردن رشته از آخر به اول دوستان میشه راهنمایی کنن .
    میتونیم رشته رو معکوس کنیم . و بعد اون رو با buf مقایسه کنیم .؟

  19. #19

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    نقل قول نوشته شده توسط M.amin مشاهده تاپیک
    در مورد چک کردن رشته از آخر به اول دوستان میشه راهنمایی کنن .
    میتونیم رشته رو معکوس کنیم . و بعد اون رو با buf مقایسه کنیم .؟
    نیازی به معکوس کردن نیست با یک واحد کم کردن از آدرس انتهای رشته به سمت اول رشته پیمایش میکنید
    کاقیه دستوری که به انتهای رشته میرفتیم بعد از مقایسه dec کنید
    موفق باشی

  20. #20

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    نقل قول نوشته شده توسط xman_1365_x مشاهده تاپیک
    نیازی به معکوس کردن نیست با یک واحد کم کردن از آدرس انتهای رشته به سمت اول رشته پیمایش میکنید
    کاقیه دستوری که به انتهای رشته میرفتیم بعد از مقایسه dec کنید
    موفق باشی
    سوال این هستش چک بشه که رشته ورودی وقتی از انتها پیمایش میشه مساوی هست با پیمایش از ابتدا .
    مثلا رشته " ABCBA" این رشته از هر دو طرف وقتی پیمایش میشه مساوی هستش .
    تو کد قبلی ما انتهای رشته رو با ابتدای رشته مقایسه می کردیم . با کم کردن آدرس انتهای رشته ، فقط از انتها به ابتدا با کاراکتر اول رشته چک میشه .

  21. #21

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    نقل قول نوشته شده توسط M.amin مشاهده تاپیک
    سوال این هستش چک بشه که رشته ورودی وقتی از انتها پیمایش میشه مساوی هست با پیمایش از ابتدا .
    مثلا رشته " ABCBA" این رشته از هر دو طرف وقتی پیمایش میشه مساوی هستش .
    تو کد قبلی ما انتهای رشته رو با ابتدای رشته مقایسه می کردیم . با کم کردن آدرس انتهای رشته ، فقط از انتها به ابتدا با کاراکتر اول رشته چک میشه .
    این برنامه نیاز به حلقه داره درون حلقه یکی به ابتدا اشاره کنه و یکی به انتهای رشته بعد مقایسه کنید و در هر مرحله از انتها یک واحد کم بشه و به ابتدای آدرس یک واحد اضافه بشه

  22. #22

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    من این رو نوشتم اما خطا میگیره
     Mohasebe proc neare


    mov bh,0
    mov bl,len
    for: cmp dx,bx
    je exit

    dec bl
    mov cl,[buf+bx]
    cmp cl,[buf+dx]
    jne label_1
    inc dx
    jmp for
    ret

  23. #23

    نقل قول: مقایسه اولین کاراکتر یک رشته با آخرین کاراکتر همان رشته

    من این رو نوشتم اما خطا میگیره
    خوب اشتباه نوشتین!
    از dx به عنوان اندیس استفاده کردی،اندیس ابتدا باید صفر باشه،حلقه باید len/2 باشه
    موفق باشی

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •