- 数据存哪??
一个是cpu的寄存器中,
当数据量大时,还可以存内存中
1.每个应用程序都会有自己的独立的4GB空间
如图:
- 进程:运行中的程序
这里的4GB并非“真正的分了4GB内存条”,
意味着,在这个进程A中,当真正读、取某个内存时,操作系统将要用的内存映射到真正的物理内存中。 - 物理内存:不是真正的内存条,与它还有一个映射。
我们在编程时所说的“内存”就是所谓的“假的”4GB内存
1字节=8bit
1kb=1024字节
1MB=1024KB
1GB=1024MB
2.内存地址
- 内存太大没法起名字子(不像32位寄存器),所以只能编号。
当我们想从内存中存储数据,或者从内存中读取数据时,必须要用到这个编号,就像写信必须要写收信人地址一样。 - 编号也叫内存地址
内存地址(编号)指向的内存单元 大小:
一个字节
8位(十六进制)*
为什么最大内存是4GB??
---------与内存地址的数据宽度有关
{
FFFF FFFF+1(当无存储时)}*8(一个字节8位)十六进制--------->十进制X
X/8---------------整个代表的内存共有多少字节
X/8/1024-------------共有多少KB
X/8/1024/1024
X/8/1024/1024/1024
二.MOV指令
1.立即数------------》内存
mov 数据类型 ptr ds:[ 内存地址],数据
注:上式中的内存不能随意调用,必须是已申请了的。
注:
- 存的是一位:byte(对应寄存器后面的二个数字,8位—二进制)
- 二字节:word(对应寄存器后面的四个数字,16位–二进制)
- 四字节:dword(对应寄存器的八个数字,32位—二进制)
注:(上图中)
DWORD:表明存储的数据是四个字节(32位),
【22FFC4】:是一个编号,代表一个字节。
此时,内存从该编号开始连续存储。
2.寄存器—》内存
mov dword ptr ds[0022FFC4],ecx
mov word ptr ds:[0022FFC4],ax
- 已将该内存地址的数据初始化FFFFFFFF
mov byte ptr ds:[0022FFC4],AL
3.立即数----》内存
mov dword ptr ds:[0022FFC4],1234
4.汇编语言一般没有内存到内存的
三.内存地址的五种形式
- 【立即数】
- 【reg】,reg是寄存器(的数值),可以是8个通用寄存器的任意一个
MOV EBX,0022FFC4
MOV DWORD PTR DS:[0022FFC4],12345678
MOV EAX,DWORD PTR DS:[EBX]
- 【reg+立即数】
- 【reg+reg*{1,2,4,8}】
- 【reg+reg*{1,2,4,8}+立即数】
这是c语言中数组定义的常见方式