中斷發生時暫存器的儲存和恢復

2021-05-22 21:23:11 字數 2226 閱讀 6970

程序在執行之前tss.esp0指向了當前程序表的

regs

末尾執行中斷之前,cpu已經把esp指向程序表的regs末尾,並且儲存了ss,esp,cs ,ip ,if暫存器

,自動操作的

麼?沒看到人工**

align    16

hwint00:        ; interrupt routine for irq 0 (the clock).

sub    esp, 4

pushad        ; ┓

push    ds    ; ┃

push    es    ; ┣ 儲存原暫存器值

push    fs    ;  ┃

push    gs    ; ┛

mov    dx, ss

mov    ds, dx

mov    es, dx

mov    esp, stacktop    ; 切到核心棧

inc    byte [gs:0]    ; 改變螢幕第 0 行, 第 0 列的字元

mov    al, eoi        ; ┓reenable master 8259

out    int_m_ctl, al    ; ┛

push    clock_int_msg

call    disp_str

add    esp, 4

mov    esp, [p_proc_ready]    ; 離開核心棧;

lea    eax, [esp + p_stacktop]

mov    dword [tss + tss3_s_sp0], eax     

;程序在執行之前 tss.esp0指向了當前程序表的

regs

末尾pop    gs    ; ┓

pop    fs    ;  ┃

pop    es    ; ┣ 恢復原暫存器值

pop    ds    ; ┃

popad       ; ┛

add    esp, 4

iretd

完成程序切換:

align    16

hwint00:        ; interrupt routine for irq 0 (the clock).

sub    esp, 4

pushad        ; ┓

push    ds    ; ┃

push    es    ; ┣ 儲存原暫存器值

push    fs    ; ┃

push    gs    ; ┛

mov    dx, ss

mov    ds, dx

mov    es, dx

;inc    byte [gs:0]    ; 改變螢幕第 0 行, 第 0 列的字元

mov    al, eoi        ; ┓reenable master 8259

out    int_m_ctl, al    ; ┛

inc    dword [k_reenter]

cmp    dword [k_reenter], 0

jne    .re_enter

mov    esp, stacktop        ; 切到核心棧

stipush    0

call    clock_handler          

;中斷裡面修改p_proc_ready,會導致tss裡面的esp值改變,

; 中斷返回時,根據tss裡面的esp值恢復暫存器的值,就會導 致  進  程切換

add    esp, 4

climov    esp, [p_proc_ready]    ; 離開核心棧;

lldt    [esp + p_ldt_sel]

lea    eax, [esp + p_stacktop]

mov    dword [tss + tss3_s_sp0], eax

.re_enter:    ; 如果(k_reenter != 0),會跳轉到這裡

dec    dword [k_reenter]    ; k_reenter--;

pop    gs    ; ┓

pop    fs    ; ┃

pop    es    ; ┣ 恢復原暫存器值

pop    ds    ; ┃

popad        ; ┛

add    esp, 4

iretd

儲存 暫存器和記憶體

計算機儲存塔狀結構,暫存器最快,記憶體其次,最慢的是硬碟 同樣是電晶體儲存裝置,為什麼暫存器比記憶體快?一 距離不同 距離不是主要因素,但是最好理解,記憶體離cpu比較遠,所以要耗費更長時間讀取。以3ghz的cpu為例,電流每秒鐘 可以振盪30億次,每次耗時大約為0.33納秒。光在1納秒的時間內,可...

暫存器和儲存器的區別

如果僅是討論cpu的範疇暫存器在cpu的內部,容量小,速度快。儲存器一般都在cpu外部,容量大,速度慢。從根本上講,暫存器與ram的物理結構不一樣。一般暫存器是指由基本的rs觸發器結構衍生出來的d觸發,就是一些與非門構成的結構,這個在數電裡面大家都看過 而ram則有自己的工藝,一般1bit由六mos...

暫存器和儲存器的區別?

儲存器在cpu外,一般指硬碟,u盤等可以在切斷電源後儲存資料的裝置,容量一般比較大,缺點是讀寫速度都很慢,普通的機械硬碟讀寫速度一般是50mb s左右。記憶體和暫存器就是為了解決儲存器讀寫速度慢而產生的多級儲存機制,從20世紀50年代開始,磁芯儲存器曾一度成為主存的主要儲存介質,但從20世紀70年代...