3.2 數(shù)據(jù)處理指令
3.2.1 mov指令
(1)mov指令
mov指令表示如下。
mov{條件}{S} 目的寄存器,源操作數(shù)
mov指令用于將一個立即數(shù)從一個寄存器或能被移位的寄存器加載到目的寄存器中。其中S項決定指令的操作是否影響CPSR中條件標志位的值,當沒有S項時,不更新CPSR中條件標志位的值。
指令示例如下。
mov r0,#0x1 ;將立即數(shù)0x1傳送到寄存器R0中 mov r1,r0 ;將寄存器R0的值傳送到寄存器R1中 mov pc,r14 ;將寄存器R14的值傳送到PC中,常用于子程序返回 mov r1,r0,LSL#3 ;將寄存器R0的值左移3位后傳送到寄存器R1中
注意:
指令不區(qū)分大小寫,程序句尾“;”“//”“@”之后的內(nèi)容為注釋,在“/*”和“*/”之間的內(nèi)容為注釋。
(2)什么是立即數(shù)
在回答這個問題之前,我們先看下面這條指令。
mov r0,#0xfff
將其編譯后會有以下報錯。
Build target ‘Target 1’ assembling S3C2440.s... S3C2440.s(5): error: A1510E: Immediate 0x00000FFF cannot be represented by 0-255 and a rotation S3C2440.s: 5 00000000 MOV R0,#0xfff S3C2440.s: 1 Error, 0 Warnings Target not created
要想解決這個問題,我們需要了解什么是立即數(shù)。立即數(shù)是由數(shù)據(jù)(0~255)循環(huán)右移偶數(shù)位生成的,判斷規(guī)則歸納如下。
① 把數(shù)據(jù)轉(zhuǎn)換成二進制形式,并從低位到高位將其分成4位1組,最高位一組不夠4位的,在最高位前補0。
② 數(shù)其中1的個數(shù),如果1大于8個,則該數(shù)據(jù)肯定不是立即數(shù),如果1小于等于8個則進行下面步驟。
③ 如果數(shù)據(jù)中有連續(xù)的、大于等于24個的0,循環(huán)左移2的倍數(shù)位,使高位全為0。
④ 找到此時數(shù)據(jù)中1的最高位,去掉前面最大偶數(shù)個0。
⑤ 找到最低位的1,去掉其后面最大偶數(shù)個0。
⑥ 數(shù)剩下的位數(shù),如果小于等于8位,那么這個數(shù)就是立即數(shù),反之就不是立即數(shù)。
上述示例中的數(shù)據(jù)是0xfff,先將其轉(zhuǎn)換為二進制形式。
0000 0000 0000 0000 0000 1111 1111 1111
按照上述規(guī)則,最終操作結(jié)果如下。
1111 1111 1111
可以看到剩余的位數(shù)大于8個,所以該數(shù)不是立即數(shù)。
(3)mov機器碼
為什么立即數(shù)會有如上限定?我們需要從mov指令的機器碼來說起。首先讓我們執(zhí)行如下程序。
area Example,code,readonly;聲明程序段Example entry;程序入口 start ;此處為測試程序,添加在以下位置即可,之后不再介紹完整程序 mov r1,#0x80000001 over end
使用鼠標指針單擊操作界面的debug按鈕,查看對應的機器碼,如圖3-1所示。

圖3-1 機器碼
得到指令“mov r1,#0x80000001”的機器碼是E3A01106(十六進制)。mov指令機器碼格式如圖3-2所示。

圖3-2 mov指令機器碼格式
根據(jù)mov指令格式,我們分析各個位域的含義,如表3-2所示。
表3-2 mov指令機器碼各個位域含義

立即數(shù)0x80000001的二進制數(shù)如下。
1000 0000 0000 0000 0000 0000 0000 0001
將數(shù)據(jù)循環(huán)左移2位后得到以下結(jié)果。
00 0000 0000 0000 0000 0000 0000 0001 10
因此,偏移的值為1(2/2),操作數(shù)的值為0000 0110。讀者可以隨機找一些整數(shù),判斷其是否是立即數(shù)。
- Spring開發(fā)者的Quarkus實戰(zhàn)
- 結(jié)構BIM應用教程
- 數(shù)據(jù)科學導論:Python語言實現(xiàn)
- 軟件測試之魂:核心測試設計精解
- C語言點滴
- 中國軟件工程師:工作、生活與觀念
- Unity手機游戲開發(fā):從搭建到發(fā)布上線全流程實戰(zhàn)
- 移動終端應用軟件開發(fā)實戰(zhàn)
- 構建跨平臺APP:jQuery Mobile移動應用實戰(zhàn)(第2版) (跨平臺移動開發(fā)叢書)
- 軟件測試項目實戰(zhàn)
- 云計算工程
- 云計算360度
- 微信小程序?qū)崙?zhàn)入門(內(nèi)含完整實例解析)
- UG NX 8.0實例教程(第2版)
- Spring Boot趣味實戰(zhàn)課