GNU汇编伪指令

.text                                                         将定义符开始的代码编译到代码段

.data                                                       将定义符开始的代码编译到数据段

.end                                                        文件结束

.equ  GPG3CON, 0XE03001C0             定义宏(GPG3CON代替0XE03001C0 )

.byte                                                        定义变量 1字节

        .byte  0x11,'a' , 0                             定义字节数组

.word                                                        定义word变量(4字节      32位机)

         .word   0x32974332,0x47839438

.string                                                      定义字符串

          .string "hfek\0"

ldr r0,=0xE002802                                   载入大常数0xE002802 到 r0 中

.global _start                                            声明_start 为全局符号

例:拷贝ROM中字符串到RAM中

    .text

start:
    ldr r5,=srcBuf
    ldr r6,=desBuf

loop:
    ldrb r4,[r5]
    cmp r4,#0
    beq main_end
    ldrb r0,[r5],#1
    strb r0,[r6],#1
    b loop

main_end:
    b main_end

srcBuf:
    .string "faj;sf"
    .data

destBuf:
    .space 8
        .end

  批量操作指令

       (ia - Inncrement After ib-Increment Before da-Dec After db-Dec Before)

     

ldmia r0!,{r3 - r10}    //r0里地址指向的内容批量,load到r3 ~r10 寄存器中,r0里地址会自动加4
stmia r0!,{r3 - r10}    //把r3 ~r10寄存器中的内容,store到r0里地址执行空间中,r0里地址会自动加4

  例:

    .text
    ldr r12,=srcBuf
    ldr r13,=dstBuf
    ldmia r12!,{r0 - r11}
    stmia r13!,{r0 - r11}

    .data

srcBuf:
    .string "fjjldsfs"

srcBuf_end:
    
dstBuf:
    .space 12*4
    .end

  堆栈操作指令

stmfd sp!,{r0 - r12,lr}     //将寄存器r0 ~r12 lr中的值存入栈中,常用于中断保护现场,!表示会自动偏移
ldmfd sp!,{ro - r12,pc}^    //将栈中的值逐个弹出到寄存器r0 ~ r12 pc中,常用于中恢复断现场,^表示会恢复spsr到cpsr
STMFD sp!,{r4 - r7,lr}

LDMFD sp!,{r4 - r7,pc}

 ARM指令高级

      软中断指令

swi 0x02 //产生软中断,软中断号为2

发布了33 篇原创文章 · 获赞 7 · 访问量 1446

猜你喜欢

转载自blog.csdn.net/qq_44226094/article/details/104108624