?? test2.s
字號(hào):
X EQU 11 ; 定義X的值為11
Y EQU 8 ; 定義Y的值為8
BIT23 EQU (1<<23) ; 定義BIT23的值為0x00800000
AREA Example2,CODE,READONLY ; 聲明代碼段Example2
ENTRY ; 標(biāo)識(shí)程序入口
CODE32 ; 聲明32位ARM指令
START ; 使用MOV、ADD指令實(shí)現(xiàn):R8 = R3 = X + Y
MOV R0,#X ; R0 <= X,X的值必須是8位圖數(shù)據(jù)
MOV R1,#Y ; R1 <= Y,Y的值必須是8位圖數(shù)據(jù)
ADD R3,R0,R1 ; 即是R3 = X + Y
MOV R8,R3 ; R8 <= R3
; 使用MVN、SUB指令實(shí)現(xiàn):R5 = 0x5FFFFFF8 - R8 * 8
MVN R0,#0xA0000007 ; 0xA0000007的反碼為0x5FFFFFF8
SUB R5,R0,R8,LSL #3 ; R8左移3位,結(jié)果即是 R8 * 8
; 使用CMP指令判斷(5*Y/2)>(2*X)嗎?若大于則R5 = R5&0xFFFF0000,否則R5 = R5|0x000000FF
MOV R0,#Y
ADD R0,R0,R0,LSL #2 ; 計(jì)算R0 = Y + 4*Y = 5*Y
MOV R0,R0,LSR #1 ; 計(jì)算R0 = 5*Y/2
MOV R1,#X
MOV R1,R1,LSL #1 ; 計(jì)算R1 = 2*X
CMP R0,R1 ; 比較R0和R1,即(5*Y/2)和(2*X)進(jìn)行比較
LDRHI R2,=0xFFFF0000 ; 若(5*Y/2)>(2*X),則R2 <= 0xFFFF0000
ANDHI R5,R5,R2 ; 若(5*Y/2)>(2*X),則R5 = R5&R2
ORRLS R5,R5,#0x000000FF ; 若(5*Y/2)≤(2*X),則R5 = R5|0x000000FF
; 使用TST指令測(cè)試R5的bit23是否為1,若是則將bit6位清零(使用BIC指令)
TST R5,#BIT23
BICNE R5,R5,#0x00000040
B START
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -