Sectores de Disquette

pool
14 de Marzo del 2005
Soy nuevo programando en ass... y estaba tratando de hacer un programita que se ingrese el sector y la pista de un disquette para que lo lea en pantalla. Alguien tiene idea de como se convierten lo que ingresa para que se pueda usar

wilfredo
14 de Marzo del 2005
Pare leer del disco o disquete puedes ver un ejemplo en la lista de ensamblador e informática en www.arimao.com, también hay un módulo para vacear los datos en memoria, pues si lees un sector, su contenido se almacenará en memoria y de ahí lo mostrarás en pantalla, te envío el mostrador de datos...

CPU 8086

segment code

inicio

mov ax,0003h
int 10h


mov bx,final
add bx,32
mov [cs:Desplazamiento],bx

mov [cs:segmento],cs

mov ax,0201h
mov dx,0000h
mov cx,0001h
push cs
pop es
mov bx,[cs:Desplazamiento]
int 13h ; lee el primer sector del disquete de la pista cero cara cero


call muestra

mov ax,0003h
int 10h

mov ax,4c00h
int 21h


muestra:

mov si,00bah ;offset de la row donde begin a print b6h
mov cx,0010h

pos68: push cx
mov bx,0010h
xchg bx,cx
sub cx,bx
mov ax,cx

xchg ah,al

call hexaBYTE
pop cx
inc si
inc si
loop pos68


rastrear1:
cld

pos105:

posw2:
mov si,01e4h ;offset in pantalla de la first line q'
mov cx,0011h ;visualizare en esta y en CX la cant de lines
;a mostrar a partir de SI

mov ax,[cs:segmento]
mov es,ax
mov di,[cs:Desplazamiento]

CALL POS70

deNUEVO:

mov ax,deNUEVO
push ax


call getKEY


cmp al,00h
je cursorRASTREA

cmp al,1bh
jne jumpDEnuevo


pop ax
clc

jumpDEnuevo:
ret



cursorRASTREA:

cmp ah,48h
jz llamarmovUP
cmp ah,50h
jz llamarmovDOW
cmp ah,51h
jz PGDN
cmp ah,49h
jz PGUP

ret


llamarmovUP:

call movUP

mov cx,0001h
sub di,0120h ;(cant de filas q' caben in win +1)*10h
push di

mov si,01e4h ;offset del begin de la line a print

call POS70
pop di
add di,0110h ;cant de filas * 10h

ret



PGUP:
sub di,0220h ;cant de lineas imprimidas*10h*2


PGDN:
mov cx,0011h ;total de line a mostrar q' caben en pantalla
mov si,01e4h ;offset donde begin a print la first line
call POS70

ret



llamarmovDOW:

call movDOW

mov cx,0001h
mov si,0be4h ;0a0h * (cant de filas q' caben in win)

call POS70

ret


hexaBYTE:
mov cx,0002h
call hexa
RET

hexaWORD:

mov cx,0004h
call hexa
RET


hexa:
mov dx,0b800h
mov ds,dx

pos65: push cx

mov dx,ax
mov cl,4
and dx,0f000h
shr dh,cl
cmp dh,09h
jg suma

call print10

bucleHEXA:
shl ax,cl


pop cx

loop pos65

RET


suma:
add dh,37h
call print16

jmp bucleHEXA


print10:
add dh,30h
print16:
mov [si],dh
inc si
inc si

RET


; Verifica si se pulso una ,en caso + lee esa tecla(getKEY)

getKEY:
mov ah,00
int 16h

RET




llamar10:

int 10h

RET





;borra la primera linea de la pantalla al desplazar esta hacia
;arriba rellenando la ultima linea de espacios en blanco

movDOW:
mov ax,0601h
mov cx,0300h
mov dx,134fh
mov bh,17h

call llamar10

ret


;abajo y rellena la primera de espacios en blanco
movUP:
mov ax,0701h
mov cx,0300h
mov dx,134fh
mov bh,17h

call llamar10

ret


; Imprime CX veces lineas en la pantalla ,donde cada linea
; comienza con seg:offset , seguido del contenido de las primeras
; 16 posiciones a partir de ese offset ,seguido del contenido de
; cada posicion en decimal ,ademas en (SI) la posicion de la
; pantalla donde comenzara a imprimirse lo descrito anteriormente
; y en DI de donde leera a paritir de esa posicion indicando ES
;el segmento a rastrear y DS con B800h

POS70:
push cx

push si

mov ax,es
call hexaWORD

mov dh,3ah
call print16

mov ax,di
call hexaWORD

inc si
inc si

inc si
inc si

push di
mov cx,0010h
push cx

pos66:
push cx

mov ah,[es:di]

call hexaBYTE

pop cx
inc di

inc si
inc si

loop pos66

pop cx
pop di

inc si
inc si


pos67:
mov dh,[es:di]
call print16
inc di
loop pos67


pos67:
mov dh,[es:di]
call print16
inc di
loop pos67


pop si
add si,00a0h
pop cx
loop POS70

RET

segmento dw 0
Desplazamiento dw 0
final db 0