• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    linux-0.0.1版中IDT表項設置分析

    發布: 2007-7-04 12:06 | 作者: admin | 來源:  網友評論 | 查看: 49次 | 進入軟件測試論壇討論

    領測軟件測試網
      c&p from linuxsir
      
      _set_gate()宏在文件include/asm/system.h中:
      #define _set_gate(gate_addr,type,dpl,addr) \
      __asm__ ("movw %%dx,%%ax\n\t" \
      "movw %0,%%dx\n\t" \
      "movl %%eax,%1\n\t" \
      "movl %%edx,%2" \
      : \
      : "i" ((short) (0x8000+(dpl<<13)+(type<<8))), \
      "o" (*((char *) (gate_addr))), \
      "o" (*(4+(char *) (gate_addr))), \
      "d" ((char *) (addr)),"a" (0x00080000))
      這里共輸入5個數據(這里沒有輸出部),%1與gate_addr結合,%2與
      (gate_addr+4)結合,它們都是內存單元;先將%%dx的低16位移入%%ax的低16位
      (注意%%dx與%%edx的區別)。這樣,在%eax中就形成了所需要的中斷門的第一個
      長整數,其高16位為_KERNEL_CS,而低16位為addr的低16位。接著把第一個輸入
      立即數(0x8000+(dpl<<13)+(type<<8)裝入%%edx的低16位。這樣,%%edx中高16
      位為addr的高16位,而低16位的P位為1(因為是0x8000),DPL位段為DPL(因為
      dpl<<3),而D位加上類型位段則為type(因為type<<8),其余各位皆為0。這就形
      成了中斷門中的第2個長整數。然后,將%eax 寫入*gate_addr,而%%edx寫入
      *(gate_addr+4)。呵呵,效率高,但難得讀懂。但對于像設置IDT表項一類并不
      是平凡發生的操作,這樣做是否值得犧牲可讀性。。。(我想也沒有多少人愿意
      讀這樣很底層的東東,更談不上維護了)

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>