赞
踩
汇编语言是二进制指令(操作码)的文本形式,与指令是一一对应的关系。比如加法指令00000011
写成汇编语言就是ADD
1、寄存器不依靠地址区分,而依靠名称,CPU通过名字去具体的寄存器拿数据。
2、寄存器的种类
分为通用和专用寄存区
由用户主动请求而划分出来的内存区域,叫做Heap。
1、帧的概念
系统会在栈中为每一个函数建立一个帧(frame),所以调用栈有多少层(递归),就有多少帧;函数运行结束,帧就被回收。
2、出栈(pop)和入栈(push)
Stack 是由内存区域的结束地址开始,从高位(地址)向低位(地址)分配。
一个CPU指令可以有零个到多个运算子
根据一个例子来学习
_add_a_and_b:
push %ebx
mov %eax, [%esp+8]
mov %ebx, [%esp+12]
add %eax, %ebx
pop %ebx
ret
_main:
push 3
push 2
call _add_a_and_b
add %esp, 8
ret
push 3
这个push操作涉及到下面几个步骤
注意:esp
始终指的是栈顶
调用函数指令,程序会去找对应函数名的标签,建立一个新的栈帧(绿色部分)
将一个值写入某个寄存器
mov %eax, [%esp+8]
将esp + 8
这个地址指向的值放入eax
两个运算子相加,并把结果放进前一个寄存器
add %eax, %ebx
结果保存在eax寄存器里
取出Stack最近一个写入的值(即最低位地址的值),放入运算子指定位置
pop %ebx
注意:pop会将esp寄存器里的地址加4,即回收4个字节
ret
指令用于终止当前函数的执行,将运行权交还给上层函数。也就是,当前函数的帧将被回收。
该指令没有运算子
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。