初学汇编的知识总结!
2007-05-01 03:26
169 查看
最近刚刚接触输入输出,对中断,I/O的理解还是很乱,在这里做一个总结
我们通常的MOV是针对主存的,和CPU中的寄存器,在80X86中I/O地址和内存不是统一编址,所以对主存和I/O的操作就不是同一指令,在I/O中用IN,OUT.
固化在ROM上的BIOS的数据区中包含了各个中断处理程序,和I/O端口地址,而中断向量存储在内存开始的1K内存中
DOS功能调用是建立在BIOS基础上的,BIOS又是建立在硬件的基础上的,所以越接近底层也就能获取更高效率的程序,但也会更加烦琐,需要你考虑的问题就越多.下面分别来说这3个方面
直接和硬件对话,最有效率的方法,但一些琐碎的事也就接踵而来,开关中断,外设的状态等等.比如先开中断,相应的控制状态位打开以允许更高级别的中断产生,中断嵌套时的现场保护,你要自己去IN状态,自己判断,自己IN I/O端口的数据,比如打印机,但图形与键盘的缓冲区在内存中,你要自己去输入输出该内存区.
但BIOS的中断程序似乎要轻松很多,只要入口参数设置好,INT一个中断号(类型),自动通过1K内存中的中断向量表查找段直和偏移来找到中断处理程序,你要的结果就在出口参数所在的寄存器中了,也就是说1个INT把上边和硬件直接对话的程序全都干了.在这里说一下,中断有256种类型,没个类型有2字节的段直,2字节的偏移,所以占用了1K,而且INT属于内部中断,可遇见的,是程序员遇知的,而外部中断是不可遇知的,随即的.要看CPU是否开中断了,中断控制器的响应位是1还是0,所以直接和硬件对话是很麻烦的.
至于DOS功能调用就不多说了,大家经常用到的.
建议多用BIOS功能,他主要是根据中断向量找到中断处理程序,而直接对话就是你自己直接去写处理程序,除非非要求效率,不然还是谨慎起见!
我们通常的MOV是针对主存的,和CPU中的寄存器,在80X86中I/O地址和内存不是统一编址,所以对主存和I/O的操作就不是同一指令,在I/O中用IN,OUT.
固化在ROM上的BIOS的数据区中包含了各个中断处理程序,和I/O端口地址,而中断向量存储在内存开始的1K内存中
DOS功能调用是建立在BIOS基础上的,BIOS又是建立在硬件的基础上的,所以越接近底层也就能获取更高效率的程序,但也会更加烦琐,需要你考虑的问题就越多.下面分别来说这3个方面
直接和硬件对话,最有效率的方法,但一些琐碎的事也就接踵而来,开关中断,外设的状态等等.比如先开中断,相应的控制状态位打开以允许更高级别的中断产生,中断嵌套时的现场保护,你要自己去IN状态,自己判断,自己IN I/O端口的数据,比如打印机,但图形与键盘的缓冲区在内存中,你要自己去输入输出该内存区.
但BIOS的中断程序似乎要轻松很多,只要入口参数设置好,INT一个中断号(类型),自动通过1K内存中的中断向量表查找段直和偏移来找到中断处理程序,你要的结果就在出口参数所在的寄存器中了,也就是说1个INT把上边和硬件直接对话的程序全都干了.在这里说一下,中断有256种类型,没个类型有2字节的段直,2字节的偏移,所以占用了1K,而且INT属于内部中断,可遇见的,是程序员遇知的,而外部中断是不可遇知的,随即的.要看CPU是否开中断了,中断控制器的响应位是1还是0,所以直接和硬件对话是很麻烦的.
至于DOS功能调用就不多说了,大家经常用到的.
建议多用BIOS功能,他主要是根据中断向量找到中断处理程序,而直接对话就是你自己直接去写处理程序,除非非要求效率,不然还是谨慎起见!
相关文章推荐
- 关于初学PHP时的知识积累总结
- 初学Delphi嵌入汇编 总结
- linux 初学第一课 知识总结
- 初学欧拉图,知识总结,后续增加
- 逆向初学【一】:汇编入门-基础知识
- 汇编知识总结--第一部分
- jquery的基础知识初学总结
- 汇编破解基础知识总结说明
- 关于初学PHP时的知识积累总结
- 初学 extJS 与 React 知识总结 (一)
- 汇编知识总结
- 汇编知识总结--第二部分(判断指令是否正确)
- iOS初学知识总结
- linux 初学第一课 知识总结
- 初学并查集知识总结后续增加
- 汇编基础知识总结
- Java必学基础知识总结汇编
- 总结一些基本知识,帮你读懂汇编代码
- 计算机存储,汇编基础知识,计算机寻址总结