读《程序是怎样跑起来的》第十章有感

第十章——通过汇编语言了解二程序的实际构成

1.汇编语言和本地代码是一一对应的
汇编语言:在各本地代码中,附带上表示其功能的英语单词缩写,这些缩写称为助记符,使用助记符的编程语言称为汇编语言。
*通过查看汇编语言编写的源代码了解程序本质,同查看本地代码的源代码是同一级别。
汇编器:汇编语言编写的源代码需要转换成本地代码才能运行,负责转换工作的程序称为汇编器,转换这一处理本身称为汇编。
用汇编语言编写的源代码和本地代码是一一对应的。
反汇编程序:本地代码也可以翻过来转换成汇编语言的源代码,逆变换程序称为反汇编程序,逆变换这一处理本身称为反汇编。

2.通过编译器输出汇编语言的源代码
除了将本地代码反汇编,还可以通过其他方式获取汇编语言的源代码。
大部分C语言编译器可以利用C语言编写的源代码转换成汇编语言的源代码,而不是本地代码。

3.不会转换成本地代码的伪指令
汇编语言的源代码是由转换成本地代码的指令和针对汇编器的伪指令构成的。
伪指令负责把程序的构造及汇编方法指示给汇编器,但伪指令本身无法汇编转换成本地代码的。
段定义:由伪指令segment和ends围起来的部分,是给构成程序的命令和数据的集合体加上一个名字而得到的,称为段定义。

4.汇编语言语法是“操作码+操作数”
汇编语言中,一行表示对CPU的一个指令。
汇编语言指令的语法构造是“操作码+操作数”。
操作码:表示指令动作;
操作数:表示指令对象。

5.最常用的mov指令
对寄存器和内存进行数据存储的mov指令。
mov指令与两个操作数,分别是用来制定数据的存储地和读出源。

6.对栈进行push和pop
程序运行时,一般在内存上申请一个称为栈的数据空间。栈是存储临时数据的区域,特点是通过push和pop进行数据的存储和读出。
esp寄存器对栈进行读写的内存地址进行管理,push指令和pop指令运行后,esp寄存器的值会自动进行更新。

7.函数调用机制

8.函数内部处理

9.始终确保全局变量用的内存空间
在C语言中,在函数外部定义的变量称为全局变量,在函数内部定义的变量称为局部变量。

10.临时确保局部变量用的内存空间

11.循环处理的实现方法
for及if等条件分支改变程序流程的机制称为“流程控制”。

12.条件分支的实现方法
同循环处理的实现方法类似,使用cmp指令和跳转指令。

13.了解程序运行方式的必要性
在某些情况下查看汇编语言的源代码对查找BUG有帮助

以上为本章所学内容。

posted @ 2024-02-29 15:52  睡觉艺术家  阅读(2)  评论(0编辑  收藏  举报