Chinaunix首页 | 论坛 | 博客
  • 博客访问: 184767
  • 博文数量: 29
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 601
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-03 18:51
个人简介

大数据算法,分布式技术,spark技术爱好者

文章分类

全部博文(29)

文章存档

2015年(4)

2014年(3)

2013年(22)

分类: 嵌入式

2013-07-09 21:28:13

1。控制总线负责告诉芯片,cpu是要访问端口还是要访问内存,端口其实是芯片内部的寄存器的访问接口。
2.外设的输入不是直接送入cpu,而是送入接口芯片的端口。就像cpu的输出很多时候也是要送到寄存器。输出到外设也是先送到外设的端口,然后由相关芯片根据输入对外设进行控制。
3.可屏蔽中断,不可屏蔽中断:外设的大部分中断时可屏蔽的。if=1。则可以响应可屏蔽中断,执行完当前指令后会跳转到中断代码。不可屏蔽中断代码为2,在中断过程中不需要取中断类型码,直接跳转到例程。
4.端口:寄存器和端口对应。键盘的寄存器在cpu中有个名字,这个名字叫端口。就是说你在家的时候家里人管你叫小明,在学校同学管你叫大明,端口就是个代号,本质是寄存器,只不过这个寄存器是可扩展的,在外设上,需要识别和注册。让学校的人知道你叫大明。大明就是你的端口,你就是寄存器。在电子哪里,这个端口又叫通信接口。
键盘中断:键盘里有个寄存器在cpu里叫60h。按下按键时产生通码,存在60h中。按起是产生断码。
断码=通码+80h。就是最高位位1为断码。
当60h接到数据,会通知cpu,请求处理。cpu要是设置了if=1,就会直接处理。int 9中断例程就是用来处理键盘中断的。
处理方式:0040:17存放状态字。我猜测也应该是bios上的ram。同时bios可以存放15个键盘输入。一个输入2个字,高位是扫描码,低位是字符码。
5.更新整个标志寄存器:如果一位一位的set,clear,很费事,可以先用pushf入栈,然后pop ax,然后再add ax,10101011b,再push ax,再popf。
6.因为寄存器,栈,内存之间数据均可互相流动,所以要把一个内存的数据转到另一个内存,可以用寄存器做中转,也可以用栈做中转。栈做中转比较方便,不用占用寄存器。
7.中断向量表,低字节存ip,高字节存cs,看上去是倒着的:ip,cs
8.书中用了一个比较笨重的方法,在自己编写的中断例程中调用已经被删掉中断列表项的例程,模拟了一个int过程,即标志寄存器入栈,置tf,if。call。说这个方法笨重,是因为其实中断例程也是例程,就是调用的时候要把标志寄存器入栈,并屏蔽掉中断。简单的做法是直接建立一个新的中断表项,把系统原来的int 9中断例程地址转移过去
9.修改中断表的时候如果是两条语句:修改段和偏移,就会发生错误。如果是一条语句当然就没事了
10.xchg 交换内存指令,其中一个操作数必须在寄存器中。
11.指令总结:
1)数据传送指令:
比如mov,push,pop,pushf,popf,xchg等都是数据传输指令,这些指令实现寄存器数据传输。
2)算数运算指令:
add,sub,adc,sbb,inc,dec,cmp,imul,idiv,aaa都是算术运算指令。他们执行结果影响标志寄存器。
3)逻辑指令:and,or,not,xor,test,shl,shr,sal,sar,rol,ror,rcl,rcr,除了nor,其他都影响标志寄存器
4)转移指令:
a)无条件转移:jmp
b)条件转移:loop,jcxz,je,ja,jb,jna,jnb
c)过程指令:call,ret,retf
d)中断: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批处理。
阅读(1883) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~