
arm汇编
wuqi1003
一个妄图发大财出人头地的普通人
展开
-
优化
1 改完a1段要看后面的a2段有没有使用a1中改动的寄存器2 根据左移的正负数对循环进行分情况拆分3 可以用连续的ldr代替循环中原创 2020-01-29 09:30:01 · 162 阅读 · 0 评论 -
汇编前变址、后变址、回写
前变址: ldr r0,[r1,#4] ;[r1+4] →r0前变址回写:ldr r0,[r1,#4]! ;r1+4→r1,[r1]→r0后变址回写:ldr r0,[r1],#4 ;[r1]→r0,r1+4→r1...原创 2020-01-29 09:27:30 · 1152 阅读 · 0 评论 -
vld1 vld2
Vld1.s32 {q0,q1},[r0]Q0: 0x00000004000000030000000200000001Q1: 0x00000008000000070000000600000005vld2.s32 {q0,q1},[r0]Q0: 0x00000007000000050000000300000001Q1: 0x00000008000000060000000...原创 2020-01-29 09:26:28 · 508 阅读 · 0 评论 -
仅有B没有BL时lr不会变|字节对齐
字对齐,即4字节对齐首地址的bit[1:0]总是00,首地址都是4的倍数。半字对齐,即2字节对齐,首地址的bit[0]总是0,首地址总是2的倍数。字节对齐就是1字节对齐。...原创 2020-01-28 18:21:29 · 168 阅读 · 0 评论 -
优化 :NEON右移变左移
按照立即数移位,左右移都可以,且都有饱和操作。按照变量移位,只有左移可用。在ARM汇编转NEON时,按变量右移会切换为左移。即c = a-b, d>>c 要写成 c = b-a, d<<c 。; C语言:a=SE_L_shr(tmp1, SE_sub(Q_tmp,1));;q0=tmp1 q1=Q_tmpvmov.s32 q14,#1vsub.s32 ...原创 2020-01-28 18:15:40 · 418 阅读 · 0 评论 -
C语言移位符>>与ASR算术右移等价
做个实验,看看C语言的右移到底是(1)LSR逻辑右移,不复制符号位(2)ASR算术右移,保留并复制符号位。S32 a=0x81234567; /-2128394905S32 result1=(a>>16); //S16 result2=(a>>16);S16 rrsult3=a/65536; //65536就是2的16次方结果result...原创 2020-01-25 13:15:41 · 853 阅读 · 0 评论 -
c函数实参与r0-r3寄存器
c函数的前四个实参会依次放入r0~r3寄存器中,第五个参数开始后面参数都会压入堆栈原创 2020-01-25 13:13:17 · 675 阅读 · 0 评论 -
ldr r0,array与ldr r0,=array
array是个数组,每个元素的值都是100。S32 array[30];array[0]=100;如果用 ldr r0,array 则r0的值是100。如果用 ldr r0,=array 则r0的值是array[0]的地址原创 2020-01-25 13:07:40 · 765 阅读 · 0 评论 -
stm/ldm存储数据与读取数据实验
stm--store memoryldm--load memory在stm之前r0=0x1960--&tmp[5]r1=0x12345678r5=0x87654321stm r0!,{r5,r1}r0=0x1968--&tmp[7]tmp[5]=0x12345678--r1tmp[6]=0x87654321--r5可见stm存储如预期成功。ldm r0!,{...原创 2020-01-25 13:06:14 · 738 阅读 · 0 评论