jueves, 21 de noviembre de 2013

Dispositivos de Almacenamiento


Acceso a Disco.

 

El sistema de almacenamiento en disco constituye el soporte externo de la información. Los datos se registran sobre la superficie del disco en una serie de circunferencias concéntricas llamadas pistas (track).

 

Varias pistas, una por cada cara del disco (generalmente 2), componen un cluster. Cada pista está dividida en porciones iguales llamadas sectores. Un sector es la unidad básica de almacenamiento en disco. El tamaño de un sector se mide en bytes, y depende de las características del disco.

 En esta sección se presentan 3 rutinas que permiten lectura y escritura absoluta de sectores, así como la determinación del espacio libre disponible en un disco.

 

 


 

 

Rutina _AbsoluteRead: Transfiere el contenido de un o más sectores del disco al buffer especificado, accesando directamente a los sectores lógicos. En caso de error, se enciende el bit de acarreo y AX contiene el código del error.

 

Invocación:      push <unidad de disco
push <número de sectores a leer
push <primer sector a leer>
push SEG <buffer>
push OFFSET <buffer>
call _AbsoluteRead
PUBLIC _AbsoluteRead
_AbsoluteRead PROC NEAR
ARG Buffer:DWORD,Start:WORD,NumSect:WORD,Drive:BYTE= ArgLen
push bp ; salvar BP
mov bp,sp ; permitir acceso a los argumentos
push bx ; salvar registros
push cx
push dx
push ds
mov al,Drive ; lectura absoluta de disco
mov cx,NumSect
mov dx,Start
lds bx,Buffer
int 25h
pop bx
pop ds ; recuperar registros
pop dx
pop cx
pop bx
pop bp
ret ArgLen
_AbsoluteRead ENDP

 

 

 

 

Rutina _AbsoluteWrite: Transfiere el contenido del buffer especificado a uno o más sectores de disco, accesando directamente a los sectores lógicos. En caso de error, se enciende el bit de acarreo y AX contiene el código del error.

 

Invocación:      push <unidad de disco>
push <número de sectores a escribir>
push <primer sector a escribir>
push SEG <buffer>
push OFFSET <buffer>
call _AbsoluteWrite
PUBLIC _AbsoluteWrite
_AbsoluteWrite PROC NEAR
ARG Buffer:DWORD,Start:WORD,NumSect:WORD,Drive:BYTE= ArgLen
push bp ; salvar BP
mov bp,sp ; permitir acceso a los argumentos
push bx ; salvar registros
push cx
push dx
push ds
mov al,Drive ; escritura absoluta a disco
mov cx,NumSect
mov dx,Start
lds bx,Buffer
int 26h
pop bx
pop ds ; recuperar registros
pop dx
pop cx
pop bx
pop bp
ret ArgLen
_AbsoluteWrite ENDP

Rutina _FreeDiskSpace: Devuelve en DX:AX el espacio libre en disco (en Kb). En caso de error, se enciende el bit de accarreo.

 

Invocación:      push <unidad de disco>
call _FreeDiskSpace
PUBLIC _FreeDiskSpace
_FreeDiskSpace PROC NEAR
ARG Drive:BYTE= ArgLen
push bp ; salvar BP
mov bp,sp ; permitir acceso a los argumentos
push bx ; salvar registros
push cx
mov ah,36h ; función 36h
mov dl,Drive
int 21h ; del DOS
mul cx ; DX:AX= bytes por cluster
mov cx,1024 ; CX= 1 Kb
div cx ; DX:AX= Kb por cluster
mul bx ; DX:AX= Kb libres en el disco
pop cx ; recuperar registros
pop bx
pop bp
ret ArgLen
_FreeDiskSpace ENDP

 

No hay comentarios:

Publicar un comentario