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

نام تاپیک: کپی کردن فلاپی

  1. #1

    کپی کردن فلاپی

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

    ;-------Print Function------
    print macro msg
    mov ah,9
    lea dx,msg
    int 21h
    endm

    ;-------Quit function-------
    quit macro
    mov ah,4ch
    int 21h
    endm
    ;-----------------------------

    .model small
    .data

    msg1 db 'insert the first floopy',13,10,'$'
    msg2 db 'sucsses in reading',13,10,'$'
    msg3 db 'error',13,10,'$'
    ;msg11 db 'insert the second floopy',13,10,'$'
    msg4 db 'sucsses in writing',13,10,'$'
    msg14 db "Insert another floppy, then Insert character 'c' for copying :",13,10,'$'
    n db 13,10,'$'
    buf db 1474560 dup(?)
    buf2 db 147456 dup(?)
    .code
    m proc
    mov ax,@data
    mov ds,ax
    mov es,ax

    mov ax,0003h
    int 10h
    print msg1


    mov ah,2
    mov al,18 ;number of sector
    mov dh,0 ;head
    mov cl,8 ;track
    mov ch,1 ;sector
    mov dl,0 ;drive
    lea bx,buf
    int 13h

    cmp ah,0
    jne e1
    print msg2

    jmp e2
    e1: print msg3
    jmp e4

    e2: print msg14

    mov ah,1
    int 21h

    cmp al,'c'
    jne e4
    print n

    mov ah,0dh
    int 21h


    mov ah,3
    mov al,18 ;number of sector
    mov dh,0 ;head
    mov cl,8 ;track
    mov ch,1 ;sector
    mov dl,0 ;drive
    lea bx,buf
    int 13h

    mov dl,ah
    add dl,48
    mov ah,2
    int 21h

    cmp ah,0
    jne e3
    print msg4
    jmp e4
    e3: print msg3

    e4:
    quit
    m endp
    end m

  2. #2
    کاربر تازه وارد آواتار amin joon
    تاریخ عضویت
    تیر 1383
    محل زندگی
    Shiraz-Iran
    پست
    93
    سلام

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

    کد شما چند ایراد جزئی دیگه هم داره:

    اول اینکه اندازه ی سگمنت data بزرگتر از 64کیلو شده
    دوم اینکه ch= شماره سیلندر و cl=شماره سکتور

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

    همون طور که قبلا گفته بودم ، اگه از وقفه های 25h و 26h برای خواندن و نوشتن استفاده کنید، دیگه با مفاهیم سخت افزاری (مثل شماره سیلندر و...) درگیر نمیشید و این، کار رو راحت میکنه.

    اگه سوالت رو درست متوجه نشدم بیشتر توضیح بده.........


    ْGoOd LuCk

  3. #3
    سلام
    ممنونم. استاد مربوطه گفتن با اینتراپت 13 بنوسیم و با 25 که در متاب جعفرنژاد نوشته شده اصلا کار نمی کرد.
    اندازه سگمنت data رو چقدر بگیرم ؟
    کاری که فرمودید رو انجام دادیم. Buf2 رو برای خواندن دیسک دوم در نظر داشتیم. یک بار این دیسک رو خوندیم و بعد Buf رو خواستیم کپی کنیم اما باز نشد
    چه کار کنیم ؟!!
    میشه درستش کنید ؟!!! ( ببخشید البته )
    مرسی
    بای

  4. #4
    کاربر تازه وارد آواتار amin joon
    تاریخ عضویت
    تیر 1383
    محل زندگی
    Shiraz-Iran
    پست
    93
    ببینید دوست عزیز
    اندازه ی هیچ سگمنتی از جمله سگمنت داده نمیتونه بیشتر از 64 کیلوبایت بشه.......بنابراین شما باید متغیر های اضافی رو پاک کنید(مثلا متغیر buf2)......اگر بخش data رو بصورت زیر تعریف کنید ، برنامه درست کار میکنه.. یعنی 18 سکتور را از دیسک منبع میخونه و در دیسک مقصد مینویسه:

    .data

    msg1 db 'insert the first floopy',13,10,'$'
    msg2 db 'sucsses in reading',13,10,'$'
    msg3 db 'error',13,10,'$'
    ;msg11 db 'insert the second floopy',13,10,'$'
    msg4 db 'sucsses in writing',13,10,'$'
    msg14 db "Insert another floppy, then Insert character 'c' for copying :",13,10,'$'
    n db 13,10,'$'
    buf db 63000 dup(?)


    یک راه دیگه برای تعریف متغیرهای بزرگ استفاده از extra segment است.
    .................................................. ...............


    GoOd LuCk

  5. #5
    سلام ممنونم از کمکتون. اما مشکل این هست که بعد از خواندن دیسک اول وقتی دیسک دوم رو می ذاریم و قرار هست کپی صورت بگیره برنامه خطا میده که درایو در حال اجرای برنامه دیگه ای هست.
    در واقع باید قبل از وارد کردن دیسک 2 هد از روی دیسک 1 برداشته بشه و من دستوری رو پیدا نکردم
    اگر شما سراغ دارید ممنون میشم که بگید

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

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