|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在int 16h中断例程中,一定有设置 IF = 1 的命令。这种说法对吗?
答:这种说法是错误的,应该不需要因为int 16会把标志寄存器、段地址、偏移地址入栈,当他们出站时标志寄存器会被从新还原所以这里面应该不需要将IF = 1
他的执行顺序是:
int 16h
- push ds
- push bx
- mov bx, 0040h
- mov ds, bx
- cmp ah, 10h
- call 07b9h
- push ds
- push ax
- mov ax, 0040h
- mov ds, ax
- lahf
- test word ptr [0314h], 2400h
- jnz 07d5
- cli
- jmp 07d0h
- sahf
- pop ax
- pop ds
- jmp 07d8
- ret
- jb 09d6
- or ah, ah
- jz 0a18h
- mov bx, [001a]
- cmp bx, [001c]
- jnz 0a35
- call 0bc8
- push bx
- push cx
- push ax
- lahf
- push ax
- mov al, [0017]
- and al, 70
- mov cl, 04
- shr al, cl
- and al, 07
- mov bl, [0097]
- xor bl, al
- and bl, 07
- jz 0c08
- pop ax
- sahf
- pop ax
- pop cx
- pop bx
- ret
- jnz 0a3f
- mov ax, [bx]
- call 0bbbh
- inc bx
- inc bx
- cmp bx, [0082]
- jnz 0bc7
- ret
- mov [001a], bx
- call 0b74
- push bx
- push ax
- lahf
- mov bx, ax
- pop ax
- push bx
- cmp ah, 0e0h
- jnz 0b8f
- cmp ah, 84
- ja 0bb2h
- cmp al, 0f0h
- jnz 0b9f
- cmp al, 0e0h
- jnz 0ba9
- mov bx, ax
- pop ax
- sahf
- mov ax, bx
- pop bx
- clc
- ret
- jb 0a2a
- call 0b4c
- mov word ptr cs:[09b8], 0000
- mov word ptr cs:[09bc], 0000
- ret
- jmp 09ee
- pop bx
- pop ds
- jmp 064c
- push ds
- push ax
- mov ax, 0040
- mov ds, ax
- test word ptr [0314], 2400
- jnz 06aa
- pop ax
- pop ds
- iret
-
复制代码 |
|