复习汇编语言(6)

Hello world,hello blog!

Posted by 吴柚 on April 12, 2019

学习进度

由于最近需要进行毕业论文的撰写,花了很多时间在毕业论文上,预计最近一段时间解第三阶段的进度会放缓很多。

外中断

  1. 外设的输入不直接送入内存和CPU,而是送入相关的借口芯片的端口中;CPU向外设的输出也不是直接送入外设,而是先送入端口中,再由相应的芯片送到外设。可见,CPU通过端口和外部设备进行联系。

  2. 可屏蔽中断:可由标志寄存器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 的 ```
  1. 键盘输入的处理:键盘中有一个芯片对键盘上的每一个键的开关状态进行扫描,按下一个键时,该芯片就产生一个扫描码,称为通码。扫描码被送入主板上的相关借口芯片的寄存器中,该寄存器的端口地址为60H。松开按下的键时,也产生一个扫描码,称为断码,也被送入60H。

断码=通码+80H 扫描码长度为一个字节,通码的第7位为0,断码的第7位为1

  1. 键盘的输入到达60H端口时,相关的芯片就会向CPU发出中断类型码为9的可屏蔽中断信息。CPU检测到该中断信息后,如果IF=1,则响应中断,引发中断过程,转去执行int9中断例程。

  2. 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表示出于删除态。

  1. 键盘输入的处理过程:

键盘产生扫描码——扫描码送入60H端口——引发9号中断——CPU执行INT9中断例程处理键盘输入。

前三步都是由硬件系统完成的。

  1. 简单延时函数
    Mov dx,10h
    Mov ax,0
         S:  subax,1
            Sbb dx,0[1]
            Cmp ax,0
            Jne s
            Cmp dx,0
            Jne s
    

    程序实现100000H次循环

  2. 指令系统总结:
  • 数据传送指令: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等前缀指令配合使用。