PAGE 50,132
TITLE lee un archivo, lo ordena y lo muestra por pantalla
STACK SEGMENT PARA STACK 'STACK'
STACK ENDS
DATA SEGMENT PARA PUBLIC 'DATA'
handle DW 0 ; handle de control del fichero
input_txt DB 13,10,"Nombre del fichero: $"
fallo_txt DB 13,10,"*** Error en la carga del archivo ***",13,10,10,"$"
fichnom DB 80 DUP (0) ; buffer para leer desde el
buffer DB 2048 DUP (0); " " " " el disco
tabla DB 0
numv DW 08
DATA ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
mira PROC FAR
ASSUME CS:CSEG, DS:DATA, SS:STACK
PUSH DS
SUB AX,AX
PUSH AX
MOV CL, 3
inicio:
MOV AX, SEG DATA
MOV DS, AX
LEA DX,input_txt
MOV AH,9
INT 21h
LEA DX,fichnom
MOV BYTE PTR [fichnom],60
MOV AH,10
INT 21h
MOV BL,[fichnom+1]
MOV BH,0
ADD BX,OFFSET fichnom
MOV BYTE PTR [BX+2],0
LEA DX,fichnom+2
MOV AL,0
MOV AH,3Dh
INT 21h
JC error1
MOV handle,AX
trocito: MOV BX,handle
MOV CX,2048
LEA DX,buffer
MOV AH,3Fh
INT 21h
JC error1
MOV CX,AX
JCXZ cerrar
PUSH AX
LEA BX,buffer
MOV SI,BX
MOV DI,BX
buc: MOV AH, buffer [SI]
ordena: ADD DI,1
MOV BH, buffer [DI]
CMP AH,BH
JBE FIN
MOV buffer [SI],BH
MOV buffer [DI],AH
MOV AH,BH
fin: CMP DI,numv
JB ordena
ADD SI,1
MOV DI,SI
CMP SI,numv
JB buc
imprime: LEA BX,buffer
MOV SI,BX
MOV DL,buffer[si]
MOV AH,2
INT 21h
ADD SI,1
LOOP imprime
POP AX
CMP AX,2048
JE trocito
cerrar: MOV BX,handle
MOV AH,3Eh
INT 21h
JC error1
jmp sale
error1: LEA DX,fallo_txt
MOV AH,9
INT 21h
CMP handle,0
JNE cerrar
jmp sale
sale: ret
mira ENDP
CSEG ENDS
END mira