1. 程式人生 > >段選擇符,段描述符,描述符表

段選擇符,段描述符,描述符表

段描述符(8位元組)存放於 GDT/LDT

段選擇符(16位) + 偏移量(32位) = 邏輯地址

段暫存器僅僅存放段選擇符,段暫存器中的段選擇符指定非程式設計段暫存器中的段描述符。

關於描述符,描述符表,段選擇符的區別。

1、描述符

     描述符是一個八位元組的組合資料組,在80286中,組內有最高2個位元組保留未用,其餘6個位元組分別儲存著程式(或資料)段所佔記憶體的長度(段限長,2個位元組)、起始的實體地址(稱段基地址,3個位元組)和訪問權(1個位元組)。
     記憶體中每段程式(或資料)均可用一個描述符來表示。與任務轉換有關的資料的段描述符稱任務描述符。
2、描述符表
     將不同程式(或資料)段的描述符在記憶體中連續排列起來,所形成的表稱為描述符表。
     由與全域性有關的程式(或資料)段的描述符組織在一塊的表稱全域性描述符表(GDT)。一個系統內只有一張GDT。存放該表的實體地址和長度的暫存器稱GDTR。
     所有中斷服務程式的描述符表稱中斷描述符表(IDT),一個系統也僅有一張IDT。
     由不涉及全域性的程式(或資料)段的描述符所組成的表稱區域性描述符表(LDT)。
3、段選擇符
     由與任務轉移有關的描述符所組成的表稱段選擇符。
     段選擇符用16位來表示,最高13位表示要使用的段在描述符表中的索引號,低3位的前兩位表示使用段的權等級,最後一位指明描述符是位於GDT中還是位於LDT中。GDT和LDT各佔用64KB記憶體,含8K個描述符。

由於一個段描述符是8位元組長,因此它在GDT或LDT內的相對地址是由段選擇符的最高13位的值乘以8得到的。

例:如果GDT在0x00020000(這個值儲存在gdtr中),且由段選擇符所指定的索引號為2,那麼相應的段描述符地址是0x00020000 + (2 * 8)= 0x00020010

相關推薦

轉發: 選擇描述暫存器

段暫存器(segement register) 段選擇符(segement selector) 段描述符(segement descriptor) 學習總結 1 段暫存器 段暫存器包括CS,SS,DS,ES,FS,GS。結構如下圖: 段暫存器包括可見部分和不可見部分。可

選擇描述描述

段描述符(8位元組)存放於 GDT/LDT 段選擇符(16位) + 偏移量(32位) = 邏輯地址 段暫存器僅僅存放段選擇符,段暫存器中的段選擇符指定非程式設計段暫存器中的段描述符。 關於描述符,描述符表,段選擇符的區別。 1、描述符      描述符是一個八位元組

ETL工具kettle的幾個小插件(字串替換選擇將字值設置為常量)

