1. 取低
8位,先用
0擴充套件為
32位數
2. 將所得
32位數迴圈右移2*
rotate
位,rotate
為[11:8]
來分析一句:mov r2, #300。反彙編如下:
8004: e3a02f4b mov r2, #300 ; 0x12c
立即數是直接放在指令內部的。
1. 取其低8位:
0x4b
2. 擴充套件為
32位:
0x0000 004b
3. 2*rotate = 2*15 = 30
4. 迴圈右移
30位(相當於左移
2位)。即
0100 1011
左移2位,得到
0001 0010 1100
,即0x12c
,十進位制等於
300對於
0x53000000
的計算方法也是相同的。 mov r1, #0x53000000 這樣寫確實是可行的。
mov r1,#0x00004000 反彙編得4: e3a01901 mov r1, #16384 ; 0x4000
ldr r0,=0x56000000 反彙編得0: e3a00456 mov r0, #1442840576 ; 0x56000000
有興趣可以驗證以上兩個例子
ARM立即數,LDR和MOV的區別
mov 是把立即數賦給乙個暫存器,但對立即數的範圍有要求。只能是由8bit連續有效位通過偶數次移位能得到的數。如果立即數超出這個範圍,就沒辦法用一條mov指令給暫存器賦值。ldr除了普通的讀數之外,也有給暫存器賦立即數的功能。你只要寫 ldr r0,0xabcdef 它沒有立即數範圍的限制。因為這是...
三個數的和為0
給出乙個長度為n的無序陣列,陣列中的元素為整數,有正有負包括0,並互不相等。從中找出所有和 0的3個數的組合。如果沒有這樣的組合,輸出no solution。如果有多個,按照3個數中最小的數從小到大排序,如果最小的數相等則按照第二小的數排序。input 第1行,1個數n,n為陣列的長度 0 n 10...
1267 4個數和為0(不放回的取 4 個)
1 秒131,072 kb 20 分 3 級題 給出n個整數,你來判斷一下是否能夠選出4個數,他們的和為0,可以則輸出 yes 否則輸出 no 收起第1行,1個數n,n為陣列的長度 4 n 1000 第2 n 1行 a i 10 9 a i 10 9 如果可以選出4個數,使得他們的和為0,則輸出 y...