本文将简要介绍在ARM中学习手臂装配指令。宏restore_user_regsldr r1,[sp,#S_PSR] ldr lr,[sp,#S_PC]! @!用于控制是否回写基础索引寻址的最终新地址。 @执行ldr后,sp被写回到sp + #S_PC基址索引的新地址msr spsr,r1 @将cpsr的值保存到spsr ldmdb sp,{r0-lr} ^ @ lr = [sp-1 * 4],r13 = [sp-2 * 4],r12 = [sp-3 * 4],......,r0 = [sp-15 * 4] @因为没有给pc赋值,^表示将数据恢复到用户模式[r0 -lr] [gliethttp] mov r0,r0add sp,sp,#S_FRAME_SIZE在寄存器组-S_PCmovs pc,lr.endm中正在研究其他指令[请随时添加gliethttp]- ------------- --------------- 1.ldr ip,[sp],#4将sp的内容保存到ip中,然后sp = sp + 4; ldr ip,[sp,#4]将内容在sp + 4的新地址下存储到ip中,然后sp的值保持不变ldr ip,[sp,#4]!将内容存储在sp + 4的新地址下,并将其存储到ip中,然后将sp = sp + 4转换为新地址。将地址值分配给spstr ip,[sp],#4将ip保存到sp地址,然后sp = sp + 4; str ip,[sp,#4]将ip保存到sp + 4的新地址,然后sp值保持不变str ip,[sp,#4]!将ip保存到sp + 4的新地址中,然后sp = sp + 4将新地址值分配给sp ------------ ------------- ---- 2.movs r1,#3; movs将导致ALU更改,因为r1的值不为0,即运算r0的结果不为0,因此ALU Clear的Z标志0bne 1f;由于Z = 0,说明不相等,因此请跳至标签1:在此处继续执行其他语句------------------------ ---- 3。 LDM表示加载,STM表示存储。 LDMED LDMIB预加载LDMFD LDMIA,然后增加LDMEA LDMDB预加载LDMFA LDMDA,然后减少STMFA STMIB预加载存储STMEA STMIA,然后增加存储STMFD STMDB预减少存储STMED STMDA后,减少存储。注意ED与IB不同;只有相同的预还原。在存储时,ED会减少,然后FD,ED,FA和EA会指定堆栈是满还是空,升序还是降序。要存储STM,请先添加,然后保存FA。只需记住,先添加(先添加),然后保存数据首先添加EA,保存数据,然后添加末尾添加,先减去并保存FD,第一次减去dec,先保存数据,然后先减去,再保存ED ,保存数据,然后减去end dec然后记住LDM,因为LDM是STM的反向弹出动作,所以由于先添加然后存储,所以在减去之后,首先获取FA成为与STM相对应的获取数据,然后减法,因为它是先加和存储的,所以先减法然后取EA成为对应于STM的第一个减法。因为先减去数据再存储,所以先加FD后再取数据,再加STM后再取数据,因为先存后继相减,先加数据再加ED。被采取。成为与STM相对应的第一个添加项。我想通过上述异常方式获取数据,以轻松记住这组指令[gliethttp]堆栈指针的完整堆栈指向上次写入的最后一个数据单元,而堆栈堆栈的空指针指向第一个空闲单元。降序堆栈在内存中向后增长(也就是说,它从应用程序空间的末尾开始向后增长),而升序堆栈在内存中向前增长。其他形式只是描述指令。此行为表示IA在(Increment After)之后增加,IB在(Increment Before)之前增加,DA在(Decrement After)之后减小,而DB在(Decrement Before)之后减小。 RISC OS使用传统的完整降序堆栈。在使用中,它与APCS指定的编译器一致时,通常将其堆栈指针设置在应用程序空间的末尾,然后使用FD(全降序)堆栈。如果使用高级语言(BASIC或C),则别无选择。堆栈指针(传统上为R13)指向完整的递减堆栈。您必须继续使用这种格式,或者创建和管理自己的堆栈。 4.teq r1,#0 // r1-0,将结果发送到状态标志。如果将r1和0相减的结果为0,则设置ALU的Z,否则将Z清除为0 bne重新计划// ne表示Z不为0,即:不相等,然后执行重新计划功能- -------------------------- 5。使用tst检查是否将特定位设置为tst r1,#0x80 //按位和操作,检测r1的0x1<< 7,即第七位是否设置为1,以及结果按位,之后为0,则将ALU的Z设置为beq reset //如果设置了Z,即:上述按位AND操作的结果为0,则跳转以重置标签执行--- -------------------- 6。对^^的理解是后缀标记,不能在用户模式和Sys系统模式下使用。 Ť