x86汇编之内存

        在上一篇文章中介绍了32位的通用寄存器,这篇文章将来说一说内存。

        首先,我们说的是什么内存,是运行内存吗?是储存吗?都不是。


什么是内存?

        我们说的内存是一个概念:计算机在运行一个程序时,会给这个程序分配4GB的内存,这个内存和物理上的内存不一样,他是一个范围,应用程序在运行时不断申请内存,然后再分配给它物理上的内存,分配的内存不断增大,到4GB为止。

        因此即使你的点脑只有2g内存,他还是会分给每个应用4g的内存,因为它只是一个空头支票。

        而我们在进行数据的操作时,只依靠寄存器是远远不够的,寄存器数量少,可以储存的内容有限,而实际程序可能需要同时存储很多东西,这时就用到了内存。

        内存是一片连续的存储单位,他们很很多,因此我们不能像寄存器一样给它取名字,所以我们用一串数字来表示他,这个数字也叫内存地址

        那么32位的一个内存占用多大的空间呢?这里举一个例子:0x00000000,这是一个32位的内存地址,那么它的宽度就是4个字节。为什么是4字节呢?因为0x00000000代表的是8个16进制数,而一个16进制数要4个二进制数,因此它代表64个二进制数,即64个0/1。8个0/1为一字节,因此一个32位的内存地址占4字节


 内存有什么用法?

 对内存的操作和对寄存器的操作差不多,有以下几个

1.立即数到内存

2.寄存器到内存

3.内存到寄存器

4.内存到内存(很少见,以后讲)

立即数到内存:

与到寄存器的方法不同,立即数到内存写法如下:

mov dword(储存类型) ptr ds[0x00000000](可用内存地址),存放的数据(注意宽度要与前面的类型相符)

 比如:mov byte ptr ds[0x000000AF],03

前面规定了byte类型,因此移动进去的数据也要为byte的长度。

 寄存器到内存:

与立即数到内存语法一样,只是要注意寄存器的宽度也要与前面规定的储存类型相同。

mov dword(32)位 ptr ds[0x000000AF],eax(32位)

内存到寄器:

也是很相似,如下:

mov eax,dword ptr ds[0x000000AF]

至于内存到内存的指令很少,我们先不说。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部