嵌入式软件面试之常用汇编指令

嵌入式软件面试之常用汇编指令

今天要介绍的是CM3的ARM汇编指令集。一般做嵌入式软件或者底层软件,面试中尝尝会被问到对汇编语言的掌握程度,可见汇编语言还是嵌入式er的必备技能。在做一个全新的基于cortex-m3架构的MCU时,通常会使用汇编语言做启动文件,初始化系统以及BootLoader的子功能等,因此掌握汇编语言的基础十分重要。下面我们就一起学习下CM3汇编语言吧,有了CM3的基础,其他汇编就是知识迁移了~~

关注公众号【阿目分享嵌入式】获取更多嵌入式面试,嵌入式软件知识!!

汇编指令的最典型书写模式如下所示:


标号 

   操作码 操作数 1, 操作数 2, … ;

其中,标号是可选的,如果有,它必须顶格写。标号的作用是让汇编器来计算程序转移的地址。操作码是指令的助记符,它的前面必须有至少一个空白符,通常使用一至二个“Tab”键来产 生。操作码后面往往跟随若干个操作数,而第 1 个操作数,通常都给出本指令的执行结果存储处。不同指令需要不同数目的操作数,并且对操作数的语法要求也可以不同。举例来说,立即数必须以 “#”开头,如 :

MOV R0, #0x12 ; R0 <-0x12
MOV R1, #’A’ ; 字母 A 的 ASCII 码赋值给R1

注释均以”;”开头,它的有无不影响汇编器工作,只是给程序员看的,能让程序更易理解。还可以使用 EQU 指示字来定义常数,然后在代码中使用它们,例如:

NVIC_IRQ_SETEN0 EQU 0xE000E100 ; 注意:常数定义必须顶格写
NVIC_IRQ0_ENABLE EQU 0x1

使用DCB和DCD来定义字节常数和32bit的整数:

MY_NUMBER
  DCD 0x12345678
HELLO_TEXT
  DCB ”Hello\n”,0

介绍了arm汇编语言的基本格式,下面就看下常用的汇编指令以及功能:

加法语句:
ADD Rd, Rn, Rm ; Rd = Rn+Rm
ADD Rd, Rm ; Rd += Rm
ADD Rd, #imm ; Rd += imm

减法语句:
SUB Rd, Rn ; Rd -= Rn
SUB Rd, Rn, #imm3 ; Rd = Rn-imm3
SUB Rd, #imm8 ; Rd -= imm8
SUB Rd, Rn, Rm ; Rd = Rm-Rm

乘法语句:
MUL Rd, Rm ; Rd *= Rm
SMULL RL, RH, Rm, Rn ;[RH:RL]= Rm*Rn   ;以下是64位乘法
SMLAL RL, RH, Rm, Rn ;[RH:RL]+= Rm*Rn
UMULL RL, RH, Rm, Rn ;[RH:RL]= Rm*Rn
SMLAL RL, RH, Rm, Rn ;[RH:RL]+= Rm*Rn

除法语句:
UDIV Rd, Rn, Rm ; Rd = Rn/Rm (无符号除法)
SDIV Rd, Rn, Rm ; Rd = Rn/Rm (带符号除法)

AND Rd, Rn ; Rd &= Rn  ; 按位与
ORR Rd, Rn ; Rd |= Rn  ; 按位或
BIC Rd, Rn ; Rd &= ~Rn ; 清零
EOR Rd, Rn ; Rd ^= Rn  ; 按位异或

LSL Rd, Rn, #imm5 ; Rd = Rn<<imm5 ;逻辑左移
LSR Rd, Rn, #imm5 ; Rd = Rn>>imm5 ;逻辑右移

B Label ;跳转到 Label 处对应的地址 ; 跳转指令
BX reg ;跳转到由寄存器 reg 给出的地址 

常用的存储器访问指令:

在这里插入图片描述
在这里插入图片描述

多存储器访问:
LDMIA Rd!, {寄存器列表} 
;从 Rd 处读取多个字,并依次送到寄存器列表中的寄存
器。每读一个字后 Rd 自增一次,16 位宽度

STMIA Rd!, {寄存器列表}
;依次存储寄存器列表中各寄存器的值到 Rd 给出的地址。
每存一个字后 Rd 自增一次,16 位宽度

LDR R0, [R1, #8]! ;将存储器地址为R1+8的字节数据读入寄存器R0,并将新地址R1+8写入R1
LDR R0, [R1, #8]  ;将存储器地址为R1+8的字数据读入R0

条件跳转示例:
;功能是整数转ASCII代码,假设R0中存储了待转换的数据
CMP R0 #0x0A     ;先与10做比较
ITE GE           ;相当于声明此语句包含一个if 一个else GE表示第一个条件的判断依据是大于等于
ADDGE  R0, #55   ;大于等于成立则转成A-F的ASCII码
ORRLT R0, #0x30  ;否则执行else 执行转换成0-9

关注公众号【阿目分享嵌入式】获取更多嵌入式面试,嵌入式软件知识!!
ending~~

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值