滴水汇编第五天
本帖最后由 Insist_2020 于 2021-5-20 22:32 编辑堆栈
1.32位汇编寻址方式
<1>处理器根据指令中给出的地址信息来寻找有效地址的方式,是确定本条指令的数据地址以及下一条要执行的指令地址的方法。
<2>立即数寻址:直接给寄存器赋值
<3>寄存器寻址:操作数存放在CPU的内部寄存器中
<4>直接寻址方式:有效地址在指令中直接给出;LEA(Load effect address):取有效地址,也就是取偏移地址
<5>寄存器间接寻址:有效地址在寄存器
<6>寄存器相对寻址方式:有效地址是寄存器内容与位移量之和
<7>基址变址寻址方式:有效地址由基址寄存器的内容加上变址寄存器的内容构成
<8>相对基址变址寻址方式:有效地址是基址寄存器、变址寄存器与位移量之和:
<9>比例因子变址寻址方式:比例因子只能是1,2,4,8
<10>基址比例因子变址寻址方式
<11>相对比例因子基址变址寻址方式
2.堆栈
<1>栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底
<2>栈的特点:后进先出(Last-In/First-Out);在程序中可以临时存储大量的数据,便于查找,在程序中栈的增长方向从高地址到低地址
<3>模拟堆栈:一般情况堆栈中随着入栈和出栈而变化,栈底不会变化;所以一般通过栈底加偏移来获取栈中的数据,也可以通过栈顶
<4>假设EBX为栈底,EDX为栈顶,开始栈底与栈顶在统一地址:0x19FF90
<5>加入数据到栈里;数据为:0xAAAAAAAA,栈顶会变为0x19FF8C
<6>再加入数据到栈里;数据为:0xBBBBBBBB,栈顶会变为0x19FF88
<7>取数据0xBBBBBBBB到EAX,通过栈顶,取数据0xBBBBBBBB到ECX,通过栈底
<8>从栈中弹出数据到esi,栈里的数据不被修改,但是栈顶位置会改变,再次使用栈时里面的数据可能被覆盖
<9>再从栈中弹出数据到edi,栈里的数据不被修改,但是栈顶位置会改变,再次使用栈时里面的数据可能被覆盖
<10>cput提供操作栈的指令push(入栈),pop(出栈),默认esp为栈顶,ebp为栈底;入栈ESP-4,加入数据;取出数据,出栈ESP+4。
看过视频,感觉不错 这个有视频吗? 传统手艺人啊 666我也在学 需要学习,感谢楼主! 楼主报班学的吗? 看不懂,太深奥 从入门到放弃
页:
[1]
2