GNU ARM 汇编伪指令 电脑版发表于:2024/6/27 10:09 ![](https://img.tnblog.net/arcimg/hb/6930d1439f4b43e785a433685b813262.png) >#GNU ARM 汇编伪指令 [TOC] GNU ARM 汇编伪指令 ------------ | 汇编指令 | 描述 | | ------------ | ------------ | | `.section` | 定义内存段 | | `.text` | 将定义符开始的代码编译到代码段 | | `.data` | 数据段 | | `.if .else .endif` | 条件编译 | | `.end` | 文件结束 | | `.byte 0x11,'a',0` | 定义char类型数组(.byte对应的1字节) | | `.word 0x12,0x445566` | 定义int型类型(.word 对应4字节) | | `.string "abcd\0"` | 定义字符串 | | `.align 4` | 4字节对齐 | | `ldr r0,=0xE0028008` | 载入大常数0xE0028008到r0中 | | `.equ GPG3CON,0xE03001C0` | 定义宏 | | `.global _start` | 声明__start为全局符号 | tn2>示例代码: ![](https://img.tnblog.net/arcimg/hb/a7e821e5c39845849e64fe6f204fe337.png) ### 批量操作指令 tn2>`ldmia r0!,{r3 - r10}` r0里的地址指向的内容批量,load到r3~r10寄存器中,!表示r0里地址自动加4 `stmia r0!,{r3 - r10}` 把r3~r10寄存器中内容,store到r0里地址执行空间中,r0里地址会自动加4 接下来我们通过一个示例进行示范。 ![](https://img.tnblog.net/arcimg/hb/816b27c3bced48eea46433f061a95308.png) ```bash .text b main nop nop nop nop nop nop nop main: ldr r12,=srcBuf ldr r13,=dstBuf @ ldmia r12!,{r0,r1,r3} ldmia r12!,{r0 - r11} stmia r13!,{r0 - r11} main_end: b main_end .data .align 4 srcBuf: .string "abcdefghijklmnopqrstuvwxyz\0" dstBuf: .space 12*4 .end ``` tn2>当我们执行到`ldmia r12!,{r0 - r11}`之前,我们可以通过`r12`保存的字符串地址在内存中查看一下数据的情况。 ![](https://img.tnblog.net/arcimg/hb/e98ae584d0154b87b0eabeb44519a02e.png) tn2>我们可以转成`Ascii`码查看一下。 ![](https://img.tnblog.net/arcimg/hb/d0338dbd6bc141f684d8869710e82b41.png) ![](https://img.tnblog.net/arcimg/hb/1820d721c7a54e93853d07274f8ffbff.png) tn2>然后执行下一条指令,将值赋值到r0到r11之间的寄存器中,查看一下我们的寄存器。 ![](https://img.tnblog.net/arcimg/hb/6268f70892b547c5acfe0c3cab098cb8.png) tn2>再执行下一条指令,将值赋值到r13指定的内存地址中,并查看一下r13指定的内存地址。 ![](https://img.tnblog.net/arcimg/hb/f78ae4cf138347dba7325d69acd27fc1.png) ### 堆栈操作指令 tn2>`stmfd sp!,{r0-r12,lr}`将寄存器r0~r12 lr中的值存入栈中,常用于中断保护现场,`!`表示会自动偏移。 `ldmfd sp!,{r0-r12,pc}`将栈中值逐个弹出到寄存器r0~r12 pc中,常用于恢复保护现场,`^`表示会恢复spsr到cpsr。 ![](https://img.tnblog.net/arcimg/hb/af6ef81cbb58442e863f05a357a5b6cc.png) ### 软中断指令 tn2>`swi 0x02`产生软中断,调用操作系统编号为02的系统例程。 ![](https://img.tnblog.net/arcimg/hb/74648047b07c442f815213bb52b94856.png)