Red de conocimiento informático - Conocimiento sistemático - Programación en ensamblaje

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>

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

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