重新載入gdt

2021-06-18 02:35:22 字數 1758 閱讀 2557

**如下:

#define descriptor(base,lim,attr)\

.word lim&0xffff;\

.word base&0xffff;\

.byte (base>>16)&0xff;\

.word ((lim>>8)&0xf00)|(attr&0x0f0ff);\

.byte ((base>>24)&0xff)

#define gate(selector,offset,pcount,attr)\

.2byte (offset&0xffff);\

.2byte (selector);\

.2byte (pcount&0x1f)|((attr<<8)&0xff00);\

.2byte ((offset>>16)&0xffff)

da_32=0x4000 //32位模式

da_limit_4k=0x8000 //顆粒度為4096

da_drw=0x92 //資料段可讀可寫

da_cr=0x9a //可讀可執行

da_c = 0x98

setupseg = 0x9020

setupaddr = setupseg<<4

da_386cgate = 0x8c

da_386igate = 0x8e

da_pl0 = 0x00

.text

.globl start/*程式從start處開始執行*/

.code32

start:

movl $0x20,%eax

mov %ax,%ds //因為ds是資料段暫存器,所以要載入乙個資料段,否則會發生異常(可以試試0x08描述符)

mov %ax,%es

mov %ax,%ss

mov $0xffff,%esp

/*載入gdtr即將全域性描述符表gdt的首位址和gdt的界限賦給gdtr暫存器*/

lgdt gdtptr

//lidt idtptr

movl $0x20,%eax

mov %ax,%ds

mov %ax,%es

mov %ax,%ss

mov $0xffff,%esp

ljmp $0x8,$label_seg_code32

label_seg_code32:

.align 32

.code32

movw $0x10,%ax

movw %ax,%gs

movl $((80*12+79)*2),%edi/*第12行,79列*/

movb $0x0c,%ah/*高四位表示黑底,低四位表示紅字*/

movb $'s',%al/*顯示的字元*/

movw %ax,%gs:(%edi)

loop1:/*無限迴圈*/

jmp loop1

第30行要特別主要,因為ds是資料段暫存器,所以要載入乙個資料段,否則會發生異常(可以試試0x08描述符),所以我們要在setup中將descriptor_systm_data :改為乙個資料段:descriptor_systm_data :descriptor(0x0,0xffffffff,da_drw)。

oracle 重新載入庫

今天oracle突然連線不上了,startup 命令啟動的時候報錯 如下,大概的意思是 init.ora 有問題了找不到了。sql startup 查了半天,最後終於找到辦法。解決辦法如下 在到oracle admin orcl pfile 裡面有乙個 init.ora.的檔案,這個是乙個啟動的配置...

Supervisor重新載入配置

一 新增好配置檔案後 二 更新新的配置到supervisord vb view plain copy supervisorctl update 三 重新啟動配置中的所有程式 vb view plain copy supervisorctl reload 四 啟動某個程序 program name 你...

Supervisor重新載入配置

1 更新新的配置到supervisord supervisorctl update 2.重新啟動配置中的所有程式 supervisorctl reload 3.啟動某個程序 program name 你配置中寫的程式名稱 supervisorctl start program name 4.停止某一...