
 ВОт начал было ASM мотреть и вот по 
----------
|int 13h WINDOWS XP недает даже читать диск
----------
говорит что приложение использует прямой доступ
как сделать так чтабы WINDOWS не прерывал
работу программы ВОТ :-[
 
 
 
 
 
  Работай с под голой ДОС, либо обращайся напрямую к контроллеру... 
  
 
 
 
  ;D Гы ГЫ я гадасть делаю мне прямо из под WINOW
и надо то ВОТ
----
что бы пользователь не подозревал
 
 
 
 
  Тогда напрямую к контроллеру... :D
 
 
 
 
  Нашол пару прерываний DOS УРА int 26h запсь
из доса выкидывает но пишет на дискету в 0
дорогу инфу от чего она читаетсь
но 
места свободнога на ней 0
занятого 0
записать ничего нельзя
и нелечится WINDOWS
--------
интересно а с винтом ето пройдет???
--------
 
 
 
 
  Гм пробовать на св не буду  :P
 
 
 
 
  
 ГМ вот примерно что получилось
mov ax,0
mov dx,0
mov cx,5
mov es,[ds:bx] ; вот ето что значит???? пока не прочел
int 26h
работает корректно пака дискета норамльная ;D
 
 
 
 
 
  Цитата
 
 ГМ вот примерно что получилось
mov ax,0
mov dx,0
mov cx,5
mov es,[ds:bx] ; вот ето что значит???? пока не прочел
int 26h
работает корректно пака дискета норамльная ;D
 AX - номер логического диска (0-A, 1-B)..
DX - стартовый номер логического сектора
CX - количество секторов для записи 
DS:BX - буфер с секторами, полными вирусов и спама  ;) (для дос выше 4.х это может быть адрес управляющего блока). 
а [DS:BX] - это хрень, компилятор проигнорирует DS: и это будет выглядеть следующим образом:
mov es,[bx] что эквивалентно mov es,ds:[bx], а зачем инициализировать ES, я не знаю, т.к. - это не нужно. Нужно инициализировать DS:BX как адрес твоего буфера с секторами для записи... :o
А в данном примере ты гадишь загрузочную запись + 4 сектора всяким мусором, расположенным по адресу DS:[BX]  ;D
 
 
 
 
 
  ;D насчет регистров ето понятно
и что загрузочную понятно
у книге написанно
------
про буффер неочень то
в книшге нету инфы или не увидел
---
как в него чего-то положить(буффер)
типа -=BEST HACKER=-
строки
 
 
 
 
  var S:String[20];
Begin
   S:='-=BEST HACKER=-';
asm
lea bx,S+1   {+1 потому что 1 байт - размер строки}
{теперь DS:BX - содержит строку S + разное говно 
после нее}
end;
End.
А вообще, после формирования динамических данных, работай со строковыми регистрами
 
 
 
 
  ;D YES УРРРРРА  заработало
помотрел вредакторе диска угу есть строчечка
 
 
 
 
  Попробовал бы с загрузочной дискеты - просмотреть содержимое бут-сектора... в плане деассемблировать и попробовать написать свой бут  ;)
 
 
 
 
  ;D ДЫК ТУДА МОНО ВИРУСНЫЙ КОД ПОЛОЖИТЬ
 ;D 
правда все поппытки
скопировать БУТ с целой дискеты 
и записать на другую
подвинды чегото не удается 
портить удается а вот читать чеггто нет
 :'(
 
 
 
 
  вот исходник типа дискету лечить
