汇编语言和本地代码
本地代码是可以直接由CPU解释执行的程序,其他高级语言都会被编译成本地文件执行。而本地文件不太好理解,所以我们常常使用汇编语言来代替,汇编语言使用很多缩写来表示执行的操作,这些缩写叫做助记符,使用助记符的编程语言叫做汇编语言。
汇编语言和本地代码是一一对应的。从汇编语言转换到本地代码的处理叫做汇编,从本地代码转换到汇编语言叫做反汇编。
"操作码+操作数"
汇编语言的语法是操作码+操作数,当然也存在没有操作数的情况。
CPU和内存的关系如下图:
寄存器是CPU中的存储区域,具有存储指令、数据的功能,还包括运算功能。使用汇编语言的时候,寄存器的名称会指定给操作数
X86的寄存器名称及作用:
常用指令介绍
1.mov指令
mov指令用于对寄存器和内存进行数据存储,mov的两个操作数分别用于指定数据的存储地和读出源。操作数可以指定寄存器、常数、标签(附加在地址前),及用方括号围起来的内容。
如果指定了没有用方括号围起来的内容,就表示对该值进行处理;如果指定了用方括号围起来的内容,方括号中的值会被解释为内存地址,然后对该内存地址对应的值进行读写操作。
mov ebp,esp
mov eax,dword ptr [ebp+8]
第一个表示esp寄存器的值存储在ebp中;
第二个表示ebp的值+8后,该值变为内存地址,去这个内存地址取出double word pointer(四个字节)的数据,存入到eax中。
2.push和pop指令
对栈的操作需要使用push和pop,
push和pop都只有一个操作数,该操作数表示push和pop的内容是什么,对于存储在哪个位置上,由esp寄存器来管理,esp寄存器存储了最高位数据的内存地址,当push或pop时,esp寄存器的值会自动更新(push是-4,pop时+4)。