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 p>
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: ※ p>
ぶΞ
, 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> 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>
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