его загрузочную область
читать с хорошей дисукеты
и ззаписать на плохую
но чего то не работает
-------------------------------------
.MODEL SMALL
.STACK 100H
.DATA
;msg  db '-=ENTER    DISK=-',10,13,'$'
;msg1 db '-=No       DISK=-',10,13,'$'
;msg2 db '-=ENTER DISK #2=-',10,13,'$'
paramdisk label word
maxlen            dw 6400             
dataread      dw 6400 dup(?) 
.CODE
START:
      mov ax,3
      int 10h
      mov ax,@data
      mov ds,ax
      ;mov dx,offset msg
      ;mov bx,offset msg2
      ;mov ah,9
      ;int 21h
      mov ah,1
      int 21h
      ;xor dl,dl
      ;-------------DISK_READ----------
      mov ah,2            ;function read
      mov al,1             ;sectors col-vo
      mov cx,1              ;sector/cylindir
      mov dl,0              ;NUMBER DISK a:
      mov dh,0            ;number head
      mov es,paramdisk
      mov bx,paramdisk
      int 13h
      mov ax,0000
      ;jb a yes disck flag CF=0 --->to label <a:> no disk flag CF=1
;      mov dx,offset msg2
;      mov ah,9
;      int 21h
      mov ah,1
      int 21h
;--------------DISK WRITE----------------------------
      mov ah,3
      mov al,1
      mov cx,1
      mov dl,0
      mov dh,0
      mov es,paramdisk
      mov bx,[offset paramdisk]
      
      int 13h
;      mov ax,0
;      mov dx,0
;      mov cx,2
;      mov bx,offset paramdisk
;      mov es,[bx]
;      int 26h
;      mov ah,3
;      mov al,2
;      mov ch,0
;      mov cl,0
;      mov dh,0
;      mov dl,0
;      mov es:bx,[paramdisk]
;      mov ds,es:[bx]
;      int 13h
      ;-----------------
      call exit_p
      a:
      ;mov dx,offset msg1
      ;mov ah,9
      ;int 21h
      mov ah,1
      int 21h
      ;----EXIT------
      call exit_p
      
exit_p proc near
      mov ah,4ch      ;|
      mov al,0      ;| -EXIT to DOS;
      int 21h            ;|/
endp exit_p
end start
 
 
 
 
  Попробуй вот этот:  ;)
Только откомпиль в com-формате  :P
а для этого в том редакторе нужно выставить параметры в опции Compiler...
И зачем ты делаешь - это, обращаясь к BIOS, ДОС делает - это точно также (в смысле обращаясь к биос), но предоставляет более удобную систему адресации сектора... 

.8086
.MODEL TINY
.CODE
ORG 100h
START:
        mov ax,3                ; Чистим экран
        int 10h
        lea dx,Msg              ; Мессага о вставке первой дискеты
        mov ah,9
        int 21h
        mov ah,0                ;
        int 16h                 ; Ждем клавишу
        mov al,0                ; Номер диска (A:)
        mov cx,1                ; Читаем 1 сектор
        xor dx,dx               ; Стартовый сектор (boot)
        lea bx,Buf              ; DS:BX - буфер для чтения
        int 25h                 ; читаем
        jc  @ErMes            ; при ошибке - выдаем мессагу
        lea dx,Msg2             ; сообщение о вставке второй дискеты
        mov ah,9
        int 21h
        mov ah,0
        int 16h                 ; ждем клавишу
        mov al,0                ; Номер диска (A:)
        mov cx,1                ; Пишем 1 сектор
        xor dx,dx               ; Номер стартового сектора
        lea bx,Buf              ; DS:BX - буфер
        int 26h                 ; Пишем
        jc  @ErMes            ; не выходит - мессага
        jmp @Exit
@ErMes: lea dx,Msg1
        mov ah,9
        int 21h
@Exit : mov ax,4C00h
        int 21h
Msg  db 'Enter disk, then press key...',10,13,'$'
Msg1 db 'IO Error...',10,13,'$'
Msg2 db 'Enter disk #2 then press key...',10,13,'$'
Buf  db 512 dup (1)
End start
 
 
 
 
 
  
 чегоето нет чегто читает чегото пишет на дискету
а еффекта нет всравно загр сектор содержит строку
которую писал туда -портильщиком= 
решил короче создать портильщик чтоб
он туда писал загрузинфу прямо в кодах
перепещу HEX коды из редактора вручную 
поставлю место строки и попробую так
---
чегото не прав делаем ???
 
 
 
 
 
  :P ВИНДЫ ГОВОРЯТ 