sha oracle rac 正則 com 修改字符集 繼續 kettle 輸出 繼續給大家介紹幾個小組件:一、字符串替換這個功能類似於oracle的replace函數,就是將某個字段的某些字符替換成我們給定的字符首先,選擇【輸入流字段】,【輸出流字段】自己命名(就是用來保

寫一程序刪除字串a中包含的字串b舉例 輸入a = "asdw",b = "sd" 返回 字串 “aw”;一個容易被忽略的bug

++ bug != 就會 string isempty app xxx ets 代碼如下: public class test{ public static void main(String args[]){ String test=test("sahsjkshabshwk

選擇,描述,80x86的頁定址機制

段選擇符指示著段的描述符,在段描述符中包含有定義段所用的全部資訊,包括: (1)索引欄位:是由13位組成.利用索引欄位可以從擁有8192個段描述符的段描述符表中選出任何一個段描述符來。處理機用8(8是段描述符的欄位數)乘以索引值再加上描述符的基地址(來自全域性描述符暫存器,或

抄了一個計算字串個數的程序一個很簡單的代碼。但是能看懂也能掌握使用。原諒我菜抽出一個小時看幾代碼也好

ets 也好 字符 HERE get style lan pac 字符串個數 #include<stdio.h>main(){ char string[100]; int index,word=1; char blank; gets(string); if(st

選擇

線性基 標識 不同 描述 保存 存在 偏移量 24* 線性 邏輯地址到線性地址: 邏輯地址 = 段標識符(或者叫段選擇符)16位 + 偏移量 32位 段標識符 = index + tl + rpl 其中,cpu中的段寄存器只保存段標識符,根據其中的tl 確定段描述符在GDT

linux下的select簡直太奇葩了:1024限定的不只是監聽的個數還是檔案描述的最大值注意是值

轉自:http://m.blog.csdn.net/blog/wuzili1234/12450451 我原來自以為對select就算不熟,基本原理和使用方法也略知一二了,做了一年多的伺服器程式設計,好歹知道linux下的select不支援超過1024個的描述符,好歹知道

前端js如何生成一個對象並轉化為json字

cti {} 理解 () min jquery pan i++ 2.0 一,直接上代碼 <script src="../../Content/jquery-2.0.3.min.js" type="text/javascript"></script>

JavaScript運算:遞增和遞減(++i--i 和 i++i-- 的區別)

nbsp key mic comment 包含 -- 效應 1+n com 遞增和遞減操作符直接借鑒自C,而且各有兩個版本:前置型 (遞增 ++i ,遞減 --i )和 後置型 (遞增 i++ ,遞減 i-- )。書本上對兩者的定義是:前置型應該位於要操作的變量之前,而後置

變量基本類型數據類型和運算

大於 聲明 java運算 浮點 ble 表達式 自減 ava har 變量: 一個數據存儲空間的表示 變量三要素:變量名,變量類型,變量值 變量聲明及使用: 第一步:聲明變量及根據數據類型在內存申請空間 (數據類型 變量名 int money) 第二步:賦值及將數

Python自動化開發課堂筆記【Day03】 - Python基礎(字編碼使用文件處理函數)

賦值 創建 解釋器 使用 重復 closed 操作 邏輯 默認 字符編碼使用 1. 文本編輯器如何存取文件 文本編輯器相當一個運行在內存中的進程,所以文件內容在編輯未存儲時都是在內存中的,尚未存儲在硬盤之中,在沒有保存之前,所編輯的任何文本都只是一堆字符,沒有任何邏輯上的意

mysql和mariadb中字拼接類型有兩個或多個字或者一個字和一個固定字串拼接

str1 from 連接 字符串連接 一個 cat str 拼接 str2 MySQL中concat函數 CONCAT(str1,str2,…) 1 .兩個或多個字段連接 例:字段 a,b 表 tb1 語句: select conca

javascript 對象屬性的添加刪除json對象和字串轉換方法等

star font style strong 字符串轉換 定義 obj tarray def 1:動態添加 對象屬性 var obj = new Object(); console.log (obj.username); obj.username = "haha"; con

設計一個函數將一個數字字串轉換為數字如將”1024”轉換成1024輸出

字符串 const while printf int main 轉換成 pri 一個數 #include <stdio.h>int convert(char *str){ int k=0; while(*str!=‘\0‘) {

C# 操作字在某些特定的字後面或前面添加其它字

解決方法 中醫 操作 字符 bsp ring 其它 正則 字符串 C# 操作字符串,在某些特定的字符後面或前面添加其它字符,解決方法: 字符串替換或正則表達式替換即可。 示例:string s = @"第1種方案(約6站)在 泉城廣場 坐 14路 到 按察司街北口/市立

Python讀取文本輸出指定中文(字串)

class 分享 /tmp () fun 問題 print fin 斷路器 因業務需求,需要提取文本中帶有檢查字樣的每一行。 樣本如下: 1 投入10kVB、C母分段820閉鎖備自投壓板 2 退出10kVB、C母分段820備投跳803壓板 3 退出10kVB

MySql 求一時間範圍內的每一天每一小時每一分鐘

pda join 月份 nbsp 獲取 pan 關聯 orm now() 平常經常會求一段時間內的每一天統計數據,或者每一時點的統計數據。但是mysql本身是沒有直接獲取時點列表的函數或表。下面是自己用到的一些方法,利用臨時變量和一個已存在的比較多數據(這個需要根據實際情況

tomcat正常運行一時間後tomcat異常停進程被killed

remove rss table ble 需求 nes 決定 href pru tomcat異常停,進程被killed 對應tomcat日誌如下: /application/tomcat-service-8080/bin/catalina.sh: line 386: 437