彙編之建立堆疊

2021-08-24 18:17:11 字數 2121 閱讀 5444

;定義出所有處理器模式的值,為後面切換處理器做準備

cpu_user_mode    equ    (0x10)

cpu_fiq_mode        equ    (0x11)

cpu_irq_mode        equ    (0x12)

cpu_svc_mode        equ    (0x13)

cpu_abt_mode        equ    (0x17)

cpu_und_mode        equ    (0x1b)

cpu_sys_mode        equ    (0x1f)

;接下來設定一下堆疊的棧底和堆疊的大小

;系統模式

stack_sys_addr    equ    (0x33ff8000)    

stack_sys_size    equ    (1024)

;stack_abt_addr    equ    (stack_sys_addr - stack_sys_size)

stack_abt_size    equ    (1024)

;未定義模式

stack_und_addr    equ    (stack_abt_addr - stack_abt_size)

stack_und_size    equ    (1024)

;快中斷模式

stack_fiq_addr    equ    (stack_und_addr - stack_und_size)

stack_fiq_size    equ    (1024)

;中斷模式

stack_irq_addr    equ    (stack_fiq_addr - stack_fiq_size)

stack_irq_size    equ    (1024 * 20)    ;預設20k給中斷

;管理員模式

stack_svc_addr    equ    (stack_irq_addr - stack_irq_size)

stack_svc_size    equ    (1024 * 20)

export    stack_init

area  stack, code, readonly    ;定義啟動**區域

code32

stack_init    proc

;切換處理器,要先儲存cpsr,只要改變c控制域

mrs    r6, cpsr

bic    r6, #0x1f        ;把最低五位清零,方便後面設定值

;切換到sys模式,設定sys和usr的棧底

orr    r0, r6, #cpu_sys_mode    

msr cpsr_c, r0

ldr sp, =stack_sys_addr    ;設定堆疊指標

;切換到abt模式,設定abt的棧底

orr    r0, r6, #cpu_abt_mode    

msr cpsr_c, r0

ldr sp, =stack_abt_addr    ;設定堆疊指標

;切換到und模式,設定und的棧底

orr    r0, r6, #cpu_und_mode    

msr cpsr_c, r0

ldr sp, =stack_und_addr    ;設定堆疊指標

;切換到fiq模式,設定fiq的棧底

orr    r0, r6, #cpu_fiq_mode    

msr cpsr_c, r0

ldr sp, =stack_fiq_addr    ;設定堆疊指標

;切換到irq模式,設定irq的棧底

orr    r0, r6, #cpu_irq_mode    

msr cpsr_c, r0

ldr sp, =stack_irq_addr    ;設定堆疊指標

;切換到svc模式,設定svc的棧底

orr    r0, r6, #cpu_svc_mode    

msr cpsr_c, r0

ldr sp, =stack_svc_addr    ;設定堆疊指標

bx    lr    ;返回

endp

end

彙編之堆疊

當我們看了暫存器的詳解後,及了解算術中的變數,下面我們來看一下,在8086cpu中一些計算法則規則的講解。先來看一下記憶體中字的儲存 傳送。字儲存 cpu中,用16位暫存器來儲存乙個字。高8位存放高位位元組,低8位存放低位位元組。由於記憶體單元是以位元組單位,則乙個字需要兩個連續的記憶體單元來存放。...

彙編之函式 堆疊傳參

函式就是一系列指令的集合,為了完成某個會重複使用的特定功能。比如 mov eax,1 mov ecx,1 就相當於乙個函式 指令的集合 1 使用jmp來執行函式 2 使用call來執行函式 以四條指令向普通暫存器儲存值為例 call執行前 call執行後 f8 可以看到call指令把當前指令的下一條...

組合語言資料傳送指令之堆疊操作指令

處理器通常用硬體支援堆疊 stack 資料結構,它是乙個按 先進後出 first in lastout,filo 訪問原則組織的儲存區域,也可以說是 後進先出 last in first out,lifo 訪問原則。堆疊具有兩種基本操作,對應兩條基本指令 資料壓進堆疊操作對應進棧指令push 資料彈...