传说绿宝石吧 关注:8,684贴子:19,985
  • 5回复贴,共1

【机翻】学习汇编的作用,C/C++和汇编的关联

只看楼主收藏回复

从广义上讲,您可以将编程语言分为4类。最低级别是机器代码:CPU解码为要执行的指令的原始数字。一步是组装。这本质上就是机器代码:每个汇编指令对应一条机器代码指令。上面是像C这样的编译语言,它使用结构化语言元素来阅读更像英语,但需要编译成机器代码才能运行。最后,还有像PHP(通常是VB和Java)这样的脚本语言,它们通过解释器运行,这些解释器被配置为运行正确类型的机器代码以获得所需的效果。
每一步都会增加人类的可读性和可移植性,但代价是运行速度和程序大小。在过去,程序员是真正的程序员,由于时钟速度和/或内存限制,他们在机器代码或汇编中工作。对于个人电脑来说,这些日子早已过去,大部分工作都是用高级语言完成的。诚然,这是一件好事:代码编写速度更快,维护更容易。然而,仍有少数情况下高级语言不够。具有16.7Mhz CPU和小于1MB或工作RAM的GBA就是其中之一。在这里,最高语言的低效会让你付出高昂的代价,如果它真的运行的话。这就是为什么大多数GBA工作是在C/C++中完成的,有时被亲切地称为“便携式汇编”,因为它仍然具有直接使用内存的能力。但有时这还不够。有时候你真的需要让每一个周期都有意义。为此,您需要组装。
现在,在一些圈子里,“汇编”这个词可以用来吓唬小程序员。因为它与CPU紧密相连,你可以让它做任何事情;但这也意味着你必须做一切。接近硬件也意味着你绕过了高级语言可能具有的所有安全特性,因此更容易破坏东西。所以是的,这更难,也更危险。尽管有些人可能更喜欢“冒险”这个词。
要在汇编中编程,您需要知道处理器实际如何工作,并以它能够理解的方式编写,而不是依赖编译器或解释器来为您完成。没有结构化的for或while循环,甚至没有if/else分支,只有goto;没有带继承的结构或类,甚至数据类型也大多不存在。这是一种无政府状态,但正是缺乏官僚作风才使得快速编码成为可能。
撇开速度/尺寸问题不谈,学习组装可能是个好主意还有其他原因。就像我说的,它迫使你真正理解CPU是如何工作的,你也可以在你的C代码中使用这些知识。变量的“最佳”数据类型就是一个很好的例子。因为ARM处理器是32位的,所以在大多数情况下它更喜欢INT,而其他类型的处理器则会慢一些,有时慢得多。虽然从处理器本身的描述中可以明显看出这一点,但对汇编的了解将告诉您为什么它们速度较慢。
第三个原因,也不是不可忽视的原因,只是为了一般的冷静(B)。它比高级语言更难这一事实应该吸引你内心的极客,他们喜欢这样的挑战。语句本身的简单性也有一种美学性质:不需要混淆类、不同的循环样式、运算符优先级等——它只需要一行代码、一个操作码,而且只需要几个参数。


IP属地:四川1楼2022-01-12 15:38回复
    这段话的最关联的一句话:它迫使你真正了解cpu是如何工作的。


    IP属地:四川来自Android客户端3楼2022-01-13 11:58
    回复
      在过去里,程序员是真正的程序员。


      IP属地:四川来自Android客户端4楼2022-01-13 19:10
      回复
        在一些圈子里,汇编这个词可以用来吓唬小程序员。


        IP属地:四川来自Android客户端5楼2022-01-13 19:11
        回复
          这篇机翻的内容其实很大提现了这个作者,可能是一个高级programmer,也可能是一个高级hacker,的本分,也就是高度自信,甚至自负。


          IP属地:四川来自Android客户端6楼2022-01-13 19:13
          回复
            那么问题来了,学完这些可以看到楼主的女装吗?


            IP属地:广西来自Android客户端7楼2022-01-19 23:48
            回复