Assemble(王爽)—— 中断(代码例子,测试不了)
来源:互联网 发布:淘宝店铺是怎么升级的 编辑:程序博客网 时间:2024/06/14 03:51
中断,(好像)系统自带的,硬件芯片BIOS中。
(这里用的内存地址,都是绝对地址。另外,我用的是win7,nasm)
系统一共有256个中断——一个字节大小。中断,一般由int + 中断号来触发。触发之后,根据中断向量,调用对应的中断代码进行处理。在内存0-3ffh内存放的是中断向量。一个中断向量4个字节,分别2字节的cs和2字节的ip——指向对应的中断处理代码。
在12章,就是写了一个自己的中断处理代码,并且注册到了中断向量0号。其中,有三个比较重要的点。第一,就是中断处理代码,这里为了测试,所以代码是输出字符串。输出字符串,就是直接写“显存”!第二,就是需要这段代码常驻内存——这样才能调用。(我猜测),有些内存是不被分配给别人的(比如200h到2ffh这个范围);有些内存,是可以分配给别人,可以被写覆盖了。书上的例子,就是将这段中断代码拷贝到内存200h-2ffh。第三,就是要将这段代码的位置注册给0号中段——即设置下中断向量(cs=0,ip=200h)。
但是,代码写完测试的时候,发现没法验证——纠结!做了些尝试,为解决问题。下面记录下尝试。
1、由于运行有问题,所以我想先看看中段代码效果(如果这个没问题,那么就再测试其他的点)。但是,这个就没测试效果。查看了下,似乎因为我直接写内存了——这个好像在win7是不允许的!
2、于是,我又想——直接在linux下测试吧。但是,还是有问题:linux下默认是32位的,就是加了[BITS 16],编译出来的也是32位的elf。链接的时候是会报错的(编译没问题),错误现象是mov ax,msg;其中,msg是一个字符串变量——即将地址放到16bit的ax中。但是,msg的地址是32位的。这个可能是要用到16位的连接器?不知道哦。
3、我手头有本书《自己动手写操作系统》,上面讲到了自己对字符串的显示,在裸机上(boch)。于是我想,我能不能在写个类似的测试程序,直接在boch上运行?试了下,编译生成bin文件是没有问题的。但是,在写flopy的时候,一直失败。用的是rawrite2.exe,相关资料比较上,找不失败原因。
附注:找到些相关的资料:
1、http://zhidao.baidu.com/question/359419279.html
——这个可以照着操作,但是会产生乱码。所以,最好对显存相关操作有了足够的了解,再做这些事情。
另外,显示,不一定要操作显存,linux下可以通过系统调用实现。我这里执着于此,是因为终于印证了“汇编直接跟硬件打交道的”这句话。理论有了,我只不过还是操作试下。
- Assemble(王爽)—— 中断(代码例子,测试不了)
- Assemble(王爽)——写在前面
- Assemble(王爽)——1、2、3章学习记录
- Assemble(王爽)——nasm 和 masm的一些简单区分
- Stm32使用Usart代码例子(轮询、中断、DMA)
- HDU2333 Assemble(二分)
- POJ3497 Assemble(二分)
- uva 12124 —— Assemble
- UVA 12124 - Assemble(二分)
- LA3971-Assemble(贪心+二分)
- 发送http请求(多用途测试,这里用以测试cookie) ,java代码测试例子
- 异步通知,中断 例子(AM335X)
- 汇编之中断申请(例子)
- uvalive 3971 - Assemble(二分搜索 + 贪心)
- Uva 12124 Assemble 解题报告(二分)
- hdu 2333Assemble(uvaoj 3971)贪心
- uva 12124 Assemble(二分法->最小值最大化*)
- UVA 12124 Assemble(贪心 二分)
- 语录
- 第十一章 面向对象的编程
- match_flow
- openfire connection manager tls 配置
- STM32和OV7670的串口上位机调试
- Assemble(王爽)—— 中断(代码例子,测试不了)
- Ford-Fulkerson
- error:ORA-12526: TNS:listener: all appropriate instances
- hash(电话本)
- 關於 SQL Server 數據庫 一直顯示“正在還原”
- 回文串O(n)算法 Manacher算法
- Dinic
- 搭建Lua5.2.2并编写C模块
- 一道有趣的GOOGLE面试题——找出至少一个重复元素