社区
汇编语言
帖子详情
为什么说汇编语言可以直接操作硬件
Jokul_Lee
2012-02-07 09:45:07
大家都说汇编语言效率高,是因为其可以直接对硬件进行操作。
我接触汇编没几天,想咨询一下大家,汇编只是对内存和地址进行直接操作,还是能对其他进行操作?
汇编是否是因为利用了处理器的特性进行运算,使其效率较其他语言要高?
...全文
3246
12
打赏
收藏
为什么说汇编语言可以直接操作硬件
大家都说汇编语言效率高,是因为其可以直接对硬件进行操作。 我接触汇编没几天,想咨询一下大家,汇编只是对内存和地址进行直接操作,还是能对其他进行操作? 汇编是否是因为利用了处理器的特性进行运算,使其效率较其他语言要高?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Jokul_Lee
2012-02-15
打赏
举报
回复
非常感谢大家的讲解,只是这个帖子已经结了,没办法给大家分了,下次一定多给大家分哈。
gsy999
2012-02-15
打赏
举报
回复
[Quote=引用楼主 jokul_lee 的回复:]
大家都说汇编语言效率高,是因为其可以直接对硬件进行操作。
我接触汇编没几天,想咨询一下大家,汇编只是对内存和地址进行直接操作,还是能对其他进行操作?
汇编是否是因为利用了处理器的特性进行运算,使其效率较其他语言要高?
[/Quote]
■■为什么说汇编语言可以直接操作硬件?
其实这个问题只要稍加分析就可以得到答案。
首先要明白汇编语言是什么样的语言。汇编语言就是直接用机器指令(机器语言)写程序的语言,而机器语言就是计算机操作所有资源的最终语言。如果机器语言都不能直接操作硬件,那么也就不存在汇编语言可以直接操作硬件;如果机器语言可以直接操作硬件,那么就等于说汇编语言也可以直接操作硬件(更贴切点说应该是汇编语言能写出直接操作硬件的指令)。
那么机器指令(机器语言)可以直接操作硬件吗?当然可以。
■■汇编语言效率高吗?
首先此处的效率是什么效率?是生产程序的效率,还是程序运行的效率?如果我没误解的话,LZ可能说的是程序运行的效率,也就是计算机运行程序完成同样的任务所用的时间的多少。
我们来分析一下。由于不管用什么语言写的程序,最终都要编译成计算机可以执行的机器指令,而每条机器指令的运行速度与编程语言无关,那么计算机完成同样任务所需时间的多少只能与执行的机器指令序列相关(假设硬件和操作系统环境相同)。联系编程来说,它主要与两个方面相关:一是,完成同一任务你选用了什么样的指令,举个例子来说,同是装入存储器地址,你可以选用:mov si,offset mem; 你也可以选用 lea si,mem;这两条指令的运行效率是不一样的,你选择了快的肯定快,相反你选择了慢的肯定慢。二是运行效率与指令用的多少相关,也就是说冗余的指令用的越多速度越慢,就如同坐飞机从上海到南京,在飞行速度相同的情况下,直飞就少用时间,绕道飞就要多用时间一样。
如果我们定义:运行效率高的程序就是代码质量高,运行效率低的程序就是代码质量低,那么哪种语言能做到产生的代码质量最高呢?理论上是汇编语言,为什么?因为用汇编语言编程就是用机器语言编程,编程时,你可以自由地选择和编排机器语言序列,而其他高级语言是做不到的,原因是它在将原代码编译成机器指令时,不可能绝对做到产生的代码质量最高,总会或多或少加进冗余代码。但是要切记,这是理论上的分析,而现实生活中,如果你的水平和能力不够,不见得你用汇编写的代码就一定比熟手用高级语言写的代码运行质量高!同是骑自行车,高手可以爬高上低翻斤斗甚至能通过表演挣钱养家,但并不代表人人都可以做到,事实上更多的普通人也就是在平地上骑骑它代步上下班而已。
Saleayas
2012-02-15
打赏
举报
回复
汇编不可以直接操作硬件,在现代操作系统中,操作硬件主要需要的是授权的问题。
汇编不会提高程序的效率。
任何语言都不会。因为他们仅仅是语言。
很多人所脚本其实是最快的。
那是因为脚本执行的平台是操作系统提供的。而这个平台是针对你当前的机器优化的。
现在 .NET 的 JIT 就是这样的。
而用汇编或 C 语言写的程序,一般都是通用的,必须适用于所有的机器。
在很特定的场合,在处理快速数据的时候,都需要有硬件的最低配置就是这个道理。
速度快,效率高,是因为该程序最大化的利用的硬件资源。
1az98你好
2012-02-14
打赏
举报
回复
[Quote=引用 4 楼 jha334201553 的回复:]
对硬盘、对U盘、对串口操作用IN、OUT,自己好好回去看看汇编的书。至于mov只能跟内存交互。
高效运算比如 4+3*2
mov eax,2
lea eax,dword ptr[eax*3+4]
也可以做
mov eax,3
shl eax,1
add eax,4
[/Quote]
5楼的例子有问题:用 lea 做乘法时,相乘的两个数中必须有一个为 1、2、4、8,这是“Indirect Memory Operand”内存访问方式中所谓的"scaling factor"。所以上例应该改为:
高效运算比如 4+3*2
mov eax,
3
lea eax,dword ptr[eax*
2
+4]
也可以做
mov eax,3
shl eax,1
add eax,4
.....
knxw0001
2012-02-13
打赏
举报
回复
汇编指令可以对硬件操作啊。比如in指令,可以直接控制端口;mov指令可以直接对内存或CPU内部的寄存器操作。
其他语言没有直接对硬件操作以完成已定任务的。
大熊猫侯佩
2012-02-13
打赏
举报
回复
哪个讲汇编效率高的鸟?误人子弟鸟!
wszyjsw
2012-02-10
打赏
举报
回复
对数字的电路最根本的操作就是 对逻辑电平的操作 赋1赋值0(逻辑运算和加减乘除本质也是在改变电平) 汇编语言就是做这工作的 所以说汇编语言是直接操作硬件的语言
Binzo
2012-02-10
打赏
举报
回复
机器语言直接操作硬件吧。
汇编还是要编译成机器语言的。
bornag
2012-02-07
打赏
举报
回复
汇编可以使用一些高级语言没有的特殊指令完成特殊功能如协处理器访问指令,或取乘法结果的高32位(某些浮点转定点场合需要,可看libmad代码)。
对普通程序来说,有中间翻译层的语言不考虑,多了一层转换效率肯定比不上直接编译成二进制代码的语言。就c和汇编来说,写的好的C代码可以与汇编的效率接近,差的一点在于编译器生成二进制代码时可能产生一些冗余指令,例如不必要的访问内存指令,用汇编可以最大化利用cpu寄存器减少访问内存,从而提高程序运行速度。
所有的前提是程序写的要精简,至少尽量做到本语言的最优化,写的不好的汇编也可能比C程序慢。
z569362161
2012-02-07
打赏
举报
回复
汇编是最接近于机器语言的编程语言。,使用汇编语言的时候,能够感知计算机的运行过程和原理,从而能够对计算机硬件和应用程序之间的联系和交互形成一个清晰的认识。
汇编是面向机器的程序设计语言.利用计算机所有硬件特性并能直接控制硬件的语言。需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。在这样的环境中编写的汇编程序,很大一部分是面向汇编器的伪指令,汇编语言的长处在于编写高效且需要对机器硬件精确控zhi
masmaster
2012-02-07
打赏
举报
回复
汇编语言里有直接操作硬件的指令,比如,mov ax,1234;这就是所谓的直接对硬件操作。
处理器新增的特性,往往随指令手册发布,可以用汇编语言直接,比如一些多媒体指令,而高级语言恐怕就很难做到了, 我是这么理解的。
「已注销」
2012-02-07
打赏
举报
回复
对硬盘、对U盘、对串口操作用IN、OUT,自己好好回去看看汇编的书。至于mov只能跟内存交互。
高效运算比如 4+3*2
mov eax,2
lea eax,dword ptr[eax*3+4]
也可以做
mov eax,3
shl eax,1
add eax,4
为什么
汇编语言
能够
直接
控制
硬件
?一文讲透 CPU、内存、I/O 与中断
h2 id="1">1. 什么是
汇编语言
?为什么能
直接
控制
硬件
?
汇编语言
(Assembly)是一种的编程语言。每条指令都能
直接
映射到 CPU 的机器指令,因此它天然具有:
直接
操作
寄存器访问内存地址控制 I/O 端口触发中断配置
硬件
控制寄存器没有中间层,大部分
操作
系统限制也能绕过(在裸机或内核环境中)。
2. CPU 与指令集:汇编的核心基础
CPU 可以理解的唯一语言是。汇编只是机器码的可读版本。(算术逻辑单元):做加减乘除、逻辑运算。
为什么要学习
汇编语言
?
一、我学习汇编的缘由 工作两年后,我为什么突然决定要学习汇编呢?在我的一些朋友看来很奇怪,确实,这个选择在我的技术学习生涯里,有点突兀。 我在上篇文章 《计算机非科班工作后如何爬出技术的绝望之谷,走向开悟之路》 中聊了下目前学习的瓶颈,决定要学习计算机科班的专业课程,打破认知差距。那么我应该如何选择重点课程,设置这些课程的学习顺序呢? 其实我最开始是学习了《数据结构算法》和《网络技术》的,这两者比...
c语言对
硬件
编程,c语言
直接
对
硬件
操作
可行吗?
c语言
直接
对
硬件
操作
可行吗?发布时间:2020-04-24 10:01:29来源:亿速云阅读:141作者:小新c语言
直接
对
硬件
操作
可行吗?相信有很多人都不太了解,今天小编为了让大家更加了解c语言,所以给大家总结了以下内容,一起往下看吧。c语言
直接
对
硬件
操作
可行吗?不可行首先,C语言不能够
直接
对
硬件
进行
操作
。从本质上来
说
,连
汇编语言
都不可以。只有机器语言能够
直接
操作
硬件
。其次,C语言要
操作
硬件
是必须...
C#语言能
直接
操作
硬件
吗?解密C#在
硬件
编程中的应用与限制
摘要:C#作为高级编程语言,虽无法
直接
操作
硬件
,但可通过
操作
系统API、通信协议及外部库实现
硬件
交互。本文探讨了C#在
硬件
编程中的应用,包括串口通信、网络协议(TCP/UDP)及调用设备厂商SDK的常见方法,分析了其依赖系统层接口的局限,并推荐了NModbus等工具库。最佳实践建议采用异步编程和错误处理优化稳定性。随着物联网发展,C#在工业自动化和嵌入式系统中的
硬件
控制能力将持续增强。(150字)
C++ 与
汇编语言
交互:深入底层
硬件
操作
通过将汇编代码嵌入到 C++ 程序中,以及实现 C++ 与
汇编语言
之间的数据交互,开发者可以充分发挥高级语言和低级语言的优势,深入了解计算机底层
硬件
的工作原理,实现对
硬件
的精确控制。然而,使用
汇编语言
进行编程也存在一些缺点,如代码的可读性和可维护性较差,开发效率较低等。因此,在实际开发中,应该根据具体的需求和场景,合理地使用 C++ 和
汇编语言
,将两者有机地结合起来。随着计算机技术的不断发展,
硬件
架构和编程语言也在不断演进。
汇编语言
21,500
社区成员
41,618
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章