32位汇编基础_内存_每个应用进程都会有自己独立的4GB内存空间
1、每個應(yīng)用進程都會有自己獨立的4GB內(nèi)存空間
?
這句話很多人聽起來可能會很矛盾很不解。
例如,我的電腦只有2GB的內(nèi)存,打開個軟件機會占用4GB內(nèi)存,而我的電腦內(nèi)存只有2GB,顯然不夠用,但是為什么程序還能在我的電腦上流暢運行呢?因為程序占用的這4GB內(nèi)存是一個空頭支票,知識口頭上說給你4GB內(nèi)存,其實沒有全部給你,而是你用到多少就會從物理內(nèi)存中給你多少。
2、內(nèi)存地址
內(nèi)存地址不像寄存器那樣只有幾個,內(nèi)存地址有非常多所以起名字的時候都是用編號,每塊內(nèi)存地址都有其唯一的編號,就像寄信的地址一樣,我們滅此用到這塊內(nèi)存時都會根據(jù)它的地址去尋找這塊內(nèi)存。
每個編號(內(nèi)存地址)對應(yīng)的內(nèi)存塊的容量最少是8位,一個字節(jié)。
一個內(nèi)存地址有32位。像0x00000000,是由8個16進制的數(shù)組成,1個16進制的數(shù)對應(yīng)著4個2進制的位,所以4x8=32,一個內(nèi)存地址有32位。
我們來算一下32位的內(nèi)存空間有多大:
內(nèi)存地址一共有多少個(包括0x00000000) FFFFFFFF+1=100000000
16進制內(nèi)存空間: 800000000
換算成十進制 Bit: ?? 34359738368
Byte: ? 4294967296
KB: 4194304
MB: 4096
GB: 4
現(xiàn)在你可以知道,32位的程序最大就是尋址空間就是4GB,所以每個程序占用4GB的內(nèi)存空間。
向內(nèi)存中存放數(shù)據(jù)
MOV? 指令
mov指令移動數(shù)據(jù)時要保證左右兩邊的數(shù)據(jù)寬度是一樣的。
絕大部分指令是不能把數(shù)據(jù)從內(nèi)存移動到內(nèi)存的。
(1)、立即數(shù)到內(nèi)存
?? mov byte ptr ds:[0146FCF4],1
? ? 將立即數(shù)1,寫入內(nèi)存地址為0146FCF4 的地方
mov :指令
byte:寫入數(shù)字的大小(1個字節(jié))?? word:2個字節(jié) dword:4個字節(jié)
ptr ds:[] :寫入內(nèi)存的哪個地址
1??? :要寫入的數(shù)據(jù)
?
(2)、寄存器到內(nèi)存
mov dword ptr ds:[0146FCFC],esp
? 將esp寄存器里面的值寫入內(nèi)存地址為014FCFC的內(nèi)存空間
?
?
(3)內(nèi)存到寄存器
? mov esp,dword ptr ds:[0x0146FCF8]
? 將內(nèi)存中的值存入寄存器。
?
轉(zhuǎn)載于:https://www.cnblogs.com/chuijingjing/p/9266959.html
總結(jié)
以上是生活随笔為你收集整理的32位汇编基础_内存_每个应用进程都会有自己独立的4GB内存空间的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 提升命令行效率的Bash快捷键
- 下一篇: 一些意想不到的小bug。