C 语言如何调用硬件

 时间:2024-10-13 14:58:52

1、通过向内存空间写数据。硬件会把硬件上的各种寄存器(外行可以理解为访问硬件的接口或者操作硬件的工具)映射到某一块内存地址空间上,之后只要用汇编指令,甚至C语言去读佯鲅烫侬写这一段内存地址空间(并非真正操作物理内存),就可以达到操作硬件的目的了。如果题主还有WindowsXP环境(虚拟机也可以),就可以用汇编指令直接操作显存:MOV AX,B800 MOV ES,AX XOR DI,DI MOV CX,0800 MOV AX,5555 REPZ STOSB硬件的各种寄存器会被映射到某一块物理内存中,这种方式称为MMIO,在Windows的设备管理器里,右键点设备,看属性-》资源里,不少硬件设备都有“内存范围”的参数,这里的内存范围就表示这个硬件的资源可以通过访问这一段内存来控制它。

2、方式二:x86汇编中,还有两个特殊的指令是IN和OUT,这是x86平台独有的,上面图里的I/O范围,就是用IN/OUT这两个指令来访问和控制的。以上两种访问硬件的方式,第一种是可以用C语言实现的,上面一段汇编,本质上类似于C语言代码:charptr = 0xB8000; int i; for (i = 0; i 《0x800; i++){ptr + i = 0x55; }

3、第二种IN/OUT方式没有直接的C语言语法对应,需要自己封装汇编。那么为什么平时很难用C语腱葱炙尕言操作硬围泠惶底件呢?这是因为平时写的代码大多数都在保护模式下,保护模式下,直接访问物理地址会受到限制,C语言操作的地址都是虚地址。对于Windows来说,要访问物理地址,需要工作在内核模式,也就是的写驱动才行。而在显存方面,首先,题主要先明白物理地址和虚拟地址的概念。原来的8086cpu设计的时候,地址空间有一块区域(640K-1M)之间,有一块作为显存使用这里你说的预留的地址,是指物理地址,这一段地址的准确范围是000A0000-000BFFFF,不管是32位还是64位CPU,这一段物理内存地址一直都保留给显存使用,不区分32位还是64位,也不区分保护模式还是实模式。

  • 20130519养生堂视频:于炎冰讲耳鸣的治疗方法
  • 海马老鸡炖花胶汤
  • 传说对决莉莉安有什么背景故事
  • 怎样画简笔画——十二生肖“鸡”
  • 猛鬼宿舍怎么当猛鬼
  • 热门搜索
    艺术节手抄报内容 手抄报a4版面设计图 庆元旦手抄报内容 清明节手抄报题目 小学生中国梦手抄报 手抄报图案小装饰 关于孝心的手抄报 电子手抄报模板 国庆节 手抄报 饮食与健康手抄报