8086尋址方式
16位的8086cpu中運(yùn)算器一次最多可以處理16位的數(shù)據(jù),寄存器的最大寬度為16位,寄存器和運(yùn)算器之間的通路為16位。也就是說在8086內(nèi)部,能夠一次性處理,傳輸,暫存的數(shù)據(jù)信息最大長度是16位。
由于8086有20位的地址總線,可以傳送20位地址,尋址能力能達(dá)到1M。而8086又是16位的結(jié)構(gòu),內(nèi)部能夠一次性處理,傳輸,暫存的數(shù)據(jù)信息最大長度是16位,尋址能力僅能達(dá)到64K。所以在8086采用在內(nèi)部將兩個(gè)16位的地址合成一個(gè)20位的物理地址的方式進(jìn)行尋址。
當(dāng)8086要讀寫內(nèi)存時(shí):
- cpu相關(guān)部件提供兩個(gè)16位的地址,一個(gè)叫段地址,一個(gè)叫偏移地址
- 內(nèi)部總線將兩個(gè)地址送入一個(gè)叫地址加法器的部件中
- 地址加法器通過段地址*16+偏移地址的算法將兩個(gè)16位地址合成為一個(gè)20位的物理地址
- 地址加法器通過內(nèi)部總線將20位物理地址送入io控制電路
- io控制電路將20位物理地址送上地址總線
- 20位的物理地址被地址總線送到寄存器
比如8086要訪問123C8的內(nèi)存單元,則加法計(jì)算(16位)的工作為:1230*16+00C8 = 12300+00C8 = 123C8。當(dāng)然通過該算法生成123C8的段寄存器和偏移寄存器不是唯一的。
8086匯編的相關(guān)筆記來自 小碼哥 MJ iOS底層視頻 以及 王爽《匯編語言(第三版)》