組合語言學習筆記 為考試過級

2022-03-31 10:34:56 字數 1297 閱讀 4432

先講講計算機單位概念吧:

計算機最小單位是bit,也就是乙個二進位制位(只有0或1的表示),相當於一根導線,電有正負級,正級為0 負級為 1.  但在記憶體單元中,我們是按字(byte)節來形容乙個單元的,也就是說乙個記憶體單元表示8個bit的連續空間.

8bit=1byte,通常也會這樣標記 8b=1b  byte用大寫b表示。     1024byte=1kb      1024kb=1mb      1024mb=1gb       1024gb=1tb

8088 屬於8位結構,8086 是16 位結構  也是指一次性只能處理16個bit的資料,2個位元組(byte).

現只講8086 cpu:

8086雖然是16位結構,但它的位址總結卻是20位(相當於有20根位址導線,用來傳送位址資訊的,以後會講的,先別急) 那問題來了,20位位址匯流排能表示多大數字呢?

答案是1m。我們來分析:

1根資料線能表示0,1 兩種狀態,2根能表示 2^2字次=4 如(00,01,10,11),3根2^3次方=8 依次類推 16根 2^16次方=65536    20根 2^20次方1048576。   其實以上這些數就表示20位位址匯流排能表示出1048576多個記憶體單元(byte)。由於-個記憶體單元裡可以放8bit,也就是乙個位元組。因此, 20位位址匯流排的按位元組算,最大能訪問1048576除1024byte=1024kb=1mb的記憶體大小。再深一步理解,也就指8086的cpu電腦所配製的記憶體容量最大只能是1mb大小,    如果配置現在的1g記憶體,那就是殺雞用牛刀,太浪費了。

所以,8086cpu是16們結構,也就指一次性只能傳送2個位元組,但位址總結卻有20位,如何實現一次性傳送20位的位址呢? 所以8086cpu在設計時考慮了解決方案。用換算的方式來解決。

好,我們來詳細分析這個公式:

正常情況下我們習慣用10進製來表示乙個數,如果想讓乙個數進一位的話,我們通常是在這個數上*10  (10*10=100)那16進製制想進一位也是一樣*16.    好,看公式,為什麼要段位址*16呢?就是想進一位,(有點廢話)。 由於cpu只能表示2個位元組,所以以16位的表示範圍就只能在 0000h~ffffh之間,這裡h表示16進製制符號,不用我說吧。如果要表示成20位,所以要進一位。好,再回過頭來看cpu是如何處理的,段位址先傳給cpu 再把偏移位址傳給cpu ,cpu再用以上公式計算得出乙個20位的位址,這個位址就是要訪問的記憶體位址。計算方式如下圖

1000h*16=10000h

+    0001h

結果 10001h

那麼計算出的10001h就是20位的實體地址,說到這裡也許會出現很多疑問,沒關係,下次我會深入講解每個問題,以上都是本人遇到的所有困惑,後來深入深理後才得知。

組合語言學習筆記

學習參考資料 大灰狼 講彙編 資料匯流排,位址匯流排,控制匯流排。位址匯流排有多少條就決定了cpu最大的記憶體使用量。80386有32位位址匯流排,所以它的定址能力就是4g.暫存器 通用暫存器,段暫存器,ax暫存器 通用暫存器,存放資料。高位位元組ah,低位位元組al。實體地址表示方法 位址加法器,...

組合語言學習筆記

cs ip是指向程式執行的位置 code segment ds 儲存記憶體中取資料的位址,data segment ss sp是指向堆疊的位置 stack segment cx 裡儲存的是loop執行的標誌 loop執行時,cx cx 1,若此時cx裡值為0,則跳出loop,否則繼續loop 初始 ...

組合語言學習筆記

編譯下面的程式,生成列表檔案,觀察標號在機器碼中變成了什麼?小組中的同學都說一說,說出你看到了什麼,說出你的疑問,讓小夥伴們一起解決。下面是程式 這個程式的功能沒有意義,只用於觀察程式中的標號 assume cs codesg,ds datasg datasg segment a db 1,2,3,...