外中断

来源:互联网 发布:mac terminal字体大小 编辑:程序博客网 时间:2024/04/28 00:41

1、在PC系统的接口卡和主板上,装有各种借口芯片。这些外设接口芯片的内部有若干寄存器,CPU将这些寄存器当做端口来访问。外设的输入不直接送入内存和CPU,而是送入相关的接口芯片的端口中;CPU向外设的输出也不是直接送入外设,而是先送入段口中,再由相关的芯片送到外设。也就是说CPU通过端口和外部设备进行联系。

2、可屏蔽中断的引发的中断信息来自于CPU外部,中断类型码是通过数据总线送入CPU的。IF设置为1,才能执行可屏蔽中断。IF设置指令:sti,设置IF=1,cli设置IF=0。

3、PC机键盘的处理过程(开机的时候是不能没有键盘,键盘比操作系统还要早加载):扫描码:断码=通码+80h。BIOS提供了int 9中断例程,用来进行基本的键盘输入处理,主要工作:

4、两个shift键扫描码是不一样的,但是alt键扫描码是一样的。

5、编写int 9中断例程:

6、黑客防线:在攻与防的动态平衡中,寻求不断突破。

7、指令系统总结:8086CPU提供以下几大指令:1.数据传输指令,比如:mov、push、pop、pushf、popf、xchg等;2.算数运算指令,比如:add、sub、adc、sbb、inc、dec、cmp、imul、idiv、aaa等,它们的执行结果影响标志寄存器的sf、zf、of、cf、pf、af位;3.逻辑指令,比如:and、or、not、xor、test、shl、shr、sal、sar、rol、ror、rcl、rcr等;4.转移指令,可以修改IP,或者同时修改CS和IP,分类①无条件转移指令,比如:jmp;②条件转移指令,比如:jcxz,je、jb、ja、jnb、jna等;③循环指令,比如:loop;④过程,比如:call、ret、retf;⑤中断,比如:int、iret。5.处理机制指令,对标志寄存器或其他处理机制状态进行设置,比如:cld、std、cli、sti、nop、clc、cmc、stc、hlt、wait、esc、lock等;6.串处理指令,对内存中的批量数据进行处理,比如:movsb、movsw、cmps、scas、lods、stos等,需要和rep、repe、repne等前缀指令配合使用。

 

View Code
复制代码
  1 ;编程:在屏幕中间一次显示“a”~“z”,并可以让人看清。  2 ;在显示地过程中,按下“Esc”键后,改变显示的颜色  3   4 assume cs:code  5   6 stack segment  7      db 128 dup (0)  8 stack ends  9  10 data segment 11      dw 0,0 12 data ends 13  14 code segment 15   start: mov ax,stack 16        mov ss,ax 17        mov sp,128 18        mov ax,data 19        mov ds,ax 20        mov ax,0 21        mov es,ax 22         23        push es:[9*4] 24        pop ds:[0] 25        push es:[9*4+2] 26        pop ds:[2]         ;将原来的int 9中断例程的入口地址保存在ds:0、ds:2单元中 27         28        mov word ptr es:[9*4],offset int9 29        mov es:[9*4+2],cs  ;在中断向量表中设置新的int9中断例程 30         31        mov ax,0b800h 32        mov es,ax 33        mov ah,'a' 34         35     s: mov es:[160*12+40*2],ah 36        call delay 37        inc ah 38        cmp ah,'z' 39        jna s 40        mov ax,0 41        mov es,ax 42         43        push ds:[0] 44        pop es:[9*4] 45        push ds    ; 46        pop es     ;将中断向量表中int9中断例程的入口恢复为原来的地址 47         48        mov ax,4c00h 49        int 21h 50         51   delay: push ax 52        push dx 53        mov dx,2000h 54        mov ax,0 55         56     s1:sub ax,1 57        sbb dx,0 58        cmp ax,0 59        jne s1 60        cmp dx,0 61        jne s1 62        pop dx 63        pop ax 64        ret 65         66 ;--------------以下为新的int9中断例程------------------ 67  68 int9:    push ax 69        push bx 70        push es 71         72        in al,60h 73         74        pushf 75        pushf 76        pop bx 77        and bh,11111100b 78        push bx 79        popf 80        call dword ptr ds:[0]   ;对int指令进行模拟,调用原来的int 9中断例程 81         82        cmp al,1 83        jne int9ret 84         85        mov ax,0b800h 86        mov es,ax 87        inc byte ptr es:[160*12+40*2+1]   ;属性增加1,改变颜色 88         89 int9ret: pop es 90        pop bx 91        pop ax 92        iret 93         94 code ends 95  96 end start 97         98         99        100