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

نام تاپیک: راهنمائی برای کپی دو استرینگ در همدیگه

  1. #1

    راهنمائی برای کپی دو استرینگ در همدیگه

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

    من برای عکس کردن یه استرینگ کدش رو نوشتم
    میخواستم با تغییر تو همین کد برنامه مورد نظرم (کپی محتوای دو استرینگ در همدیگه) رو هم بنویسم
    ولی از آنجائی که هم مبتدی هستم و هم در کار با ثباتهای اشاره گر گیج شدم نمیتونم با این الگوریتم برنامه رو بنویسم

    page 100,100
    title revers string
    .data
    string db 'assembly','$'
    stringlength dw 08
    stringrevers db 08 dup(?)
    .code
    main proc far
    mov ax, @data
    mov ds, ax
    mov es, ax
    mov cx, stringlength
    lea si, string
    lea di, stringrevers
    add si, stringlength
    unknown!:
    add si, -1
    L1:
    mov al, [si]
    mov [di], al
    dec si
    inc di
    loop L1
    mov al, [si]
    mov [di], al
    inc di
    mov dl, '$'
    mov [di], dl

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

    mov ax, 4c00h
    int 21h
    main endp
    end main


    اگر الگوریتم دیگه ای هم واسه این برنامه هست بفرمائید
    مثل استفاده از xchg

  2. #2

    نقل قول: راهنمائی برای کپی دو استرینگ در همدیگه

    من میخوام محتوای دو تا استرینگ رو باهمدیگه عوض کنم
    به طوری که هر دو محتوا قابل چاپ تو خروجی باشه
    یعنی اینطور نباشه که یکیش رو کپی کنیم تو اون یکی و در نتیجه محتوای یکیش از بین بره !
    شما یک دو بافر دارید که دو رشته در آنها هست،حالا برای الحاق دو رشته باید طول حافظه ای که به رشته دوم تخصیص میدین به اندازه مجموع دو رشته باشه
    حالا تنها کاری که باید انجام بدین اینه ، طول رشته رو بدست بیارین و از اون ایندکس شروع به کپی رشته دوم کنید دقیقا از دالر رشته دوم شروع به جایگزینی کنید و تا دالر رشته اول در رشته دوم کپی کنید.

    بدست آوردن طول رشته: در رشته دوم پیمایش کنید تا به دالر که انتهای رشته رو مشخص میکنه برسید یا با کم کردن آدرس انتها از ابتدا منهی طول رشته دوم،برای انتقال هم از دستور mov و یک حلقه استفاده کنید.
    شروع به نوشتن کنید تا بیشتر راهنمایی کنم،موفق باشی.

  3. #3

    نقل قول: راهنمائی برای کپی دو استرینگ در همدیگه

    اینطوری که مقداری حافظه هرز میمونه رو دستمون :دی
    نمیشه کاراکترهای متناظر باهم رو باهمدیگه عوض کرد ؟
    کاراکتر اول استرینگ 1 با کاراکتر اول استرینگ 2
    کاراکتر دوم استرینگ 1 با کاراکتر دوم استرینگ 2
    کاراکتر سوم استرینگ 1 با کاراکتر سوم استرینگ 2
    ...

  4. #4

    راهنمائی برای کپی دو استرینگ در همدیگه

    سلام

    شاید این کمک بکنه ...

    page 100,100
    title swap string

    CR EQU 0DH
    LF EQU 10

    .model small

    .data
    string db 'assembly',cr,lf,'$'
    stringlength dw 08
    stringrevers db 'abcdefgh' , '$'

    .code
    main proc far
    mov ax, @data
    mov ds, ax

    mov cx, stringlength
    lea si, string
    lea di, stringrevers

    L1:
    mov al, [si]
    mov ah, [di]
    xchg [si], ah
    xchg [di], al
    inc si
    inc di
    loop L1

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

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

    mov ax, 4c00h
    int 21h
    main endp
    end main

  5. #5

    نقل قول: راهنمائی برای کپی دو استرینگ در همدیگه

    نقل قول نوشته شده توسط Finisher مشاهده تاپیک
    سلام

    شاید این کمک بکنه ...

    page 100,100
    title swap string

    CR EQU 0DH
    LF EQU 10

    .model small

    .data
    string db 'assembly',cr,lf,'$'
    stringlength dw 08
    stringrevers db 'abcdefgh' , '$'

    .code
    main proc far
    mov ax, @data
    mov ds, ax

    mov cx, stringlength
    lea si, string
    lea di, stringrevers

    L1:
    mov al, [si]
    mov ah, [di]
    xchg [si], ah
    xchg [di], al
    inc si
    inc di
    loop L1

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

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

    mov ax, 4c00h
    int 21h
    main endp
    end main
    با تشکر از شما
    من هم اینجوری نوشته بودم
    ولی تو خط 25 به جای ah نوشته بودم bl
    و برنامه ارور میداد
    یعنی ارور واسه همین بوده ؟

    یکی دو تا سوال هم دارم
    تو خط 10 اون cr و lf واسه چیه ؟ کارشون چیه؟
    تو خط 11 چرا طول استرینگ رو 88 گرفتین ؟ اینطوری لوپ 60-70 تا اضافی چک نمیکنه ؟

  6. #6

    نقل قول: راهنمائی برای کپی دو استرینگ در همدیگه

    سلام

    توی خط 4 و 5 , CR و LF رو مقدار دهی کردم با دستور EQU که مثل دستور define# توی زبان C هست .
    حالا این ها مثل n\ توی زبان C عمل می کنند (درواقع مقدارشون 13 و 10 هست) .
    بعد هر جا لازم شد می شه ازشون استفاده کرد برای اینکه به خط جدید بریم ...

    مقدار string رو 8 گرفتم ... !

تاپیک های مشابه

  1. رویداد برای کپی فایل
    نوشته شده توسط v_shalchian در بخش برنامه نویسی در Delphi
    پاسخ: 3
    آخرین پست: شنبه 19 شهریور 1384, 09:03 صبح

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

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