En este programa se muestra como leer u obtener el directorio en donde te encuentras actualmente, asi como poder cambiarte de directorio y de unidad.
;porgrama que cambia de direcctorio y de unidad como
;el ms-dos www.pro-gramas.com
.model tiny
.data
opc1 db '1.- Cambiar unidad$'
opc2 db '2.- Cambiar directorio$'
opc3 db 'Salir [enter] -> $'
ms1 db 'Url -> $'
ms2 db 'Unidad -> $'
ms3 db 'Directorio (\) -> $'
unidad db 'ABCDEFGH'
ruta db 30 dup(' ')
dir db 30 dup(' ')
.code
clear macro
mov ah,00h ;limpia la pantalla
mov al,03h
int 10h
endm
gotoxy macro fil,col
mov ah,02h ;posiciona el cursor
mov dh,fil ;fila
mov dl,col ;columna
mov bh,0 ;pagina de video
int 10h
endm
write macro ;escribe una cadena
mov ah,09h
int 21h
endm
writec macro ;escribe un caracter
mov ah,02h
int 21h
endm
cuadro macro fi,ff,ci,cf
local etiqueta
local etiqueta2
mov cl,ci
etiqueta: ;ciclo para mostrar la fila superior
gotoxy fi,cl ;fila superior
mov ah,02h ;inter. imprimir
mov dl,205 ;movemos a dl
int 21h
gotoxy ff,cl ;fila inferior
mov ah,02h
mov dl,205
int 21h
inc cl
cmp cl,cf
jne etiqueta ;ciclo aumenta + 1
mov cl,fi
etiqueta2:
gotoxy cl,ci ;columna izquierda
mov ah,02h
mov dl,186
int 21h
gotoxy cl,cf ;columna derecha
mov ah,02h
mov dl,186
int 21h
inc cl
cmp cl,ff
jne etiqueta2 ;ciclo aumenta + 1
gotoxy fi,ci ;mostrar el codo superior izq
mov ah,02h
mov dl,201
int 21h
gotoxy fi,cf ;mostrar el codo superior der
mov ah,02h
mov dl,187
int 21h
gotoxy ff,ci ;mostrar el codo inferior izq
mov ah,02h
mov dl,200
int 21h
gotoxy ff,cf ;mostrar el codo inferior der
mov ah,02h
mov dl,188
int 21h
endm
pactual macro
local repite
local repite1
mov cx,29
mov di,0
repite:
mov ruta[di],' '
inc di
loop repite
gotoxy 2,10
lea dx,ms1 ;Posiciono la direccion de la cadena
write ;escribe una cadena
mov ah,19h ;Me fijo en que Unidad estas
int 21h
push ax
mov bl,al
mov dl,unidad[BX] ;posiciono la direccion en la cadena, en la letra donde estoy
mov dir[0],dl
mov dir[1],':'
mov dir[2],'\'
pop ax
inc al
mov ah,47h ;Optener la carpta en que estoy
mov dl,al ;Unidad donde quiero conocer el directorio
lea si,ruta ;En ruta guarde el nombre de directorio en el que estoy
int 21h
mov cx,0
lea di,dir
add di,3
lea si,ruta
repite1:
mov al,[si]
mov [di],al
inc si
inc di
inc cx
cmp cx,29
jne repite1
mov dir[30],'$'
lea dx,dir
write
endm
;cuenta cuantos caracteres tiene una cadena
countc macro car,count
mov al,car
mov cx,count ;cuantas repeticiones
repne scasb ;compara la cadena con al
add cx,2
mov dh,0
mov dl,count
sub dx,cx
endm
.startup
repite:
clear ;limpia pantalla
;fi,ff,ci,cf
cuadro 1,24,0,79 ;dibuja cuadro
pactual ;posicion actual de url
gotoxy 10,10
lea dx,opc1
write
gotoxy 11,10
lea dx,opc2
write
gotoxy 12,10
lea dx,opc3
write
mov ah,08h
int 21h
cmp al,31h
je unida
cmp al,32h
je directorio
cmp al,13
jne repite
jmp salir
unida:
gotoxy 10,45
lea dx,ms2
write
mov ah,01h ;leo unidad
int 21h
sub al,30h
mov ah,0eh ;selecciona la unidad
mov dl,al
int 21h
jmp repite
directorio:
gotoxy 10,45
lea dx,ms3
write
lea di,dir
countc ' ',30
mov si,dx ;muevo a si el contador
repite3: ;concateno en dir la carpeta
mov ah,08h
int 21h
cmp al,13
je conti
mov ah,02h
mov dl,al
int 21h
mov dir[si],al
inc si
conti:
cmp al,13
jne repite3
inc si
mov dir[si],00h
mov ah,3bh ;cambia de directorio
lea dx,dir
int 21h
jmp repite
salir:
.exit
end
Descargar