La Red de Conocimientos Pedagógicos - Aprendizaje de redacción de artículos/tesis - Acerca de los problemas de interrupción de modificaciones

Acerca de los problemas de interrupción de modificaciones

tran proc far ;Convierte el valor de DL en un número hexadecimal y genera

cmp ah,02h ;Cuando AH no es 02, la función 21H original aún se ejecuta,

jne next ;Llame al controlador de interrupciones original mediante un salto lejano

Error 1: los caracteres 07H, 08H, 0AH, 0DH no se pueden mostrar y requieren un procesamiento especial.

sti

push bx /push cx /push ax

xor ax,ax /mov al,dl

Error 2: XOR Es una operación XOR, que afectará el bit de bandera, así que interrumpa la entrada y la salida

Para guardar la bandera, agregue PUSHF/POPF.

mov bl,16

div bl /add al,'0' /add ah,'0'

Error tres: la división y la suma afectan la bandera bit, el tipo de error es el mismo que el anterior.

resultado mov[0],al /mov resultado[1],ah

Error cuatro:! ¡Error fatal*1! Cuando se llama a la aplicación, muestra un carácter de 1 byte, pero lo que muestra

es una cadena de longitud variable, lo que alterará la disposición de los caracteres en la pantalla original.

push dx

lea dx,resultado

Error cinco: el resultado db 2 dup(?),32,13,10 no va seguido de '$' (36D = 24H), cadena

El resultado de salida es impredecible.

mov ah,09h /int 21h

Error 6: Interrupción de la llamada recursiva, las consecuencias son impredecibles.

pop dx /pop ax /pop cx /pop bx

cli

iret

siguiente:

lea si,off ;Ejecute el controlador de interrupciones original saltando

jmp dword ptr [si]

Error 7: la interrupción no redirige la dirección del segmento de datos. Este salto debe fallar.

tran endp

main proc far

mov ax,data /mov ds,ax

push es ; 21H La dirección está en segm:off

mov ah,35h /mov al,21h /int 21h

mov ax,es /mov segm,ax /mov off,bx

pop es

cli

mov ah,25h ;Establezca 21H como la transcripción del programa de interrupción escrito por usted mismo

mov al,21h /lea dx,tran /mov bx,seg tran

push ds /mov ds,bx /int 21h

pop ds

sti

lea dx, info /mov ah,09h /int 21h

mov dl,61h /mov ah,02h /int 21h ;Restaurar la función 21H original

Error 7: ※

ぶΞ

, en la oración anterior, no sé qué decir y no tengo nada que decir.

cli

mov bx,segm /mov dx,off

push ds /mov ds,bx

mov ah,25h / mov al,21h /int 21h

pop ds

sti

mov ax,4c00h /int 21h

Ocho equivocado:! ¡Error fatal *2! 4C significa que el programa sale normalmente y DOS recuperará la memoria que usó cuando lo ejecutó.

Cambió la tabla de vectores de interrupción y la computadora no tuvo más remedio que morir; ¡Y era un callejón sin salida!

main endp

El siguiente es el programa para reemplazar completamente la función No. 2 de Int21H como referencia.

Puedes usar DEBUG para ensamblarlo en un archivo COM, guardarlo y ejecutarlo.

CS: IP: Código ensamblador:

0B22:0100 EB3E JMP 0140

0B22:0102 0100 AGREGAR [BX+SI],AX

0B22:0104 0000 AÑADIR [BX+SI],AL

0B22:0106 0000 AÑADIR [BX+SI],AL

0B22:0108 0000 AÑADIR [BX+SI] ],AL

0B22:010A 0000 AÑADIR [BX+SI],AL

0B22:010C 0000 AÑADIR [BX+SI],AL

0B22: 010E 0000 AÑADIR [BX+SI],AL

0B22:0110 0000 AÑADIR [BX+SI],AL

0B22:0112 0000 AÑADIR [BX+SI],AL p>

0B22:0114 0000 AÑADIR [BX+SI],AL

0B22:0116 0000 AÑADIR [BX+SI],AL

0B22:0118 FB STI

p>

0B22:0119 9C PUSHF

0B22:011A HACHA 50 EMPUJE

0B22:011B 80FC02 CMP AH,02

