汇编(三)存储模式和指令拓展
2021/4/22 22:56:09
本文主要是介绍汇编(三)存储模式和指令拓展,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
存储模式和汇编指令
文章目录
- 存储模式和汇编指令
- 前言
- 存储模式
- 利用DTdebug判断程序存储模式
- movs指令与stos指令
- MOVS指令
- STOS指令
- REP指令
- 自评
前言
本文涉及计算机存储模式,DTdebug对存储方式的实验。
以及MOVS、STOS、REP指令的介绍和演示;
存储模式
分为:大端模式和小端模式;
大端模式:数据低位在高位,数据高位在低位;
详细解释就是,数据的高位字节存放在内存的低地址端,数据的高位字节存放在内存的高地址端;
内存地址的低位到高位位就是从小到大;比如下面四个地址就是从低位到高位:
地址低位 | 地址高位 | ||
---|---|---|---|
0x11 | 0x12 | 0x13 | 0x14 |
小端模式;数据低位在低位,数据高位在高位;
通过实例来看一下:
假设,要将0x1A2B3C4D以大端模式存入上例,那么结果就是:
MOV DWORD PTR DS:[0x00000011]
地址低位 | 地址高位 | ||
---|---|---|---|
0x11 | 0x12 | 0x13 | 0x14 |
1A | 2B | 3C | 4D |
数据高位 | 数据低位 |
以上就是大端存储的示范。
至于为什么存放是从1A开始而不是1开始。是因为以字节为单位进行的,1A是16进制,刚好是二进制的八位,也就是一字节。
DTdebug使用
在上一篇文章里只简单介绍了DTdebug的不同窗口,并没有做详细使用介绍。
在dTdebug的主界面左下角,有一个命令栏,可以进行一系列操作,比如查询一个地址当前的状态:
并不是所有的地址都可以访问,只有已经被分配的地址才可以通过这个方式查看。也就是说,在栈窗口中出现的地址都是可以访问的。
db 18FF9C //db就是字节,查看也是以一个字节查看 //两个字节就是dw //四个字节就是dd
利用DTdebug判断程序存储模式
1、使用mov指令往内存中存入数据:
MOV DWORD PTR DS:[3DFFD88],1234567
2、使用命令查找内存,以字节搜索
db 3dffd88
3、将内存位和数据对比:
3DFF88 | 3DFF89 | 3DFF8A | 3DFF8B |
---|---|---|---|
6 7 | 4 5 | 2 3 | 01 |
经过实验可以得出,这个程序是使用小端存储模式,实际上基本所有的pc端都采用的是小端存储,手机大部分采用的是大端存储。
movs指令与stos指令
MOVS指令
movs:实现内存与内存之间的数据传递,mov指令只能实现寄存器与内存的数据传递无法实现内存与内存。
MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI] //移动一个字节也就是八位 MOVS WORD PTR ES:[EDI],WORD PTR DS:[ESI] //移动两个字节,十六位 MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI] //移动四个字节,三十二位
movs指令存储一字节:
提前更改好了ESI(数据来源)和EDI(存储地址),当然也可以用mov指令存入。
此刻堆栈中数据:
F8执行此行命令后结果:
因为movs指令中指定的宽度是byte,所以只复制了一字节内容。即图中的78。
下面再放一张两字节(WORD)的效果图,其余就不放了,占篇幅。
两字节,就是图中的5678.
STOS指令
stos:将寄存器EAX中的数值传递到EDI所指的地址中,并且受标志寄存器EFL中DF位(第 十位)的影响,edi中的地址也会随之改变。具体变化与传递数值宽度有关。这个放在后面单独写一篇。
上图为标志寄存器不同位的意义。
STOS BYTE PTR ES:[EDI] STOS WORD PTR ES:[EDI] STOS DWORD PTR ES:[EDI]
和movs一样,能对不同宽度的数据进行复制移动。效果如下图:
REP指令
REP:rep指令常和串传送指令搭配使用
功能:根据寄存器ECX的值(十六进制),重复执行后面的指令。10就是执行16次.
MOV ECX,4 //将4存入ECX,即rep指令执行次数 MOV EDI,0AFF9F0 //将目标地址存入EDI REP STOS DWORD PTR ES:[EDI] //将EAX数据复制到EDI指向地址
这三条指令的效果如图,为了更加清晰我将EAX中数据改为了123456789;
自评
学习总耗时:两天零散时间以及空课。
学习效率80分吧,总体上还不错,应该继续努力。
接下来要让自己静下来,提高效率。
目标:堆栈
加油!即使是如此愚蠢的我,也能够成为神明!
这篇关于汇编(三)存储模式和指令拓展的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南