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等前缀指令配合使用。
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