組合語言暫存器記憶體訪問筆記

2021-07-03 13:55:52 字數 1951 閱讀 4500

cpu記憶體方式 字在儲存器的儲存

記憶體中字的儲存

mov指令

mov bx,1000h //將資料送入暫存器中

mov ds,bx //將乙個暫存器的內容送入另外乙個暫存器中

mov [0],al //將儲存器內容送入記憶體

mov 指令中 的說明操作物件是乙個記憶體單元, 中的 0 說明這個記憶體單元的偏移位址是 0 ,它的段地 址預設放在 ds中,指令執行時, 8086cpu 會自動從 ds 中取出。 mov bx ,1000h mov ds ,bx 若要用 mov al,[0]完成資料從 1000:0 單元到 al 的傳送,這條指令執行時, ds 中的內容 應為段位址1000h,所以在這條指令之前應該將1000h 送入 ds 。

如何把乙個資料送入暫存器呢?我們以前用類似 「mov ax.l」 這樣的指令來完成,從 理論上講,我們可以用相似的方式: mov ds,1000h ,來將1000h 送入 ds 。可是,現實並 非如此, 8086cpu 不支援將資料直接送入段暫存器的操作,也是乙個段暫存器,所以 mov ds,1000h 這條指令是非法的。

那麼如何將 1000h 送入 ds>呢?只好用乙個暫存器來進 行中轉,即先將 1000h 送入乙個一般的暫存器,如 bx ,再將bx 中的內容送入 ds。

為什麼 8086cpu 不支援將資料直接送入段暫存器的操作?這屬於 8086cpu 硬體設計 的問題,我們只要知道這一點就行了。

ds段暫存器可以為0000嗎?

段位址*16+偏移位址=實體地址

內部位址加法器的目的是為了獲取實體地址,另外是為了位址匯流排匹配,達到通過內部位址加法器運算之後能夠找到實體地址,達到充分利用位址匯流排,提高定址能力

64位cpu記憶體條支援超過4g,那是因為64 位cpu定址能力比較大,給記憶體條分配的空間比較多,32位cpu只能給記憶體條分配4g,那麼是因為cpu定址能力稍微弱,除了給記憶體分配之外,還要給視訊記憶體,等其他裝置分配邏輯位址

64位cpu並不是說位址匯流排是64根,而是說的是處理資料的能力是64位

32位處理器intel從奔騰pro amd從速龍加入pae,將位址擴充套件到了36位。 64位處理器intel是40位。(intel

datasheet寫的39-bit guest physical address and host physical address

widths)amd貌似也是40位,family 15h沒找到。

補充:安騰的話是50位(查於安騰9350 ),power sparc arm等未查。

一般處理器多少位是指的暫存器的長度,當然資料線需要與之相同,位址線則不需要與之相等的。

下面是王爽彙編中的解釋

我們說 8086cpu 的上一代 cpu(8080 、8085)等是 8 位機,而 8086 是 16 位機,也可以說 8086 是 16 位結構的 cpu 。那麼什麼是16 位結構的 cpu 呢?

概括地講,16 位結構 (16 位機、字長為 16 位等常見說法,與 16位結構的含義相同) 描述了乙個 cpu 具有下面幾方面的結構特性。

• 運算器一次最多可以處理 16 位的資料;

• 暫存器的最大寬度為16 位:

• 暫存器和運算器之間的通路為 16 位。

組合語言 暫存器 記憶體訪問

記憶體中字的儲存 cpu中,用16位暫存器來儲存乙個字,乙個字要用兩個連續的記憶體單元來存放,這個字的低位位元組存放到低位址單元中,高位位元組存放在高位址單元中。假如用0 1兩個記憶體單元存放乙個字,這兩個單元看作乙個起始位址為0的字單元。ds和 address 8086cpu中有乙個ds暫存器,通...

組合語言 暫存器(記憶體訪問)

在cpu中,用16位來儲存乙個字,高8位存放高位元組,低8位存放低位位元組。在記憶體中時,由於記憶體單元是位元組單元,剛乙個字要用2個位址連續的記憶體單元來存放,字的低位位元組存在低位址單元.字單元 存放乙個字型資料 16位 的記憶體單元,由兩個位址連續的記憶體單元組成,高位址記憶體單元中存放字型資...

組合語言 暫存器(記憶體訪問)

暫存器 記憶體訪問 字的儲存,乙個字占用兩個位元組,在記憶體單元中儲存要用兩個位址連續的記憶體單元來存放 低位位元組放在低位址單元中,字單元,即兩個位址連續的記憶體單元 ds和 address ds暫存器通常用來存放要訪問資料的段位址 mov al,0 mov al,ds 0 資料訪問的段位址預設d...