<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM微處理器程序狀態(tài)寄存器

ARM微處理器程序狀態(tài)寄存器

作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò ) 收藏

寄存器 15 (26-bit 模式):

R15 構造如下:
Bit  31  30  29  28  27  26  25------------2  1  0N   Z   C   V   I   F    程 序 計 數 器  S1 S0
標志的意義:
N  Negative        如果結果是負數則置位Z  Zero            如果結果是零則置位C  Carry           如果發(fā)生進(jìn)位則置位O  Overflow        如果發(fā)生溢出則置位I  IRQ             中斷禁用F  FIQ             快速中斷禁用S1 和 S0 是處理器模式標志:S1   S0   模式0    0    USR - 用戶(hù)模式0    1    FIQ - 快速中斷模式1    0    IRQ - 中斷模式1    1    SVC - 超級用戶(hù)模式

在 R15 作為一個(gè)指令的第一個(gè)操作數的時(shí)候,只有程序計數器部分是可以獲得的。所以,下列指令把 PC 到一個(gè)寄存器中并向這個(gè)目標寄存器加上 256:
ADDR0, R15, #256
(對于 BASIC 匯編器 R15 和 PC 的意思是相同的)

本文引用地址:http://dyxdggzs.com/article/201611/317638.htm

在 R15 作為第二個(gè)操作數的時(shí)候,所有 32 位都是可以獲得的: 程序計數器、標志、和狀態(tài)。下列代碼段將標識當前的處理器模式:

MOV     R0, #3          ; 裝載一個(gè)位掩碼(%11)到 R0 中AND     R0, R0, PC      ; 把 R15 與 R0 做邏輯與并把結果放入 R0,來(lái)得到模式狀態(tài)CMP     R0, #3          ; 把模式與 3 相比較(SVC)BEQ     svc             ; 如果等于 SVC 模式,分支到 svcCMP     R0, #2          ; 把模式與 2 相比較 (IRQ)BEQ     irq             ; 如果等于 IRQ 模式,分支到 irqCMP     R0, #1          ; 把模式與 1 相比較(FIQ)BEQ     fiq             ; 如果等于 FIQ 模式,分支到 fiqCMP     R0, #0          ; 把模式與 0 相比較(USR)BEQ     usr             ; 如果等于 USR 模式,分支到 usr
這個(gè)例子不遵從 32-bit 體系?!?h2>改變處理器的狀態(tài):要改變處理器模式、或者任何標志,我們需要用想要的標志 EOR(異或)狀態(tài)標志,新?tīng)顟B(tài) = 舊狀態(tài) EOR (1 << 28)可以成為改變 oVerflow 標志的偽碼。但是我們不能做這個(gè)簡(jiǎn)單的EORS操作,原因是這將導致隨后的兩個(gè)指令被跳過(guò)。不要擔心,指令TEQ做一個(gè)假裝的 EOR (結果不存儲到任何地方)。把它與P后綴組合,則把結果的第 0、1、和 26 至 31 位直接寫(xiě)到 R15 的第 0、1、和 26 至 31 位,這是改變標志的一個(gè)簡(jiǎn)便的方法:TEQPR15, bit_mask

如果你處在允許你設置一個(gè)標志的一個(gè)模式中,則你只可以改變這個(gè)標志。

這個(gè)例子不遵從 32-bit 體系。

可以被擴充它來(lái)改變處理器模式。例如,要進(jìn)入 SVC 模式你可以:

MOV     R6, PC          ; 把 PC 的最初狀態(tài)存儲到 R6 中ORR     R7, R6, #3      ; 設置 SVC 模式TEQP    R7, #0          ; 把(在 R7 中的)模式標志寫(xiě)入 PC
而返回最初的模式是:
TEQP    R6, #0          ; 把(在 R6 中的)最初的模式寫(xiě)入 PC

你可能覺(jué)得 32 位模式不是非常有用。在當前版本的 RISC OS 下,這是事實(shí)。實(shí)際上,就我而言,32 位模式提供給你的只是:

  • 訪(fǎng)問(wèn)大于 28Mb 的區域。在 RISC OS 上這不是真的很重要,在這個(gè)系統里 web 瀏覽器適合于 1 M 或 2 M,而重要的藝術(shù)程序為那些非常巨大的圖象提供它們自己的虛擬內存系統。

本文檔的最初版本,和最初的 ARM 匯編器指南包括...

  • StrongARM 提供了兩個(gè)指令(UMUL 和 UMLA、IIRC),它們處理 64 位乘法。這只能在 32 位模式下獲得。
這是錯誤的。在 26 位模式下可以使用擴展的乘法;MP3 解碼器就使用了它!

盡管 32 位模式的利益好象不是多的那么驚人,新近的處理器(比如 Xscale)不再支持 26 位模式,所以 RISC OS 和它的應用程序要在 32 位環(huán)境下工作則必須經(jīng)過(guò)修改。聽(tīng)起來(lái)不是很多,但是如果所有補償/改變 R15 中的 PSR 位的引用都必須被變更為對不在 R15 中的獨立的 PSR 的引用,這就突然變成一個(gè)非常重大的問(wèn)題了。還有你不能繼續用一個(gè)指令來(lái)恢復 PSR 并分支回到調用者,現在這需要兩個(gè)獨立的指令。為此代碼必須重寫(xiě)。你不能簡(jiǎn)單的用另一個(gè)指令來(lái)修補...



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>