基址與分段定址 32位暫存器的變化

2021-06-21 14:28:20 字數 788 閱讀 9071

問題描述

基址、分段定址、段暫存器、32位暫存器到底有什麼聯絡呢?

段超越es:bp具體的內涵是什麼?

問題解答

分段定址、段暫存器、基址

在以前(80286),電腦的暫存器都是16位的,如我們常用的ax、bx等,但資料匯流排是24位的(記憶體16m),單用乙個16位暫存器無法定址所有位址,因此位址的表示必須用兩個暫存器或者乙個暫存器加乙個立即數,所以有了段暫存器cs、ds、ss、es,相當於在儲存空間上做了劃分,減小位址空間以便表示。用乙個16位暫存器指示段暫存器,即目的位址位於哪乙個段,再用乙個立即數做段內偏移量,以便找到此段內具體的某個位址單元,這種定址即分段定址。兩個16位暫存器加起來是32位,比資料匯流排位數寬,所以分段定址採用如下定址方式:段暫存器x10h+偏移量,這樣計算出的位址是32位的,就可以定址到所有位址,其中段暫存器x10h得到的位址就是段的基址,所以基址都是以00(16進製制)結尾的。

32位暫存器

現在的暫存器都是32位的,定址可達4g,通常大於電腦記憶體,所以沒有上述位數不夠的問題,也就不需要分段,用乙個暫存器就可以定址全部位址了。

0000:7c00

了解了分段定址,就可以知道,0000其實是段的基址,7c00是這個段內的偏移量,兩者結合得到的32位位址才是絕對位址。

es:bp

同上,es表示bp的相對偏移是以es段為基址的,尋找物理單元時應該在es段去尋找。

32位機,CPU是如何利用段暫存器定址的

32位cpu 位址線擴充套件成了32位,這和資料線的寬度是一致的。因此,在32位機裡其實並不需要採用 實體地址 段 偏移 這種位址表達方式。原來在16位機裡規定的每乙個段不大於64kb在32位機裡也不是必要的。所以,對於32位機來講,最簡單的方法就是用乙個32位數來標識乙個位元組的儲存位址,定址時只...

IA 32位暫存器基礎

eax ax ah al累加器,低十六位可以用作十六位累加器,低十六位還可以分為兩個八位暫存器。ebx ds段的資料指標 基址暫存器。和eax類似。ecx 字串和迴圈操作的 計數器。和eax類似 edx i o指標 資料計數器。和eax類似。add sub xor or指令可以應用於這四個暫存器。用...

64位暫存器與彙編

64位暫存器分配的不同 順帶提乙個小問題,64位的彙編 在ret之前可能會加一句rep,這裡的rep沒有實際意義,只是出於amd處理器的原因,避免jmp所到達的地方直接就是ret,這樣會使得處理器執行更快一些。但是現在的棧幀經常是固定大小的,在函式呼叫的最開始就被設定,在整個呼叫期間,棧頂指標保持不...