Acerca de los problemas de interrupción de modificaciones

tran proc far; convierte el valor de DL en una salida numérica hexadecimal

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

jne next; llama 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 y salga

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; ejecuta 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 escrita 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

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 se cierra 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. !

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 ADD [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

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

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

0B22: 0118 FB STI

0B22: 0119 9C PUSHF

0B22: 011A 50 HACHA DE 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 FAR [0110]< / p>

0B22:0132 90 NOP

0B22:

0133 0000 AÑADIR [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 XOR AX, 21CD

0B22: 0147 83FB00 CMP BX, 00

0B22: 014A 740B JZ 0157

0B22: 014C BAB001 MOV 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 AGREGAR DX, 0F

p>

0B22: 0184 B104 MOV CL, 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

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: 01BC 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