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 p>
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: ※ 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 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>
p>
0B22: 0184 B104 MOV CL, 04
0B22: 0186 D3EA SHR DX, CL
0B22: 0188 B80031 MOV AX, 3100 p>
0B22: 018B CD21 INT 21
0B22: 018D 0000 AÑADIR [BX SI], AL
0B22: 018F 00496E AÑADIR [BX DI 6E], CL p>
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