常用汇编指令

常用汇编指令

一、堆栈相关的常用指令

1PUSH: 把一个32位的操作数压入堆栈中,这个操作导致esp4(我们认为堆栈顶部是地址小的区域),操作数成为栈顶。

2POP: PUSH指令相反,这个指令是取出栈顶的操作数,导致esp4

3SUB: 减法指令,第一个参数是被减数所在的寄存器,第二个参数是减数所在的存储器

4ADD: 加法指令,原理同上

5DAA: AL中的数:如果AL的低4位大于9AF=1,则AL的内容加6,并将AF1;如果AL的高4位大于9CF=1,则AL的内容加60H,且将CF1

比如:

mov al,19H

add al,13H

daa

执行完前两条之后:AL=2CH,CF=0,AF=0

执行完DAA之后:AL=32H(其实在一个4位的二进制数中+6-10的结果是一样的,如果AL4为大于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=192+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 调用中断

7CALL: 调用函数

二、数据传送指令

1MOV: 数据移动,这是最简单的数据传输指令,第一个参数书移动数据的目的地,第二个参数是数据的来源。

2XOR: 异或,这个本来是一个逻辑运算符,但是XOR eax eax这样的指令常常用来代替MOV eax0,好处是速度更快,占用字节更少

3LEA: 取得(后面的操作数)地址后放入前面的存储器中。

4STOS: 串存储指令。为了解释这个指令,需要借助一段代码:

Mov        ecx, 30h

Mov        eax,0ccccccch

Rep         stos dword pt res:[edi]

最后一句的功能是使指令重复执行ecx中填写的次数,将eax中的数据放入edi所指的地方。

三、跳转与比较指令

1JMP: 无条件跳转

2JG: 大于的时候跳转,通常前面有一个比较语句

3JL: 小于的时候跳转,通常前面有一个比较语句

4JGE: 大于等于的时候跳转,通常前面有一个比较语句

5CMP: 比较,单纯的比较。

窗体顶端

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值