Preguntas reales sobre la compilación XRD
;? Fuente del título:/question/132613879.html.
;? Instrucciones de funcionamiento:
;? 1. El nombre del archivo de origen o el nombre del archivo de destino deben cumplir con las reglas de nomenclatura de nombres de archivos en DOS;
;? 2. Este programa debe ejecutarse en modo protegido.
;? 3. Formato de comando: copyxx? ruta de archivo1? ¿Ruta del archivo 2
? ¿Este programa está en MASMPlus? Compile y depure en el entorno integrado 1.2 y ejecútelo correctamente.
¿Código? Sección
AssumeCS:Code, DS:Code
;? -
;? Función: Mostrar la cadena de la dirección especificada (Str_Addr)
;? Entrada:
;? Str_Addr= =Dirección de cadena (obligatoria en el segmento de datos)
;? uso:? ¿Producción? str_address
? Ejemplo de uso: ¿Salida? PromptStr
¿Macro de salida MACRO? Str_address
leadx, dirección de cadena
movah, 9 años
int21h
EndM
; -
¿Addr_Filedw? ,;Dirección de cadena de nombre de archivo
Handle_Filedw? ,;Código de archivo
Prompt_Str1? 'db13,10,10,'¿Esto? ¿fuente? ¿documento? ¿Sí? ¿No es así? existir. $'
¿Prompt_Str2? db13,10,10,'¿No válido? camino. $'
¿Prompt_Str3? db13,10,10,'char? ¿abierto? ¿dominio? ¿Cable? ¿Sí? ¿No? ¿aún? ¿También? extraño. $'
¿Prompt_Str4? db13,10,10,'¿No válido? parámetro. $'
¿Prompt_Str5? 'db13,10,10,10,'¿El? ¿documento? ¿Hay alguno? ¿Has estado allí? Copiar. $'
Presione_Keydb7, 13, 10, 10, '¿Presionar? ¿Hay alguno? ¿llave? ¿A dónde ir? Salir...$'?
Inicio: pushcs
popds
movah, 2fh? ;Obtener la dirección DTA actual (dirección del parámetro de línea de comando)
int21h
movcl, byte? ¿ptr? es:[bx]
cmpcl, 4
jaeNext0? ;El argumento de la línea de comando es redundante o tiene 4 caracteres. Vaya a Parámetros de descomposición y procesamiento.
¿Salida? Prompt_Str3? ; Consejo: Hay muy pocos caracteres en los parámetros de la línea de comando.
jmpExit_Proc? ;Finalizar programa
Siguiente 0: push
popds
pushcs
Pope
xorch, ch< / p>
pushcx
leasi,[bx][2]
leadi, nombre de archivo
cld
repmovsb
cld
repmovsb
p>popcx
pushcs
popds
leadi, nombre del archivo
moval, 20h
repzscasb? ;Encuentre la dirección de cadena del nombre del archivo fuente
jnznex 1
Invalid_Para:? ¿Producción? Prompt_Str4? ; Consejo: parámetro de línea de comando no válido.
jmpExit_Proc? ;Finalizar programa
Siguiente1:leabx, [di-1]
movAddr_File, bx? ;Guardar la dirección de cadena del nombre del archivo fuente
repnz? ¿scasb? ;Encontrar la dirección final de la cadena del nombre del archivo fuente
jnzInvalid_Para
movBYTE? ¿ptr? [di-1],0? ;Terminador de cadena del nombre del archivo fuente
repzscasb? ;Encontrar la dirección de cadena del nombre del archivo de destino
jzInvalid_Para
cmpBYTE? ¿ptr? [di-1], 0dh
jzInvalid_Para
leabx, [di-1]
movAddr_File[2], bx? ;Guardar dirección de cadena de nombre de archivo de destino
repnz? ¿scasb? ;Encontrar la dirección final de la cadena del nombre del archivo de destino
movBYTE? ¿ptr? [di-1],0? ;Terminador de cadena de nombre de archivo de destino
movdx, Addr_File? ;Dirección de cadena del nombre del archivo fuente
Open_File:? movax, 3d40h? ;Archivo de código abierto
int21h
jc$+8
movHandle_File, ¿ax? ;Guardar código del archivo fuente
jmpTarget_File
cmpax, 5
jzOpen_File? ;Si se deniega el acceso, intente abrir el archivo nuevamente.
cmpax,2
jnzNext2
¿Salida? Prompt_Str1? ; Consejo: El archivo no existe.
jmpExit_Proc
Siguientes 2:cmpax, 3
jnzTarget_File
¿Salida? Prompt_Str2? ; Consejo: La ruta no es válida.
jmpExit_Proc
Archivo_destino:? movdx,Addr_File[2]? ;Dirección de cadena del nombre del archivo de destino
xorcx,cx
Create_file:? mová, 3 canales? ;Crear archivo de destino
int21h
jncNext3
cmpax, 3
jnzCreate_File
¿Salida? Prompt_Str2? ; Consejo: La ruta no es válida.
jmpExit_Proc
Siguiente3:movHandle_File[2], ¿hacha? ;Guardar código de archivo de destino
leadx, ¿nombre de archivo? ;Búfer de contenido del archivo
movcx, 0ffc0h? ; Reserve 32 palabras de espacio en la pila.
subcx, dx? ; Establece el número de bytes para leer y escribir el contenido del archivo al mismo tiempo.
movbp,cx? ;Almacenar algo temporalmente
Read_file:? movcx, bp
movbx, Handle_File? ;Leer el código del archivo fuente
movah, 3fh? ;Leer el contenido del archivo
int21h
jcRead_File? ;No se puede leer el archivo. Intenta leerlo de nuevo.
Prueba hacha, hacha
jzClose_File? ; Si el número real de bytes leídos es 0, la operación de lectura y escritura finaliza y los archivos de origen y de destino se cierran.
movbx, Handle_File[2]? ;Leer el código del archivo de destino
movcx, ax
Escribir_archivo:? mova, 40h? ;Escribir archivo
int21h
jcWrite_File? ; No se puede escribir en el archivo, intente escribir nuevamente.
jmpRead_File
Cerrar_archivo:? movbx, Handle_File? ;Leer el código del archivo fuente
movah, 3eh? ;Cerrar documento
int21h
movbx, Handle_File[2]? ;Leer el código del archivo de destino
movah, 3eh? ;Cerrar documento
int21h
¿Salida? Prompt_Str5? ; Consejo: El archivo ha sido copiado.
;? -
Salir_Proceso:? ¿Producción? ¿botón? ; Indica que la operación se completó, presione cualquier tecla para finalizar el programa.
movah, 1
int21h
movah, 4ch? ;Finalizar programa
int21h
Archivo _ Namedb Sterling buffer.
¿Código? Fin
¿Fin? ¿comenzar? ;Este es el final de la compilación