学习进度
由于最近需要进行毕业论文的撰写,花了很多时间在毕业论文上,预计最近一段时间解第三阶段的进度会放缓很多。
外中断
-
外设的输入不直接送入内存和CPU,而是送入相关的借口芯片的端口中;CPU向外设的输出也不是直接送入外设,而是先送入端口中,再由相应的芯片送到外设。可见,CPU通过端口和外部设备进行联系。
-
可屏蔽中断:可由标志寄存器IF位设置,如果IF=1,CPU在执行完当前指令后响应中断,引发中断过程;如果IF=0,则不响应中断。 ``` Sti ,用于设置IF=1;
Cli 用于设置IF=0.
中断过程:1. 取中断类型码n
2. 标志寄存器入栈,IF=0,TF=0.
3. CS、IP入栈
4. (IP)=(N*4),(CS)=(N*4+2)
中断类型码是通过数据总线送入CPU 的 ```
- 键盘输入的处理:键盘中有一个芯片对键盘上的每一个键的开关状态进行扫描,按下一个键时,该芯片就产生一个扫描码,称为通码。扫描码被送入主板上的相关借口芯片的寄存器中,该寄存器的端口地址为60H。松开按下的键时,也产生一个扫描码,称为断码,也被送入60H。
断码=通码+80H 扫描码长度为一个字节,通码的第7位为0,断码的第7位为1
-
键盘的输入到达60H端口时,相关的芯片就会向CPU发出中断类型码为9的可屏蔽中断信息。CPU检测到该中断信息后,如果IF=1,则响应中断,引发中断过程,转去执行int9中断例程。
-
BIOS提供了int9中断例程,用来进行基本的键盘输入处理,主要工作:
[1]读出60H端口中的扫描码;
[2]如果是字符键的扫描码,将该扫描码和它对应的字符码(ASCII码)送入内存中的BIOS键盘缓冲区;如果是控制键和切换键的扫描码,则将其转变成状态字节,写入内存中存储状态字的单元
[3]对键盘系统进行相关的控制,比如说,向相关芯片发出应答信息。
0040:17单元存储状态字节,该字节记录了控制键和切换键的状态。
-
右shift状态,置1表示按下
-
左shift状态,置1表示按下
-
ctrl状态,置1表示按下
-
alt状态,置1表示按下
-
scrolllock状态,置1表示scroll指示灯亮
-
Numlock状态,置1表示小键盘输入的是数字
-
capslock状态,置1表示输入大写字母
-
insert状态,置1表示出于删除态。
- 键盘输入的处理过程:
键盘产生扫描码——扫描码送入60H端口——引发9号中断——CPU执行INT9中断例程处理键盘输入。
前三步都是由硬件系统完成的。
- 简单延时函数
Mov dx,10h Mov ax,0 S: subax,1 Sbb dx,0[1] Cmp ax,0 Jne s Cmp dx,0 Jne s
程序实现100000H次循环
- 指令系统总结:
-
数据传送指令:mov、push、pop、pushf、popf、xchg等,这些指令实现寄存器和内存、寄存器和寄存器之间的单个数据传送。
-
算术运算指令:add、sub、adc、sbb。Inc、dec、cmp、imul、idiv、aaa等,这些指令实现寄存器和内存中的数据的算术运算,他们的执行结果影响标志寄存器的:sf、zf、of、cf、pf、af位
-
逻辑指令:and、or、not、xor、test、shl、shr、sal、sar、rol、ror、rcl、rcr等,除了not指令外,其他的执行结果都影响标志寄存器的相关标志位。
-
转移指令:可以修改IP,或同时修改CS和IP的指令:无条件转移指令——jmp;条件转移指令——jcxz、je、jb、ja、jnb、jna;环指令:loop;过程:call,ret,retf;中断:int,iret。
-
处理机控制指令:这些指令对标志寄存器或其他处理机状态进行设置,如:cld std cli sti nop clc cmc stc hlt wait esc lock等
-
串处理指令:这些指令对内存中的批量数据进行处理,比如,movsb movsw cmps scas lods stos等,若要使用这些指令方便地进行批量数据的处理,则需要和rep、repe、repne等前缀指令配合使用。