打印

常用汇编指令介绍

[复制链接]
153|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一亚麻怡|  楼主 | 2018-9-26 17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
相对跳转指令:b、bl



    bl除跳转外,还将返回值(bl下一条指令的地址)保存在 lr 寄存器中



数据传送指令:mov  地址读取伪指令:ldr



    >mov

        mov r1 , r2                 //r1=r2

        mov r1 , #4096          //r1=4096



    >ldr

        ldr r1,=4097               //r1=4097





内存访问指令:ldr、str、ldm、stm



    >ldr 指令从内存中读取数据到寄存器,str 指令把寄存器的值存储到内存中,它们的数据都是32位的



        ldr r, [r2, #4]                //将地址为 r2+4 的内存单元数据读取到 r1

        ldr r, [r2]                      //将地址为 r2 的内存单元数据读取到 r1

        ldr r, [r2], #4                //将地址为 r2 的内存单元数据读取到 r1,然后 r2=r2+4

        str r, [r2, #4]                //将 r1 的数据保存到地址为 r2+4 的内存单元中

        str r, [r2]                      //将 r1 的数据保存到地址为 r2 的内存单元中

        str r, [r2], #4                //将 r1 的数据保存到地址为 r2 的内存单元中,然后r2=r2+4



    >ldm 和 stm 是批量内存访问指令,只用一条指令就可以读写多个数据,命令格式为:

        ldm {cond} <addressing_mode> <rn>{!} <register list>{^}

        stm {cond} <addressing_mode> <rn>{!} <register list>{^}



            {cond}:指令执行条件

            <addressing_mode>:地址变化模式,包括4种模式

                    ia:事后递增方式

                    ib:事先递增方式

                    da:事后递减方式

                    db:事先递减方式

            <rn>{!} :保存内存到地址,如果后面加上感叹号,指令执行后,rn 的值会更新,等于下一个内存单元的地址

            <register list>:表示寄存器列表,对于 ldm ,从<rn>所对应的内存中取出数据,写入这些寄存器;对于 stm,把这些寄存器               

                                      的值写入 <rn> 对应的内存块中

            {^}:有两种含义:如果 <register list> 中有 pc 寄存器,他表示指令执行后,spsr寄存器的值将自动复制到 cpsr寄存器中——

                    这常用于从中断函数中返回;如果<register list>中没有 pc 寄存器,{^} 表示操作的是用户模式下的寄存器,而不是当前

                    特权模式的寄存器



加减指令:add、sub



        >add

            add r1, r2, #1                //r1 = r2 + 1

        >sub

            sub r1, r2, #1                //r1 = r2 - 1



程序状态寄存器的访问指令:msr、mrs

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

404

主题

404

帖子

0

粉丝