偏移量
偏移量
計算機彙編語言中的偏移量定義為:把存儲單元的實際地址與其所在段的段地址之間的距離稱為段內偏移,也稱為“有效地址或偏移量”。偏移量是16-bit的,因此,一個段是64KB。偏移量就是程序的邏輯地址與段首的差值。在十六進位下就是4位。偏移量存在通用寄存器中,段地址則存在段寄存器中。內存被分割成段,並且,操作內存時,需要指定段和偏移量。最初的設計中,其中一個寄存器只有4-bit有效,然而為了簡化程序,兩個寄存器都是16-bit有效,並在執行時求出加權和來標識20-bit地址。
目錄
段地址左移四位,與有效地址相加,就構成了
邏輯地址。一般而言,段地址是cpu自己獨立編製的,但是偏移量是程序員編寫的。偏移量就是程序的邏輯地址與段首的差值。
在早期的8086中
地址線是20位的,而段地址是16位。在十六進位下就是4位。這樣一個
段寄存器就不能完整的描述出內存的地址。所以就和
通用寄存器配用。偏移量存在通用寄存器中,段地址則存在段寄存器中。而地址首的五位(十六進位下,二十地址線是五位)有個特點,即末尾總是零,所以就取前四位當做段地址。正好是段地址的存儲空間大小。所以在上圖中,按照地址存儲時的分法,倒過來組合,即左移四位(二進下,十六進位是一位。),比如段地址為1001H(H十六進位之意),左移一位,即補零變為10010,假設
偏移地址是1010,則實際物理地址就是11100了。形象來說,段地址是頭,偏移量是實際位置相對頭的位置。
在
實模式中,內存比
保護模式中的結構更令人困惑。內存被分割成段,並且,操作內存時,需要指定段和偏移量。
段-
寄存器這種格局是早期硬體電路限制留下的一個傷疤。
地址匯流排在當時有20-bit。然而20-bit的地址不能放到16-bit的寄存器里,這意味著有4-bit必須放到別的地方。因此,為了訪問所有的內存,必須使用兩個16-bit寄存器。
這一設計上的折衷方案導致了今天的段-偏移量格局。
偏移量是16-bit的,因此,一個段是64KB。下面的圖可以幫助理解20-bit地址是如何形成的:
段-偏移量標識的地址通常記做 段:偏移量 的形式。
例如:
線切割工藝中,計算鉬絲偏移量,即鉬絲的直徑.