汇编达人视频学习4(MOVS、STOS、REP、PUSH、POP、JMP、CALL、RET指令)


title: 汇编达人视频学习4
date: 2021年8月3日 09点35分
tags: 汇编达人
categories: 汇编达人

17、常用汇编指令(MOVS指令、STOS指令)

1、MOVS指令:移动数据 内存 - 内存

在这里插入图片描述

从内存到内存的指令

EDI:地址编号,要把这个数据复制到哪里去。

ESI:地址编号,要复制的数据在哪里

MOVS指令执行一次,EDI 和 ESI 的地址编号,会自加。

EFL是标志寄存器,它是32位的。在它的第十位,是DF方向位,如果DF位是0,那么执行一次MOVS之后,EDI,ESI就自加1 2 4,如果DF位是1,那么执行一次MOVS之后,EDI,ESI就自减1 2 4,加减多少取决于是byte word dword

2、STOS指令

将AL,AX,EAX的值存储到【EDI】指定的内存单元

在这里插入图片描述

同样的,EDI在执行完STOS指令之后,会自加或者自减,这也同样取决于DF位是1 还是 0

3、REP指令

按计数寄存器(ECX)中指定的次数重复执行字符串指令

在这里插入图片描述

18、堆栈相关的指令

1、什么是堆栈

在这里插入图片描述

别的内存需要程序员去申请,堆栈是操作系统分配好的。

怎么查看堆栈的范围和地址呢。

在这里插入图片描述

首先在寄存器窗口,可以看到有一个FS 00AFE000的地址,这个地址就是操作系统为这个程序分配的堆栈。

我们在内存窗口通过dd 00AFE000 就可以查看到,堆栈。也就是四块窗口,反汇编窗口,寄存器窗口,内存窗口,堆栈窗口。

在右下角的就是堆栈窗口。

在这里插入图片描述

在这里插入图片描述

堆栈窗口的内存地址 从00D3FF5C 到 00D40000

2、ESP是栈指针寄存器

ESP是栈指针寄存器,ESP中存储了当前的堆栈用到哪里了,需要注意的是,堆栈内存空间,是从大地址往小地址用

3、堆栈的使用

1.存储数据

2.修改栈顶指针

利用命令mov dword ptr ds:【0x18ff88】,1 //把1 存放到堆栈里面

sub ESP,8 //把ESP的值减去8个,因为刚刚用了8个

需要注意的是,当用完堆栈之后,需要让ESP指向现在的栈顶,原因是如果不指向栈顶,后面程序可能会把你写的数据,覆盖掉。

4、PUSH指令

在这里插入图片描述

注意不要只记住指令的格式,而是需要去明白它真正的含义

5、pop指令

在这里插入图片描述

19、修改EIP的指令

EIP里面存放的是下一次CPU执行的地址。

1、JMP指令

在这里插入图片描述

JMP指令,修改EIP的地址。

2、CALL指令

在这里插入图片描述

注意,其他代码单步执行的时候是F8,而遇到CALL指令的时候,单步执行需要按F7

CALL指令所做的事情:

1.把CALL指令后面的那个地址,存到了EIP里面。

2.会把当前CALL指令的下一行地址,存到堆栈中。

3.ESP的值减4

3、RET指令

在这里插入图片描述

RET指令做的事情:
1.把当前栈顶的这个值,放入EIP里
2.同时栈顶指针加4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值