1. 程式人生 > >彙編指令詳解

彙編指令詳解

1 為什麼要寫這篇部落格

雖然近些年嵌入式開發都使用C語言,但是涉及到很底層的實現的時候,還是得用匯編來實現。所以必須要掌握基本的彙編指令。本篇部落格意在講解一些常用到的彙編指令,算是一個成長積累的過程。後續遇到的彙編指令都會記錄到本部落格中。

2 常用匯編指令學習

2.1 MRS指令

MRS指令的格式為:
MRS{條件} 通用暫存器,程式狀態暫存器(CPSR或SPSR)
MRS指令用於將程式狀態暫存器的內容傳送到通用暫存器中。該指令一般用在以下兩種情冴:

Ⅰ.當需要改變程式狀態暫存器的內容時,可用MRS將程式狀態暫存器的內容讀入通用暫存器,修改後再寫回程式狀態暫存器。
Ⅱ.當在異常處理或程序切換時,需要儲存程式狀態暫存器的值,可先用該指令讀出程式狀態暫存器的值,然後儲存。
指令示例:
MRS R0,CPSR @傳送CPSR的內容到R0
MRS R0,SPSR @傳送SPSR的內容到R0

2.2 MSR指令

MSR指令的格式為:
MSR{條件} 程式狀態暫存器(CPSR或SPSR)_<域>,運算元
MSR指令用於將運算元的內容傳送到程式狀態暫存器的特定域中。其中,運算元可以為通用暫存器或立即數。<域>用於設定程式狀態暫存器中需要操作的位,32位的程式狀態暫存器可分為4個域:
位[31:24]為條件標誌位域,用f表示;
位[23:16]為狀態位域,用s表示;
位[15:8]為擴充套件位域,用x表示;
位[7:0]為控制位域,用c表示;

該指令通常用於恢復或改變程式狀態暫存器的內容,在使用時,一般要在MSR指令中指明將要操作的域。
指令示例:
MSR CPSR,R0 @傳送R0的內容到CPSR
MSR SPSR,R0 @傳送R0的內容到SPSR
MSR CPSR_c,R0 @傳送R0的內容到SPSR,但僅僅修改CPSR中的控制位域