检测点 17.1
在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 , 2400h
jnz 07d5
cli
jmp 07d0h
sahf
pop ax
pop ds
jmp 07d8
ret
jb 09d6
or ah, ah
jz 0a18h
mov bx,
cmp bx,
jnz 0a35
call 0bc8
push bx
push cx
push ax
lahf
push ax
mov al,
and al, 70
mov cl, 04
shr al, cl
and al, 07
mov bl,
xor bl, al
and bl, 07
jz 0c08
pop ax
sahf
pop ax
pop cx
pop bx
ret
jnz 0a3f
mov ax,
call 0bbbh
inc bx
inc bx
cmp bx,
jnz 0bc7
ret
mov , 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:, 0000
mov word ptr cs:, 0000
ret
jmp 09ee
pop bx
pop ds
jmp 064c
push ds
push ax
mov ax, 0040
mov ds, ax
test word ptr , 2400
jnz 06aa
pop ax
pop ds
iret
页:
[1]