當前位置:編程學習大全網 - 源碼破解 - 關於修改中斷問題

關於修改中斷問題

tran proc far ;將DL的值轉化為十六進制數輸出

cmp ah,02h ;當AH不為02時,仍執行原來的21H功能,

jne next ;通過遠跳轉跳來調用原來的中斷處理程序

錯壹:字符07H,08H,0AH,0DH不可顯示,需要特別處理。

sti

push bx /push cx /push ax

xor ax,ax /mov al,dl

錯二:XOR是異或運算,將影響標誌位,所以中斷入、出口

要保存標誌,添上PUSHF/POPF。

mov bl,16

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

錯三:除、加影響標誌位,錯誤類型同上。

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

錯四:!致命錯誤*1!應用程序調用時是顯示1個字節字符,妳顯示的

卻是壹串不定長的字串,這將打亂原來屏幕的字符排列。

push dx

lea dx,result

錯五:result db 2 dup(?),32,13,10 後面沒有'$'(36D=24H),字串

輸出結果不可預期。

mov ah,09h /int 21h

錯六:中斷遞歸調用,後果不可預期。

pop dx /pop ax /pop cx /pop bx

cli

iret

next:

lea si,off ;通過跳轉執行原來的中斷處理程序

jmp dword ptr [si]

錯七:中斷未重定向數據段段址,這壹跳,必定死機。

tran endp

main proc far

mov ax,data /mov ds,ax

push es ;保存中斷21H的入口地址在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 ;設置21H為自己編寫的中斷程序tran

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 ;恢復原來的21H功能

錯七:※

ぶΞ

,上壹句,我不知所雲,無話可說。

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

錯八:!致命錯誤*2!4C是程序正常退出,DOS將收回妳運行時的內存,

妳改了中斷向量表,壹走了之;電腦也只好死了死了,壹死百了!

main endp

下面是完整替換Int21H 2號功能的程序,可資參考。

妳可用DEBUG再匯編成壹COM文件,保存後運行壹下。

CS: IP: 匯編代碼:

0B22:0100 EB3E JMP 0140

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

0B22:0104 0000 ADD [BX+SI],AL

0B22:0106 0000 ADD [BX+SI],AL

0B22:0108 0000 ADD [BX+SI],AL

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

0B22:010C 0000 ADD [BX+SI],AL

0B22:010E 0000 ADD [BX+SI],AL

0B22:0110 0000 ADD [BX+SI],AL

0B22:0112 0000 ADD [BX+SI],AL

0B22:0114 0000 ADD [BX+SI],AL

0B22:0116 0000 ADD [BX+SI],AL

0B22:0118 FB STI

0B22:0119 9C PUSHF

0B22:011A 50 PUSH AX

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]

0B22:0132 90 NOP

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

0B22:0135 0000 ADD [BX+SI],AL

0B22:0137 0000 ADD [BX+SI],AL

0B22:0139 0000 ADD [BX+SI],AL

0B22:013B 0000 ADD [BX+SI],AL

0B22:013D 0000 ADD [BX+SI],AL

0B22:013F 000E1FB8 ADD [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 ADD DX,+0F

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 ADD [BX+SI],AL

0B22:018F 00496E ADD [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 AND [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 AND [DI],CX

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

0B22:01A8 0000 ADD [BX+SI],AL

0B22:01AA 0000 ADD [BX+SI],AL

0B22:01AC 0000 ADD [BX+SI],AL

0B22:01AE 0000 ADD [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 AND [DI],CX

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

0B22:01C5 0000 ADD [BX+SI],AL

0B22:01C7 0000 ADD [BX+SI],AL

  • 上一篇:編程語言有哪些種類
  • 下一篇:七宗罪遊戲攻略(揭秘遊戲中的隱藏玩法和技巧)
  • copyright 2024編程學習大全網