фишка в том что пока дискета хорошая
он портит а когда плохая он уже даже портить не
может винды нендают говорят что дискета нестандартная и Брррр  :P :-[ :'(
 
 
 
 
  {Эххх - попробуй вот это :o}
Uses
    Crt;
Var
   Buf:array[1..512] of Char;
   i:Integer;
   Name:String;
Begin
     ClrScr;
     Name:='boot!sec.bin'#0;
     WriteLn('Вставьте дискету и нажмите any key...');
     asm
        mov ah,0
        int 16h
        mov al,0        {Номер логического диска}
        mov cx,1        {Количество секторов для чтения}
        mov dx,0        {Номер стартового сектора}
        lea bx,Buf      {Смещение к нашему буферу}
        int 25h         {читаем}
     end;
     WriteLn('Прочитали...смотрим содержимое:');
     {Выводим, пропуская перевод строки и возврат каретки, дабы не уехало...}
     For i:=1 to 512 do If (Buf[i]<>#10) or (Buf[i]<>#13) then Write(Buf[i]);
     asm
        {Сохранить, прочитанный сектор на диск под именем Name}
        mov ax,3D02h    {Открыть файл}
        lea dx,Name     {Адрес имени}
        inc dx          {Пропускаем байт размера стринга}
        int 21h
        jnc @AlrExst    {Уже есть}
        mov ah,3Ch      {Если нет - создаем}
        mov cx,20h      {Атрибут - архивный}
        int 21h         {Обращаемся к ДОС}
@AlrExst:mov bx,ax      {Дескриптор}
        mov ah,40h      {Запись}
        mov cx,512      {Кол-во байт для записи}
        lea dx,Buf      {Буфер с прочитанным содержимым нулевого сектора}
        int 21h         {пишем}
        mov ah,3Eh      {Закрыть файл}
        int 21h
     end;
     WriteLn('Вставьте следующую дискету then press any key...');
     {Можешь оформить в виде отдельных процедур}
     {А заодно просмотреть содержимое бут-сектора на ЖД - файл boot!sec.bin}
     asm
        mov ah,0
        int 16h
        mov ax,3D02h    {Открыть файл с содержимым бут-сектора}
        lea dx,Name     {Адрес имени}
        inc dx          {Пропускаем байт размера стринга}
        int 21h
        mov bx,ax       {Сохр. дескриптор}
        mov ah,3Fh      {Читать из файла}
        mov cx,512      {512 байт читать}
        lea dx,Buf      {Буфер для чтения}
        int 21h         {читаем}
        mov ah,3Eh      {Закрыть файл}
        int 21h
        mov al,0        {Номер логического диска}
        mov cx,1        {Количество записываемых секторов}
        mov dx,0        {Номер стартового сектора}
        lea bx,Buf      {Буфер}
        int 26h         {пишешь}
     end;
End.
 
 
 
 
  Должно блин работать, на все, эти самые - 100%  ;)
 
 
 
 
  :D да блин вот паока дискета целая то программа работает т.е. портит записывает, но 
когда испортилась и пытаешся записать то винд выдает сообщение от том что попытка записи на диск несовместимого формата блин
----
ВОТ НЮ ИЛАДНО ИЗ ПОД  DOS работет
 
 
 
 
  ААА!!! Должно работать из-под винды  >:(
Тестировал на XP, 98 SE, MS-DOS 6.22 и 95OSR2, блин 
  
 
 
 
  :D интерактивную среду написал ужо
книга abel
помогает 
из под виндовс  работает только до определ момента
портить портит а когда испортит и происходит попытка обращения к нему то винды выдвают
сообщение что произшол доступ к нестандартной
форматированной дискете и выкидывает
ВОООТ !!!!!
а так все работает
 
 
 
 
  Попробую переписать, чтобы обращалась к контроллеру НГМД... :P
 
 
 
 
  :D ето через порты или прерывания ??? :
  
 
 
 
  Что-то такая хрень получается. Типа чижика-пыжика...в смысле звука, издаваемого этим самым контроллером НГМД. А еще подумай насчет граф. движка...
 
 
   
  Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, 
нажмите сюда.