这章讲了通过汇编语言了解程序的实际构成。汇编语言是通过助记符来记述程序的,由源代码转换为本地代码的方式称为汇编,反过来就是反汇编,汇编语言的源文件扩展名为.asm。在汇编语言中,通过跳转指令可以实现循环和条件分支。
汇编语言和本地代码是一一对应的,通过汇编语言编写的源代码最终都转换成本地代码才能运行,负责转换工作的程序称为汇编器,本身称为汇编。汇编语言的源代码是由转换成本地代码的指令和针对汇编器的伪指令构成的。伪指令负责把程序的构成及汇编的方法指令给汇编器(转换程序)伪指令本身是无法汇编转换成本地代码的。给程序的命令和数据的集合体加一个名字就是段定义,一个程序是由多个段定义构成。在汇编语言中,1行表示对CPU的一个指令,汇编语言指令的语法结构是“操作码+操作数”(也存在只有操作码没有操作数的指令)。操作码表示指令动作,操作数表示指令对象,能够使用何种形式的操作码是由CPU的种类定的。
接着讲了CPU与内存的关系:本地代码加载到内存后才运行,内存中存储着构成本地代码的指令和数据,程序运行时,CPU会从内存中把指令和数据读出,然后存储在CPU内部的寄存器中进行处理。寄存器不仅仅具有存储指令和数据的功能,也有运算功能。指令中最常用的是对寄存器和内存进行数据存储的mov指令,mov指令的两个操作数,分别用来指定数据的存储地址和读出源。下一节又讲了对栈进行push和pop。前面章节中有讲了用LIFO(先入后出)方式进行数据读写的数据结构称为栈。在程序运行时,会在内存上申请分配一个称为栈的数据空间,栈是存储临时数据的区域,它的特点是通过push指令和pop指令进行数据的存储和读出。进行一次push或者pop,即可处理32位(4字节)的数据,push指令和pop指令中只有一个操作数,对栈进行读书的内存地址是由ESP寄存器(栈指针)进行管理的。push指令和pop指令运行后,ESP寄存器的值会自动进行更新(push指令-4,pop指令+4),因此程序员就没有必要指定内存地址。
这章还讲了函数调用机制:首先是myfunc函数调用addwum函数的汇编语言部分开始对函数调用机制函数调用是栈发挥大作用的场合,函数的参数是通过栈来传递的,返回值是通过寄存器来返回的。最后讲了全局变量和局部变量,其中局部变量只能在定义该变量的函数内进行参阅,是因为局部变量是临时保存在寄存器和栈中的。以及讲到了循环处理,我们最熟悉的就是for循环及if分支。条件分支使用CMP指令和跳转指令完成。
阅读到后面都不懂了,只是有部分认识,所以还要继续请教钻研啊。
标签:汇编语言,第十章,程序,pop,指令,内存,寄存器,push,怎样 From: https://www.cnblogs.com/Lxp678/p/17176746.html