找回密码
 立即注册
搜索
热搜: 活动 通知
查看: 385|回复: 0

C语言到底是怎么《直接》访问硬件的

[复制链接]

37

主题

37

回帖

317

积分

至尊会员

积分
317

至尊会员

发表于 2024-5-22 22:39:39 | 显示全部楼层 |阅读模式
本帖最后由 linuxspring 于 2024-5-23 12:11 编辑

以前上大学时,我们老师说C语言能直接访问硬件,而像C#、Java等一些面向对象编程语言则不能直接访问硬件,当时对这句话并不能理解......

现在我依然不理解,因为我觉得   C语言本身其实就是比汇编语法更方便一些,可能汇编需要多条代码完成的事再C语言这里可能一条语句即可完成,

同时用C语言定义变量,写数据结构可能比汇编要方便几个数量级,

比喻盖房子的话,如果汇编语言是一块块砖块,我觉得C语言可能就是用多块砖块做好的一个模块,我们用模块去盖房子肯定比用一块块砖去盖要快点.

在保护模式下的操作系统之上,如果C语言程序  不用C编译器自带的标准库函数、以及系统调用的话,我感觉C语言本身也无法去访问硬件

在没有操作系统的年代,我觉得C语言可能就两个东西(一个是用汇编语言自己写的C编译器,该编译器软件负责把C语言代码转换成对应的汇编语言,另一个就是C语言规定的语法 )
仅仅就是编写效率比纯汇编高一些,语法层面上我觉得也就只有  普通的变量(整形、浮点型、实型)、结构体、条件表达式、函数、指针 等基础概念

但是也没有库的概念,这个时期的C如何去访问硬件呢,如何才能像汇编一样用in、out(独立编制)  或   mov (统一编制)  方式去访问硬件呢

访问硬件有两种方式:
第一种是:io硬件将自己存储空间映射到主存的指定范围内比如访问内存的0xB800处,就相当于再访问或控制显卡
我们是否可以用C语言这样来写

char * pView= 0xB8000;
*pView + 0= 'h';
*pView + 1= 'e';
*pView + 2= 'l';
*pView + 3= 'l';
*pView + 4= 'o';
...

第二种IN/OUT方式是不是就没有对应的C语言语法



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|鼠侠网 ( 吉ICP备19001332号 )

GMT+8, 2024-9-17 03:36 , Processed in 0.206984 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表