• 第十五章 外中断


    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

     

     

     

  • 相关阅读:
    策略模式
    Java反射机制
    两个无符号的正大数相加
    MySQL大表优化方案
    造成mysql慢查询的原因
    mysql对于很长的字符列的索引方案
    lyt经典版MySQL基础——函数
    lyt经典版MySQL基础——存储过程
    lyt经典版MySQL基础——变量
    lyt经典版MySQL基础——视图
  • 原文地址:https://www.cnblogs.com/quantumplan/p/2406316.html
Copyright © 2020-2023  润新知