Programación en ensamblaje
El siguiente es el código de operación de mi archivo, puede usarlo después de modificarlo.
incluye kcsj.mac
.model pequeño
.386
.stack 200h
prog1 público
.data
menú db 30 dup(' '),'1.Mostrar archivo de texto',0ah,0dh
db 30 dup(' '), '2.Copiar archivo de texto',0ah,0dh
db 30 dup(' '),'3.Eliminar archivo de texto',0ah,0dh
db 30 dup(' ' ),'4.El fin',0ah,0dh
db 30 dup(' '),'Por favor seleccione uno(1~4):','$'
prompt1 db 0ah,0dh,'Nombre de archivo:$'
prompt2 db 0ah,0dh,'Líneas de página(1~25):$'
FNAME db 15,?,15 dup(' ') ;Buffer que almacena nombres de archivos
out1 db 0ah,0dh,'¡No se puede abrir el archivo!$'
out2 db 0ah,0dh,'No se puede leer el archivo !$'
out3 db 0ah,0dh,'¡No se puede crear el archivo!$'
out4 db 0ah,0dh,'¡No se puede escribir el archivo!$'
out5 db 0ah,0dh,'¡No se puede eliminar el archivo!$'
out6 db 0ah,0dh,'¡El archivo ha sido copiado!$'
out7 db 0ah, 0dh ,'¡El archivo ha sido eliminado!$'
buffer db
endcode db 0 ;error flag
end1 db 0 ;end flag
code1 dw ?;Nombre en clave del archivo original
code2 dw ;Nombre en clave del nuevo archivo
sign db 0
ask1 db 0ah,0dh , 'Ingrese el nombre del archivo de origen:$'
ask2 db 0ah,0dh,'Ingrese el nombre del archivo de destino:$'
fila db 23
info db ' Presione ESC para salir,p para cambiar de página,cualquier tecla para continuar.$'
.code
prog1 proc far
init
call mainshow
L1:mov ah,1
int 21h
cmp al,'1'
je display
cmp al,'2'
copiaré
cmp al,'3'
eliminaré
jmp rtn1 < / p>
display:llamar a fdisp
llamar
mainshow
mov end1,0
mov [fila],23
mov endcode,0
jmp L1
copiar: llamar a fcopy
llamar a mainshow
mov endcode,0
mov sign,0
jmp L1
eliminar: llamar a fdel
llamar a mainshow
jmp L1
rtn1:ret
prog1 endp
mainshow proc cerca de
desplazamiento 0
cursor 10,0
menú strdisp
ret
mainshow endp
fdisp proc cerca de ;pantalla de paginación
strdisp Prompt1
llamar a fopen
desplazarse 0 ;borrar pantalla
cursor 0,0 ;establecer cursor
cmp endcode,1
jne cont
mov ah,7
int 21h
jmp text0
cont:mov bx,code1
call fread
cmp endcode,1
je text1 p>
p>
call fshow ;show
cmp end1,1
je text1
jmp cont
ext1:mov ah, 3eh ;Cerrar archivo
mov bx,code1
int 21h
text0:mov endcode,0
ret
fdisp endp
fopen proc cerca de ;abrir archivo
llamar in_name
mov ah,3dh
mov al,0
p>int 21h
jnc siguiente
mov endcode,1
strdisp out1
ret
siguiente:mov bx,ax
mov code1,ax
ret
fopen endp
in_name proc cerca de ;nombre del archivo de entrada
lea dx,FNAME
mov ah,0ah
int 21h
lea bx,FNAME+2
mov ah,0
mov al,FNAME+1
añadir bx,ax
mov byte ptr [b
x],0
añadir dx,2
ret
in_name endp
fread proc cerca de ;leer archivo
mov ah,3fh
mov cx,1
lea dx,buffer
int 21h
jnc pasado
strdisp out2
salir jmp
pasado:cmp ax,0
je exit
ret
salir:mov ah,3eh
int 21h
mov endcode,1
ret
fread endp
fshow proc cerca de ;Mostrar archivo
mov dl,[buffer]
mov ah,2
int 21h
mov ah, 3
mov bh,0
int 10h
cmp dh,[fila]
jae d1
ret
d1:strdisp info
d2:mov ah,7
int 21h
cmp al,0
jz d2
cmp al,1bh ; Presione ESC para salir
jz d4 ; Salga y cierre el archivo endcode=1
cmp al,70h ; Presione P Solicitar el número de líneas por página
jnz d3
strdisp Prompt2
call chtonum
mov [fila],al
d3:scroll 0
cursor 0,0
ret
d4:mov end1,1
ret
fshow endp
chtonum proc near
mov bx,0
newchar:mov ah,1 ;Ingrese el número y convierta a decimal
int 21h
sub al,30h
jl goon
cmp al,9
jg goon
cbw
xchg ax,bx
mov cx,10d
mul cx
xchg ax,bx
add bx,ax
jmp newchar
goon:mov al,bl ;pasa el número de línea a AL
ret p>
chtonum endp
fcopy proc cerca de ;copia de archivo
desplazamiento 0
cursor 0,0
strdisp ask2
llamar a fcreat
cmp endcode,1
je over
mov code2,ax
strdis
p Ask1
llamar a fopen
cmp endcode,1
je etn0
otra vez: llamar a fread
cmp código final,1
je etn0
mov sign,1
push bx
cmp ax,0
soy next2
mov cx,ax
mov bx,code2
mov ah,40h
int 21h
pop bx
jnc otra vez
strdisp out4
ret
next2:mov ah,3eh
mov bx,código1
int 21h
etn0:mov ah,3eh
mov bx,código2
int 21h
signo cmp,1
jne over
strdisp out6
over:mov ah,7
int 21h
ret
fcopy endp
fcreat proc near ;Crear archivo
call in_name
mov ah,3ch
mov cx,00
int 21h
jnc next1
mov endcode,1
strdisp out3
siguiente1:ret
fcreat endp
fdel proc cerca de ;eliminar archivo
desplazamiento 0
cursor 0,0
strdisp Prompt1
llamar in_name
mov ah,41h
int 21h
cmp ax,0
jnz salir
strdisp out5
mov ah,7
int 21h
ret
salir :strdisp out7
mov ah,7
int 21h
ret
fdel endp
end prog1
Consulte