Re: Чтение/запись 0 сектора.
От: BlackBox Россия ---
Дата: 01.04.03 17:21
Оценка:
Здравствуйте, WiX, Вы писали:

WiX>как в win9x можно записать что либо в загрузочную облость диска


Вот года 3 назад баловался.
Записывает в нулевой сектор диска А 512 байт.
Работает как под 9х так и под ХР.
;stack segment stack
;    db 64 dup(?)
;stack ends
code segment
    org 100h
    assume cs:code,ds:code,ss:code
    include inc.inc
start:    
    @pusha
        
    push cs
    pop ds

    push ds
    pop es
; --- skip --- 
    OpenFile FName,FHandle
    ReadFile buff,512,FHandle
    CloseFile FHandle
    WriteSector 00h,01h,00h,00h,buff
    WriteSector 00h,01h,00h,00h,buff
    WriteSector 00h,01h,00h,00h,buff

    @popa
    @Quit
;*********your proc**********

;*********your codes*********
rsbuff db 512 dup(0)
buff db 512 dup(0)
FName db 'c:\bstrap.bin',0
FileHandle dw ?
FHandle dw ?
err_d    db ?
code ends

    end start
; --- inc.inc --------------------------------------------------------
;******* MISC *************
@pusha    MACRO
    push ax
    push bx
    push cx
    push dx
    ENDM

@popa    MACRO
    pop dx
    pop cx
    pop bx
    pop ax
    ENDM    

@Quit     MACRO
    mov ax,4c00H
    int 21h
    ENDM
    
;****** Disk Function *******    
InitDD MACRO
    mov ah,00h    ;func
    mov dl,00h    ;drive
    int 13h
    ENDM
ReadSector MACRO sil,sect,head,drv,rsbuff 
    mov ah,02h    ;func
    mov al,01h    ;chislo sectorov
    mov ch,sil    ;silinder
    mov cl,sect    ;sector
    mov dh,    head    ;head
    mov dl,drv    ;drive
    lea bx,rsbuff
    int 13h
    mov err_d,ah
    ENDM

WriteSector MACRO sil,sect,head,drv,wsbuff
    mov ah,03h
    mov al,01h
    mov ch,sil
    mov cl,sect
    mov dh,head
    mov dl,drv
    lea bx,wsbuff
    int 13h
    mov err_d,ah
    ENDM    
;********* File Function **********    
CreateFile MACRO Name,Handle
    mov ah,5bh
    xor cx,cx
    lea dx,Name
    int 21h
    mov Handle,ax
    ENDM

WriteFile MACRO source,bytes,Handle
    mov ah,40h
    mov bx,Handle
    mov cx,bytes
    lea dx,source
    int 21h
    ENDM

DeleteFile MACRO Name
    mov ah,41h
    lea dx,Name
    int 21h
    ENDM

OpenFile MACRO Name,Handle
    mov ah,3dh
    xor al,2
    lea dx,Name
    int 21h
    mov Handle,ax
    ENDM

ReadFile MACRO Dest,bytes,Handle
    mov ah,3fh    
    lea dx,Dest
    mov bx,Handle
    mov cx,bytes
    int 21h
    ENDM

CloseFile MACRO Handle
    mov ah,3eh
    mov bx,Handle
    int 21h
    ENDM    
; --- inc.inc --------------------------------------------------------

// --- compile.bat ---
echo off
cls
if -%1==- goto no_par
if not exist %1.asm goto no_asm

if not exist tasm.exe goto masm
tasm.exe %1.asm
goto obj
:masm
d:\works\masm\masm.exe %1.asm,,nul,nul
:obj
if not exist %1.obj goto no_obj

if not exist tlink.exe goto link
tlink.exe %1.obj /t
if exist %1.com goto go
tlink.exe %1.obj

:go
del %1.obj > nul
del %1.map > nul
goto end
:link

d:\works\masm\link.exe %1.obj,%1,nul,,
del %1.obj > nul
goto end


:no_asm
echo Файл %1.asm не найден!
goto end
:no_obj
echo Ошибка при компиляции!
goto end
:no_par
echo.
echo.
echo.
echo.
echo Нет параметра
echo использование: compile файл.asm
:end

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.