概述
常用汇编指令
一、堆栈相关的常用指令
1、PUSH: 把一个32位的操作数压入堆栈中,这个操作导致esp减4(我们认为堆栈顶部是地址小的区域),操作数成为栈顶。
2、POP: 与PUSH指令相反,这个指令是取出栈顶的操作数,导致esp加4。
3、SUB: 减法指令,第一个参数是被减数所在的寄存器,第二个参数是减数所在的存储器
4、ADD: 加法指令,原理同上
5、DAA: AL中的数:如果AL的低4位大于9或AF=1,则AL的内容加6,并将AF置1;如果AL的高4位大于9或CF=1,则AL的内容加60H,且将CF置1。
比如:
mov al,19H
add al,13H
daa
执行完前两条之后:AL=2CH,CF=0,AF=0
执行完DAA之后:AL=32H(其实在一个4位的二进制数中+6和-10的结果是一样的,如果AL低4为大于9的话,高4为其实会加一).其实就是十进制的19+13的结果.
例如2
mov al,19H
add al,19H
daa
执行完前两条之后:AL=32H,CF=0,AF=1
执行完DAA之后:AL=38H(这里就体现到+6的作用了) 结果是十进制的19+19=38
其他的例子:
mov al,92H
add al,32H
daa
执行完前两条之后:AL=C4H,CF=0,AF=0
执行完DAA之后:AL=24,CF=1,92+32=124
mov al,92H
add al,82H
daa
执行完前两条之后:AL=14H,CF=1,AF=0
执行完DAA之后:AL=74H,CF=1 92+82=174
6、RET: 返回指令,相当于跳转回调用函数的地方。ret指令用栈中的数据,修改IP的值,从而实现近转移。
CPU执行ret指令时,进行下面两步操作: (IP)=((SS)*16+(SP)) (SP)=(SP)+2; 另一种用法 ret n (n为整数)等效于:(IP)=((SS)*16+(SP)) (SP)=(SP)+2; (SP)=(SP)+n; 例如ret 4 pop ip add sp,4
ret 弹出一个参数,给ip,返回
retf 弹出2个参数,一个给 ip,一个给 cs
iref 弹出 3个参数,一个给 ip,一个给 cs ,一个个 flag标志位
他们都是返回调用点的,看你调用的时候,用的什么调用的,是 call 段内转移 ,还是call 段间转移,还是int 调用中断
7、CALL: 调用函数
二、数据传送指令
1、MOV: 数据移动,这是最简单的数据传输指令,第一个参数书移动数据的目的地,第二个参数是数据的来源。
2、XOR: 异或,这个本来是一个逻辑运算符,但是XOR eax, eax这样的指令常常用来代替MOV eax,0,好处是速度更快,占用字节更少。
3、LEA: 取得(后面的操作数)地址后放入前面的存储器中。
4、STOS: 串存储指令。为了解释这个指令,需要借助一段代码:
Mov ecx, 30h
Mov eax,0ccccccch
Rep stos dword pt res:[edi]
最后一句的功能是使指令重复执行ecx中填写的次数,将eax中的数据放入edi所指的地方。
三、跳转与比较指令
1、JMP: 无条件跳转
2、JG: 大于的时候跳转,通常前面有一个比较语句
3、JL: 小于的时候跳转,通常前面有一个比较语句
4、JGE: 大于等于的时候跳转,通常前面有一个比较语句
5、CMP: 比较,单纯的比较。
窗体顶端
最后
以上就是炙热紫菜为你收集整理的常用汇编指令的全部内容,希望文章能够帮你解决常用汇编指令所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复