MOV運算元為立即數時的個例說明

2021-06-16 12:42:36 字數 754 閱讀 1173

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...