Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

4.2 Acceso A Discos En Lenguaje Ensamblador

No description
by

Erika zuñiga

on 19 May 2014

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of 4.2 Acceso A Discos En Lenguaje Ensamblador

Para leer o escribir en un disco, no se realiza byte a byte, sino más bien en bloques de bytes, debido a que el acceso a disco implica movimientos mecánicos además de que el acceso se da por sectores; en este proceso no intervienen el CPU, puesto que solo envía los comandos a la interfase que maneja la unidad de disco y ésta es la que se encarga de leer o escribir información de un área especial de memoria, llamada DMA; este proceso es conocido como acceso directo a memoria.



4.2 Acceso A Discos En Lenguaje Ensamblador
Para acceder a los parámetros del disco duro, independientemente del número de las particiones, hay que obtener el contenido de la palabra doble de memoria situada en la dirección 0000:0104 que contiene la dirección donde se guarda una tabla de 16 bytes con los parámetros absolutos de la primera unidad de disco duro.
Parámetros absolutos de un Disco Duro.
tabla Estructura de la tabla de parámetros absolutos de un disco duro
Si se trata de una partición extendida, los datos de la entrada corresponden al total de las unidades lógicas que almacena. La partición extendida posee su propia tabla de particiones, pero sólo se usan las dos primeras entradas. La primera entrada corresponde a la primera unidad lógica de la partición extendida, y la segunda indica si hay otra unidad lógica. En caso afirmativo, ésta contiene de nuevo una tabla de particiones.
Con ello se crea una especie de lista enlazada que permite acceder a la información de las diferentes particiones.
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
Clúster. Cada pista está dividida en porciones iguales llamadas sectores (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.
ejemplo
Rutina _AbsoluteRead:Transfiere el contenido de uno ó 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 <prime
r 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

Rutinas que permiten lectura y escritura absoluta de sectores, así como la determinación del espacio libre disponible en un disco.
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 _Absolut
eWrite
_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
Acceso a disco usando lenguaje ensamblador
Full transcript