汇编语言

相关定义

体系结构(指令集体系结构):

定义了一个硬件与软件的接口,即软件以何格式才能让硬件完成相应的动作。定义了指令集规范、寄存器组织方法等

微体系结构

如何实现指令集体系结构,即在底层如何实现,直接决定计算机性能

汇编语言

汇编语言来源

在计算机中,处理器理解的是机器指令,机器指令对机器友好,对人不友好。因此发展了汇编语言,实际相当于机器指令的注记符

汇编语言和C语言区别

高级语言
  • 有好的抽象能力。实现一条高级语言语句,需要多条汇编指令
  • 可提供更好生产力。编译器可将其转化为高效机器指令
  • 更加可靠不易出错。编译器提供类型检查
  • 跨平台能力。结合不同平台编译器,可生成不同平台程序
汇编语言
  • 程序内存需手动管理,耗费大量精力自己管理内存
  • 抽象能力低。复杂运算一般由简单指令组合而成,实现复杂运算较为复杂
  • 跨平台能力差。不同目标平台、不同指令集体系结构下,汇编语言定义不同,因此不具备跨指令集体系结构(跨平台)能力
  • 不存在数据类型概念,只有整数和浮点数概念,是什么数取决于程序员如何操作和理解;也不存在数组、结构体等,只是一段连续空间内存,由程序员手动操作

从汇编语言视角,计算机的结构图

从汇编语言程序员角度,可操作计算机部分汇编语言_第1张图片
CPU部分
  • 寄存器:靠近于CPU中运算器的存储部件,有很快存储速度。即将送入运算器中的数据会存储到寄存器中
  • 条件码:记录前一条指令的运行状态,如进位、运行结果的符号位等。根据条件码的内容可执行相应操作
  • pc寄存器:又称程序计数器,存放下一条即将加载的指令的地址。
内存
  • 汇编语言程序员把内存视为以字节为基本单位可连续寻址数组
  • 内存中,既存储指令,又存储数据,程序员需手动管理内存数据。
  • 汇编语言支持对于栈的操作,可以把内存一片区域看做栈的结构,执行入栈或出栈操作

结合实例,高级语言如何转换为机器指令

汇编语言_第2张图片

  • 编译阶段: 两个源文件通过编译器转换成汇编语言文件。即高级语言文件转换为汇编语言文件
  • 汇编阶段:汇编指令通过汇编器转换为可重定向目标文件,这是一个二进制级别的文件。即汇编语言文件转换为机器指令文件
  • 连接阶段:可重定向目标文件通过连接器,将两个可重定义文件及程序中用到的静态库、动态库进行连接,生成可执行文件。
    在C语言中malloc,printf函数均为库函数,在链接过程完成后才被调用。由于连接过程会有动态库、静态库的链接,因此链接过程可能报错,且较编译阶段难以排查

汇编指令基本结构

汇编语言_第3张图片

  • 开始(sumstore)为标号;后边为汇编指令

反汇编

两种汇编工具
  • 汇编语言_第4张图片

Linux系统本身带有工具,可对机器指令进行反汇编。语句为objdump -d sum,sum为目标程序(可以是可执行程序,可以是可重定向目标文件),把机器指令进行反向解释还原为汇编指令,如上图

  • 汇编语言_第5张图片

GDB反汇编工具。GDB实际是gcc中的调试工具,而非汇编工具。GDB中包含控制台,可以在控制台中单行输入做调试。其中部分命令支持对调试程序反汇编。如上图语句表示对以sumstore开头的14个字节进行反汇编

反汇编应用
  • 通过反汇编可以把没有源代码的可执行程序变成可以阅读的汇编语言程序,进而从中修改(如:破解密码)或找出它的运做过程(如:找出病毒的感染过程、藏身位置、发作条件等,用手工去除杀毒软件对付不了的病毒)。不过要小心的是不要因为破解人家的软件触犯了法律!
  • 重要技术手段,安全领域(如病毒分析)的技术工具

汇编语言格式(AT&T格式)

  • 汇编语言_第6张图片
  • 标号:可选,以冒号为结束标志。用于说明后边紧接着指令的所在位置,在跳转指令、过程调用指令时会使用标号。标号最终不在机器指令中,可理解为地址注记符
  • 操作码:必选。说明当前指令进行的行为,如数据移动、加减乘除等
  • 操作数:可有0、1、2个操作数,最多两个,最少没有。说明当前指令所操作的数据。有些指令不需要操作数据,因此会有0个操作数的情况

你可能感兴趣的:(计算机基础)