在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM 的堆棧學(xué)習(xí)筆記

            ARM 的堆棧學(xué)習(xí)筆記

            作者: 時(shí)間:2016-10-15 來源:網(wǎng)絡(luò) 收藏

            以下是我在學(xué)習(xí)ARM指令中記錄的關(guān)于堆棧方面的知識(shí):

            本文引用地址:http://www.biyoush.com/article/201610/307380.htm

            1、寄存器 R13 在 ARM 指令中常用作堆棧指針

            2、對(duì)于 R13 寄存器來說,它對(duì)應(yīng)6個(gè)不同的物理寄存器,其中的一個(gè)是用戶模式與系統(tǒng)模式共用,另外5個(gè)物理寄存器對(duì)應(yīng)于其他5種不同的運(yùn)行模式。采用以下的記號(hào)來區(qū)分不同的物理寄存器:

            R13_

            其中,mode為以下幾種模式之一:usr、fiq、irq、svc、abt、und。

            3、寄存器R13在ARM指令中常用作堆棧指針,但這只是一種習(xí)慣用法,用戶也可使用其他的寄存器作為堆棧指針。而在Thumb指令集中,某些指令強(qiáng)制性的要求使用R13作為堆棧指針。由于的每種運(yùn)行模式均有自己獨(dú)立的物理寄存器R13,在用戶的初始化部分,一般都要初始化每種模式下的R13,使其指向該運(yùn)行模式的??臻g,這樣,當(dāng)程序的運(yùn)行進(jìn)入異常模式時(shí),可以將需要保護(hù)的寄存器放入R13所指向的堆棧,而當(dāng)程序從異常模式返回時(shí),則從對(duì)應(yīng)的堆棧中恢復(fù),采用這種方式可以保證異常發(fā)生后程序的正常執(zhí)行。

            4、有四種類型的堆棧:堆棧是一種數(shù)據(jù)結(jié)構(gòu),按先進(jìn)后出(First In Last Out,F(xiàn)ILO)的方式工作,使用一個(gè)稱作堆棧指針的專用寄存器指示當(dāng)前的操作位置,堆棧指針總是指向棧頂。

            當(dāng)堆棧指針指向最后壓入堆棧的數(shù)據(jù)時(shí),稱為滿堆棧(Full Stack),而當(dāng)堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置時(shí),稱為空堆棧(Empty Stack)。

            同時(shí),根據(jù)堆棧的生成方式,又可以分為遞增堆棧(Ascending Stack)和遞減堆棧(DecendingStack),當(dāng)堆棧由低地址向高地址生成時(shí),稱為遞增堆棧,當(dāng)堆棧由高地址向低地址生成時(shí),稱為遞減堆棧。這樣就有四種類型的堆棧工作方式,ARM 微支持這四種類型的堆棧工作方式,即:

            ◎ Full descending 滿遞減堆棧

            堆棧首部是高地址,堆棧向低地址增長。棧指針總是指向堆棧最后一個(gè)元素(最后一個(gè)元素是最后壓入的數(shù)據(jù))。

            ARM-Thumb過程調(diào)用標(biāo)準(zhǔn)和ARM、Thumb C/C++ 編譯器總是使用Full descending 類型堆棧。

            ◎ Full ascending 滿遞增堆棧

            堆棧首部是低地址,堆棧向高地址增長。棧指針總是指向堆棧最后一個(gè)元素(最后一個(gè)元素是最后壓入的數(shù)據(jù))。

            ◎ Empty descending 空遞減堆棧

            堆棧首部是低地址,堆棧向高地址增長。棧指針總是指向下一個(gè)將要放入數(shù)據(jù)的空位置。

            ◎ Empty ascending 空遞增堆棧

            堆棧首部是高地址,堆棧向低地址增長。棧指針總是指向下一個(gè)將要放入數(shù)據(jù)的空位置。

            5、操作堆棧的匯編指令堆棧類型 入棧指令 出棧指令

            Full descending STMFD (STMDB) LDMFD (LDMIA)

            Full ascending STMFA (STMIB) LDMFA (LDMDA)

            Empty descending STMED (STMDA) LDMED (LDMIB)

            Empty ascending STMEA (STMIA) LDMEA (LDMDB)

            例子:

            STMFD r13!, {r0-r5} ; Push onto a Full Descending Stack

            LDMFD r13!, {r0-r5} ; Pop from a Full Descending Stack.



            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