La Red de Conocimientos Pedagógicos - Currículum vitae - Preguntas reales sobre la compilación XRD

Preguntas reales sobre la compilación XRD

;? Título: Función de comando de copia de línea de comando

;? 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