0B22:011E 750B JNZ 012B

0B22:0120 88D0 MOV AL,DL

0B22:0122 B40E MOV AH,0E

0B22:0124 CD10 INT 10

0B22:0126 58 POP AX

0B22:0127 9D POPF

0B22:0128 FA CLI

0B22:0129 CF IRET

0B22:012A 90 NOP

0B22:012B 58 POP AX

0B22:012C 9D POPF

0B22:012D 2E CS:

0B22:012E FF2E1001 JMP LEJOS [0110]

0B22:0132 90 NOP

0B22:0133 0000 AGREGAR [BX+SI],AL

0B22:0135 0000 AÑADIR [BX+SI],AL

0B22:0137 0000

AÑADIR [BX+SI],AL

0B22:0139 0000 AÑADIR [BX+SI],AL

0B22:013B 0000 AÑADIR [BX+SI],AL

0B22:013D 0000 AÑADIR [BX+SI],AL

0B22:013F 000E1FB8 AÑADIR [B81F],CL

0B22:0143 90 NOP

0B22:0144 35CD21 DX,01B0

0B22:014F B409 MOV AH,09

0B22:0151 CD21 INT 21

0B22:0153 B44C MOV AH, 4C

0B22:0155 CD21 INT 21

0B22:0157 B82135 MOV AX,3521

0B22:015A CD21 INT 21

0B22 :015C 891E1001 MOV [ 0110],BX

0B22:0160 8C061201 MOV [0112],ES

0B22:0164 06 PUSH ES

0B22:0165 1F POP DS

0B22:0166 89DA MOV DX,BX

0B22:0168 B89025 MOV AX,2590

0B22:016B CD21 INT 21

0B22:016D 0E PUSH CS

0B22:016E 1F POP DS

0B22:016F BA1801 MOV DX,0118

0B22:0172 B82125 MOV AX, 2521

0B22:0175 CD21 INT 21

0B22:0177 BA9001 MOV DX,0190

0B22:017A B409 MOV AH,09

0B22:017C CD21 INT 21

0B22:017E BA3801 MOV DX,0138

0B22:0181 83C20F AÑADIR DX,+0F

0B22:0184 B104 MOV do

L,04

0B22:0186 D3EA SHR DX,CL

0B22:0188 B80031 MOV AX,3100

0B22:018B CD21 INT 21

0B22:018D 0000 AÑADIR [BX+SI],AL

0B22:018F 00496E AÑADIR [BX+DI+6E],CL

0B22:0192 7374 JNB 0208

0B22:0194 61 DB 61

0B22:0195 6C DB 6C

0B22:0196 6C DB 6C

0B22:0197 65 DB 65

0B22:0198 64 DB 64

0B22:0199 205365 Y [BP+DI+65],DL

0B22:019C 63 DB 63

p>

0B22:019D 63 DB 63

0B22:019E 65 DB 65

0B22:019F 7373 JNB 0214

0B22 :01A1 66 DB 66

0B22:01A2 756C JNZ 0210

0B22:01A4 210D Y [DI],CX

0B22:01A6 0A24 O AH,[ SI]

0B22:01A8 0000 AÑADIR [BX+SI],AL

0B22:01AA 0000 AÑADIR [BX+SI],AL

0B22:01AC 0000 AÑADIR [BX+ SI],AL

0B22:01AE 0000 AÑADIR [BX+SI],AL

0B22:01B0 41 INC CX

0B22:01B1 6C DB 6C

0B22:01B2 7265 JB 0219

0B22:01B4 61 DB 61

0B22:01B5 64 DB 64

0B22 :01B6 7920 JNS 01D8

0B22:01B8 49 DEC CX

0B22:01B9 6E DB 6E

0B22:01BA 7374 JNB 0230

0B22:0

1BC 61 DB 61

0B22:01BD 6C DB 6C

0B22:01BE 6C DB 6C

0B22:01BF 65 DB 65

0B22:01C0 64 DB 64

0B22:01C1 210D Y [DI],CX

0B22:01C3 0A24 O AH,[SI]

0B22:01C5 0000 AÑADIR [BX+SI],AL

0B22:01C7 0000 AÑADIR [BX+SI],AL