常用汇编语言语法 您所在的位置:网站首页 汇编语言基本语句 常用汇编语言语法

常用汇编语言语法

2024-07-13 14:29| 来源: 网络整理| 查看: 265

目录

指令及其含义:

指令:LDR(load)

指令:LDR(伪指令)

指令:STR(Srote)

指令:ldm

指令:stm

指令:B

指令:BL

指令:MOV(move)

指令:MOV(move)

指令:sub

指令:add

指令:cmp

指令:bne

指令:MRS

指令:MSR

指令:bic

指令及其含义:

指令:LDR(load)

含义:读内存命令

例子:

指令:LDR R0 ,[R1]   --假设R1的值为x

命令解析:读取地址x上的数据(4个字节)保存到R0中。

指令:LDR(伪指令)

含义:伪指令(并不存在的指令,最终被解析成真正的汇编指令)

例子:

LDR R0,=0x12345678

命令解析:把0x12345678的值赋值给R0

补充:伪指令的含义

一条ARM指令为  32 位 ,其中肯定是由某些字节来表示MOV本身,某一位用来指定使用的寄存器(比如R0),剩下的位就不足32位了,如果我们需要使用命令:MOV R0 ,#0x12345678 ,此时MOV指令剩下的位已经不足32为了,所以这条指令就会出错,所以MOV指令不能写任意值,只能写简单的值(被称为立即数)。

指令:STR(Srote)

含义:写内存命令

例子:

指令:LDR R0 ,[R1]   --假设R1的值为x

命令解析:

例子:

指令:STR R0 ,[R1]   --假设R1的值为x

命令解析:把R0的值(4字节)写到地址x中去。

指令:ldm

含义:读内存读取数据,然后把读取的数据写入多个寄存器

命令解析:

例子:

ldmia    sp, {fp, sp, pc}

假设:sp=4080

例子:ia的含义是过后增加(Increment After),就是先读取后增加,而且的顺序的依据是:高编号的寄存器存储在高地址

fp,sp,  pc 这三个的寄存器编号分别如下所示(ARM编程手册查看)

pc->R15,sp->R13,fp->R11.所以存取的顺序是:fp-sp-pc(与指令顺序无关)

附录:

其他形式简单的描述指令的行为,意思分别是过后增加(Increment After)、预先增加(Increment Before)、过后减少(Decrement After)、预先减少(Decrement Before)。

指令:stm

含义:把多个寄存器的值写入内存

例子:

指令:stmdb    sp!, {fp, ip, lr, pc}

解析:假设sp=4096,db是预先减少(Decrement Before)的意思,就是先减少后存入sp开始的地址,而且存取的顺序的依据是:高编号的寄存器存储在高地址。fp, ip, lr, pc 这四个的寄存器编号分别如下所示(ARM编程手册查看)

pc->R15,lr->R14,ip->R12,fp->R11.所以存取的顺序是:pc-lr-ip-fp(与顺序无关)

存储的大体如下,先减后存入:

提示:sp!的含义代表的是,sp会等于执行完此条语句后的值,比如存入四个寄存器,那么得减掉4次,那么sp=4096-16=4080。

感叹后表示执行完语句后sp的值会被改变.

附录:

其他形式简单的描述指令的行为,意思分别是过后增加(Increment After)、预先增加(Increment Before)、过后减少(Decrement After)、预先减少(Decrement Before)。

指令:B

含义:跳转指令

 ⑦

指令:BL

含义:跳转到指定指令,把返回地址(下一条指令的地址)保存在lr寄存里边

例子:

BL  xx

aa

解析:命令跳转到xx处执行,且lr寄存器保存aa的地址,以便继续运行

 ⑧

指令:MOV(move)

含义:赋值指令

例子1:

MOV R0,R1 

命令解析:把R1的值赋值给R0

(即为:R0=R1)

例子2:

MOV R0,#0x100

命令解析:把0x100赋值给R0

 ⑨

指令:MOV(move)

含义:赋值指令

例子1:

MOV R0,R1 

命令解析:把R1的值赋值给R0

(即为:R0=R1)

例子2:

MOV R0,#0x100

命令解析:把0x100赋值给R0 

 ⑩

指令:sub

含义:减法指令

例子1:

指令:sub ro ,r1,#5 

解析:其含义是:r0 = r1 -5;

例子2:

指令:sub ro ,r1,r2 

解析:其含义是:r0 = r1 -r2

 ⑪

指令:add

含义:加法指令

例子1:

指令:add ro ,r1,#5 

解析:其含义是:r0 = r1 + 5;

指令:add ro ,r1,r2 

解析:其含义是:r0 = r1 + r2;

指令:cmp

含义: cmp(compare)指令进行比较两个操作数的大小

例子:例:cmp oprd1,oprd2

其含义为第一个操作减去第二个操作数,但不影响第两个操作数的值,它影响flag的CF,ZF,OF,AF,PF.

 

若执行指令后:ZF=1,则说明两个数相等,因为zero为1说明结果为0.

   当无符号时:

   若CF=1,则说明了有进位或借位,cmp是进行的减操作,故可以看出为借位,所以,此时oprd1oprd2.

   当有符号时:

   若SF=0,OF=0 则说明了此时的值为正数,没有溢出,可以直观的看出,oprd1>oprd2;

   若SF=1,OF=0 则说明了此时的值为负数,没有溢出,则为oprd1



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有