南京定制网站建设,北京新闻最新消息,蓟县做网站公司,网站建设推广平台网址一、int 指令
int 指令的格式为:int n#xff0c;n 为中断类型码#xff0c;它的功能是引发中断过程
CPU 执行 intn 指令#xff0c;相当于引发一个n号中断的中断过程#xff0c;执行过程如下#xff1a;
(1) 取中断类型码 n;
(2) 标志寄存器入栈#xff0c;IF0…一、int 指令
int 指令的格式为:int nn 为中断类型码它的功能是引发中断过程
CPU 执行 intn 指令相当于引发一个n号中断的中断过程执行过程如下
(1) 取中断类型码 n;
(2) 标志寄存器入栈IF0TF0;
(3) CS、IP 入栈;
(4) (IP)(n*4),(CS)(n*42)。
从此处转去执行n号中断的中断处理程序。
二、BIOS 和 DOS 提供的中断例程
系统 ROM 中存放着一套程序称为 BIOS除此之外还有 DOS 都提供了一套可以供我们调用的中断例程不同历程有不同的中断类型码并且还能根据传入的参数不同而实现不同的功能也就是说同一个类型码的中断例程可以实现很多不同功能如 int 10h 是 BIOS 提供的包含了多个和屏幕输出相关子程序的中断例程
BIOS 和 DOS 安装历程的过程是开机后 CPU 一加电自动初始化 CS 为 0FFFFHIP为 0 而在这个地方有一个跳转指令挑战到 BIOS 和系统检测初始化程序。在 BIOS 系统检测初始化程序中会设置中断向量表中的值
三、端口
从 CPU 的角度将这些寄存器都当作端口对它们进行统一编址从而建立了一个统一的端口地址空间。每一个端口在地址空间中都有一个地址。
四、端口的读写
在访问端口的时候CPU 通过端口地址来定位端口
端口的读写指令只有两条in 和 out分别用于从端口读取数据和往端口写入数据
in al 60h ;从 60h 号端口读入一个字节
注意在 in 和 out 指令中只能使用 ax 或 al 来存放从端口中读入的数据或要发送到端口中的数据。访问 8 位端口时用 al访问 16 位端口时用 ax。
五、shl 和 shr 指令
shl 是逻辑左移指令它的功能为: 1. 将一个寄存器或内存单元中的数据向左移位 2. 将最后移出的一位写入 CF 中 3. 最低位用 0 补充
mov al,01001000b
shl al,1 ;将 a1 中的数据左移一位
执行后 (al)10010000bCF0
shr 是逻辑右移指令它和 shl 所进行的操作刚好相反 1. 将一个寄存器或内存单元中的数据向右移位 2. 将最后移出的一位写入 CF 中 3. 最高位用 0 补充
mov al,10000001b
shr al,1 ;将 al 中的数据右移一位
执行后(al)01000000bCF1
六、外中断信息
在 PC 系统中外中断源一共有以下两类 1. 可屏蔽中断CPU 可以不响应的外中断 2. 不可屏蔽中断CPU 必须响应的外中断
CPU 是否响应可屏蔽中断要看标志寄存器的 IF 位的设置
当 CPU 检测到可屏蔽中断信息时如果 IF1则 CPU 在执行完当前指令后响应中断引发中断过程;如果 IF0则不响应可屏蔽中断
当然如果在中断处理程序中需要处理可屏蔽中断可以用指令将 IF 设置为 1。8086 CPU 提供的设置 IF 的指令如下: 1. sti设置 IF1 2. cli设置 IF0
七、PC 机键盘的处理过程
键盘上有一个芯片对键盘中每一个键盘的状态进行扫描开关按下生成一个扫描码——通码记录按下的按键位置开关抬起也会产生一个扫描——断码码记录松开的位置都是送入60h端口。通码的第7位为0断码第7位为1也就是说断码通码80h
BIOS中键盘缓冲区能存储15个键盘输入每个键盘输入两字节高位存放扫描码低位存放字符。此外0040:17单元存放键盘状态字节记录了控制键和切换键的状态记录信息如下
位含义0右shift1表示按下1左shift1按下2Ctrl1按下3Alt1按下4ScrollLock状态1表示指示灯亮5NumLock状态1表示小键盘输入的是数字6CapsLock状态1表示大写字母7Insert状态1表示处于删除状态
八、描述了单元长度的标号
下面的程序将 code 段中的a标号处的8个数据累加结果存储到b标号处的字中
code segmenta: db 1,2,3,4,5,6,7,8b: dw 0start: mov si offset amov bx,offset bmov cx,8s: mov al,cs:[si]mov ah,0add cs:[bx],axinc siloop smov ax,4c00hint 21hcode endsend start
九、在其他段中使用数据标号
注意在后面加有“:”的地址标号只能在代码段中使用不能在其他段中使用
data seqmenta db 1,2,3,4,5,6,7,8b: dw 0data endscode seqmentstart: mov ax,datamov ds,ax……………………
十、直接定址表
使用查表的方法编写相关程序如输出一个字节型数据的16进制形式子程序
showbyte jmp short show
table db 0123456789ABCDEF
show:push bx
push es
mov ah,al
she ah,1
she ah,1
she ah,1
she ah,1 ;右移四位位移子程序限制使用的寄存器数只能这么移
and al,00001111b
mov bl,al
mov bh,0
mov ah,table[bx] ;高四位作为相对于table的偏移取得对应字符
mov bx,0b800h
mov es,bx
mov es:[160*1240*2],ah
mov bl,al
mov bh,0
mov al,table[bx]
mov es:[160*1240*22],al
pop es
pop bx
ret