汇编 笔记(2)
来源:互联网 发布:tina软件 编辑:程序博客网 时间:2024/05/18 00:10
昨天任务:
查找这几个指令用法
neg 取补的指令
sbb 带位减法指令,它利用CF位上记录的借位值
test 测试指令,实现源操作数的按位逻辑与运算工,并按结果设置标志位,但是结果不送往目的地址中,结果影响sf,zf,pf
xor 异或,二进制运算
lea 取得地址(取得第二个参数的地址到前面的寄存器中)
//这段代码 ……解释……
neg eax
sbb eax,eax
inc eax
代码的作用: 如果eax初值为0, 则执行上面的代码后,结果为1.
如果eax初值非0, 则执行上面的代码后,结果为0.
//还有这段代码……
mov eax,dword ptr [ebp-08]
把堆栈中里面偏移地址ebp-08的dword给eax
*** 今天 笔记 ***
push:把一个32位的操作数压入堆栈,同时esp(栈顶)减4
pop:相反,esp被加4,一个数据出栈
sub:减法。第一个参数是被减数所在的寄存器,第二个参数是减数
add:加法。第一个参数是被减数所在的寄存器,第二个参数是减数
ret:返回。相当于跳转回调用函数的地方,对应Call指令来调用一个函数,返回到call
之后的下一条指令
call:调用函数,它会把它的下一条指令的地址压入堆栈中
数据传送指令
mov:数据移动。第一个参数是目的,第二个参数是来源。
xor:异或。常用xor eax,eax(清零操作)代替mov eax,0
lea:取得地址(取得第二个参数的地址到前面的寄存器中)
lea edi,[ebp-0cch]
等同于mov edi,ebp-0cch(不过这个是错误的写法)
所以有时候可以用lea代替mov操作
stos:是串存储指令,它的功能是将eax中的数据放入edi所指向的地址中
同时edi会增加4个字节
跳转与比较指令
jmp:无条件跳转。
jg:大于的时候跳转,通常前面有一条比较指令
jl:小于的时候跳转,通常前面有一条比较指令
jge:大于等于的时候跳转,通常前面有一条比较指令
cmp:比较,往往在jg,jl,jge条件跳转指令前面
堆栈与函数的关系
堆栈反参数从函数的外部传入到函数的内部,
堆栈中划分区域来容纳函数的内部变量
函数调用约定:
指调用者和被函数间传递参数及返回参数的方法
windows上有Pascal方式WINAPI方式(_stdcall)C方式(_cdecl_)
for循环反汇编
mov <循环变量>,<初始值>;给循环变量赋初值
jmp B;跳到第一次循环
A:;修改循环变量
……
B: cmp<循环变量>,<限制变量>;修改循环变量
jge 跳出循环
(循环体)
……
jmp A;跳回去修改循环变量
do 循环
cmp <循环变量>,<限制变量>
jl <循环开始点>
while循环
A: cmp<循环变量>,<限制变量>
jge B
(循环体)
……
jmp A
B: 循环结束了
- 汇编学习笔记【2】
- 汇编 笔记(2)
- 汇编笔记2
- 汇编笔记2
- C++反汇编笔记2
- 汇编学习笔记(2)
- 汇编学习笔记---(2)基础知识
- 汇编笔记
- 汇编笔记
- 汇编笔记
- 汇编笔记
- 汇编笔记
- 汇编笔记
- 汇编笔记
- 汇编笔记
- 汇编笔记
- 汇编笔记
- 汇编笔记
- 一些经典算法
- 了解一下IRETD/ RET/ RETF
- 浅谈JavaScript编程语言的编码规范
- [CNN Reading] Landslides leave 38 missing and scores stranded in China
- 转【linux下多进程、多线程编程】
- 汇编 笔记(2)
- 看看一些著名的软件都用什么编程语言写成
- Action script中的访问控制
- 【MD5】
- “设计模式驱动编程”
- 远程处理的双向通信问题
- 改进无损分轨文件
- DXperience之RichEditControl控件Bug解决方法
- 自绘制界面之--菜单(第一篇)