一.代碼 和 匯編 和 二進制之間的關系
二.復習一下計算機組成原理的知識
1.寄存器
計算機中有三個存儲
32位cpu提供的寄存器有三種類型8位 16位 32位
64位的只是32位的擴展 並且程序大多是32位
以下是32位的8個通用寄存器(有寬度)
2.MOV指令
mov eax ,1(向eax寄存器存1)
mov edx , eax(把edx里面的值存到eax)
例子: EAX:32位通用寄存器 假如FFFFFFFF 一個F(16進制)化為2進制 1111,也就是4位
所以為什么叫32(四個字節) ? 4*8=32
三.內存
1.內存
內存空間和物理內存都不是內存條!物理內存和內存條之間還有一層映射關系。
下面的話其實並不是真正的給每一個進程分了4g的內存條,等進程 真正要去寫/讀內存的時候就把4g內存映射到物理內存上去。
2.內存地址
內存太多起不了名字 只能用編號。
每一行的內存編號代表一個字節
3.mov指令向內存寫數據
與往寄存器里面寫是不一樣的 內存 eax32位 ax16位 他是自帶數據寬度的,
而內存不一樣,內存是連起來的一大片
所以 !
不同點:向內存寫的時候必須明確告訴其寬度。
byte = 1字節
word = 2字節
dword = 4字節
<1>
那么就有一個問題,就是一行的內存地址編號是一個字節。
現在村的數據是四個字節,那么可行嗎?
可行 ,它會從你指定的內存編號接着往后寫。
<2>
不可以寫成 mov dword ptr ds:[18FFFC] ,ax 寬度不一樣
<3>
記住一點 ,匯編里面絕大部分的指令是不可以從內存到內存。必須得經過寄存器。
四.內存地址的五種形式
也就是第二種形式就是先把內存存到寄存器中去了
先往寄存器寫入一個地址 然后寄存器+4,將立即數寫入(寄存器+4)后的內存地址中去
第四種形式主要就是高級語言生成的數組,匯編之后就是這樣的形式