一:1.汇编语言是使用助记符来编写程序的。
2. 汇编需要使用汇编器来完成。
3.通过反汇编可以得到人类能够理解的源代码。
4. 汇编语言源文件的扩展名在Windows 中主要是asm,在Limu中主要是s。不过,本章中使用的C语言编译器 BCC32 虽然是在Windows环境下运行的,但使用了s作为汇编语言源文件的扩展名。
S,在高级编程语言的源代码中,指令和数据都是分散在各个位置的,但在编译后它们会被分别汇总到不同的段中。
6. 汇编语言中可以使用跳转指令实现循环和条件分支
二:用C语言编写的源代码,在编译之后也会转换成适配特定 CPU本机代码。再对本机代码进行反汇编,我们就可以得到汇编语言代码,从而可以查看其内容。但是,将本机代码反编译成C语言源代局要比反汇编困难得多。这是因为C语言源代码和本机代码并不是一对应的,我们不能保证得到和编译之前相同的源代码”。
汇编语育源代码中的指令分为两种,一种是会被转换成本的中品的一般指令,另一种是专门针对汇编器的伪指令。伪指令负责告诉【编器程序的结构和汇编的方法,因此也被称为汇编程序指令(asseible
directive )
三:栈是临时存放数据的内存空间,我们马上会讲到的函数调用,及本章后半部分会讲到的局部变量,都会使用栈来存放数据。当需在找中存放多个数据时,需要以 esp 寄存器所指向的地址为起点,计出数据应该存放在哪个地址,然后将数据写人该地址。例如,moll$456,4(%esp) 这条指令就表示将456 这个数值写人从 esp 寄存器所指向的地址起向后4字节的地址中。而 movl8(%esp),%eax 这条指令表示将从 esp 寄存器所指向的地址起向后8字节的地址中的值读取出来并存人eax 寄存器中。
四:C语言中的if条件分支在计算机内部就是这样通过比铰指令和眼转指令来实现的。在C语育源代码中,我们指定当if(a>100),即变量a的值大于100”这个条件为真时调用 MySubA 函数,否则调用
MySubB 函数。与之相对,在汇编语言源代码中,当“变量a的值小于等于100”这个条件为真时调用 MySubB,否则调用 MySubA。二者对条件的描述是相反的。这是因为汇编语言中只有“条件为真时跳转”这种描述形式。如果将代码清单的汇编语言源代码按照同样的流程用C语言描述,就是代码清单的样子。从C语言的角度来看,这样的程序显得很奇怪,但计算机内部就是这样处理的。