汇编言语的开展

机器言语

由0和1组成的机器指令(本质上便是有电和没电)

在前期变成过程中,因为使用机器码这种方法很难过,渐渐的衍生除了助记符,如:

  • 加:0100 0000
  • 减:0100 1000
  • 乘:1111 0111 1110 0000
  • 除:1111 0111 1111 0000

汇编言语(assembly language)

助记符这种方法很大程度的方便了编写代码,逐渐就形成了汇编言语,换句话说,汇编言语能够是助记符的集合(纯个人胡说。。。),汇编言语的特点是用符号替代了机器代码指令,并且与机器代码有一一对应的联系:

  • 加:INC EAX 经过编译器0100 0000
  • 减:DEC EAX 经过编译器 0100 1000
  • 乘: MUL EAX 经过编译器 1111 0111 1110 0000
  • 除:DIV EAX 经过编译器 1111 0111 1111 0000

高档言语(High-level programming language)

比方C、C++、Objective-C、swift,更符合,更能让人了解的言语,对于iOS来讲,Objective-C向swift改变是一个必然的过程,在触摸swift的过程中,我发现swift与Android的Kotlin,PythonJava等等这些言语有了一些共通的当地,使得不同专业的同学对于跨专业操作编的更加的简单,我有一个疑问,在不久的未来,AI能够商用,乃至民用、通用,言语会不会大一统呢(这里也是个人胡说。。。) 回到高档言语,特点是通用性强,缺点也很明显,体积更大。

代码在终端上的编译过程:

对汇编的基本认知

  • 汇编言语机器言语是一一对应的联系,每一条机器指令都有与之对应的汇编指令
  • 汇编言语机器言语是能够互相转化的,反汇编:可行的,拿到二进制能够反汇编成汇编言语
  • 高档言语能够经过编译得到汇编言语\机器言语,可是机器言语/汇编言语简直不或许还原成高档言语
  • 不同的高档言语(Objective-C/Swift)或许对应的汇编是相同的。
  • 相同的言语,不同的代码,或许对应的汇编言语也或许是相同的。
  • 高档言语与汇编言语的对应联系:(一对多)

汇编言语的特点

  • 能够直接拜访,控制各种硬件设备,比方存储器、CPU等,能够最大程度上发挥硬件的功能
  • 能够不受编译器的限制,对生成的二进制代码进行完全的控制
  • 方针代码简略,占用内存较少,履行速度快
  • 汇编指令是指机器指令的助记符,同机器指令一一对应 ,每一种CPU都有自己的机器指令集\汇编指令集,所以汇编言语不具备可移植性。
  • 知识点许多,开发者需求对CPU硬件有必定的了解,不易于编写、调试、维护
  • 不区别大小写,MOV与mov是相同的

汇编言语的用处:(见仁见智)

  • 编写驱动程序,操作体系(Linux内核的某些关键部分)
  • 对性能要求极高的程序或许代码片段,可与高档言语混合使用(内敛汇编)
  • 软件安全 1、病毒分析与防治 2、逆向、加壳、脱壳、破解、外挂、免杀、加密解密、漏洞
  • 了解整个计算机体系最佳起点与最有效的途径
  • 为编写高质量的代码打下基础
  • 代码的本质 1、函数的本质 2、 ++a底层是怎么履行的 3、编译器究竟协助我们干了什么 4、DEBUG和RELEASE形式有什么关键的当地被我们忽略

借用大佬的话:

越底层越单纯、汇编是程序员需求用心了解的一门言语