为什么说汇编语言可以直接操作硬件

Jokul_Lee 2012-02-07 09:45:07
大家都说汇编语言效率高,是因为其可以直接对硬件进行操作。
我接触汇编没几天,想咨询一下大家,汇编只是对内存和地址进行直接操作,还是能对其他进行操作?
汇编是否是因为利用了处理器的特性进行运算,使其效率较其他语言要高?
...全文
2545 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

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