对汇编的基本认知

汇编语言的发展

机器语言

由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,Python,Java等等这些语言有了一些共通的地方,使得不同专业的同学对于跨专业操作编的更加的容易,我有一个疑问,在不久的未来,AI可以商用,甚至民用、通用,语言会不会大一统呢(这里也是个人胡说。。。) 回到高级语言,特点是通用性强,缺点也很明显,体积更大。

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

  • 汇编语言机器语言是一一对应的关系,每一条机器指令都有与之对应的汇编指令
  • 汇编语言机器语言是可以互相转化的,反汇编:可行的,拿到二进制可以反汇编成汇编语言
  • 高级语言 可以通过编译得到汇编语言\机器语言 ,但是机器语言/汇编语言几乎不可能还原成高级语言
  • 不同的高级语言(Objective-C/Swift)可能对应的汇编是一样的。
  • 同样的语言,不同的代码,可能对应的汇编语言也可能是一样的。
  • 高级语言与汇编语言的对应关系:(一对多)

汇编语言的特点

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

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

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

借用大佬的话:

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

相关推荐
Crossoads5 天前
【汇编语言】更灵活的定位内存地址的方法(三)—— 不同的寻址方式的灵活应用
android·开发语言·数据库·人工智能·机器学习·数据挖掘·汇编语言
Crossoads6 天前
【汇编语言】更灵活的定位内存地址的方法(二)—— 从 [bx+idata] 到 [bx+si+idata]:让你灵活的访问内存
android·java·服务器·网络协议·tcp/ip·机器学习·汇编语言
Crossoads11 天前
【汇编语言】[BX]和loop指令(四)—— 汇编语言中的段前缀与内存保护:原理与应用解析
android·java·开发语言·数据库·机器学习·汇编语言
CYRUS_STUDIO13 天前
Android下的系统调用 (syscall),内联汇编syscall
android·linux·汇编语言
我不是程序猿儿13 天前
【数据结构】汇编语言和机器语言的‘数据结构‘
开发语言·数据结构·汇编语言·机器语言
CYRUS_STUDIO14 天前
Android 下内联汇编,Android Studio 汇编开发
android·汇编语言
Crossoads25 天前
【汇编语言】第一个程序(三)—— 深度剖析汇编程序的执行流程:编辑、编译、连接与运行
android·java·开发语言·数据库·网络协议·机器学习·汇编语言
xuan哈哈哈1 个月前
汇编语言
网络安全·汇编语言
Crossoads1 个月前
【汇编语言】第三章----寄存器(内存访问)(八)—— 栈顶越界的问题
java·开发语言·数据库·网络协议·tcp/ip·机器学习·汇编语言
Crossoads1 个月前
【汇编语言】寄存器(内存访问)(七)—— CPU提供的栈机制
android·java·tcp/ip·机器学习·cpu··汇编语言