基础指令最后一篇. Cortex M0指令总共56条, 很快就可以学习完.
1.扩展指令
即把一个1Byte或者2Byte长的数据扩展到更长的数据类型.如果是无符号类型,直接在高位补0即可,如果是有符号类型则需要保留符号扩展.4种情况:1Byte, 2Byte长,有无符号,一共四种扩展操作都有相应的指令.
;Signed halfword to word
ALIGN
asm_s16ext FUNCTION
EXPORT asm_s16ext
SXTH r0, r0
bx lr
ENDP
;Signed byte to word
ALIGN
asm_s8ext FUNCTION
EXPORT asm_s8ext
SXTB r0, r0
bx lr
ENDP
;Unsigned halfword to word
ALIGN
asm_u16ext FUNCTION
EXPORT asm_u16ext
UXTH r0, r0
bx lr
ENDP
;Unsigned byte to word
ALIGN
asm_u8ext FUNCTION
EXPORT asm_u8ext
UXTB r0, r0
bx lr
ENDP
2.字节倒序
Cortex M系列的处理器在标准中可以实现为Little Endian, 或者 Big Endian. 现实情况下Little Endian居多. 不管哪一种实现, 总会遇到与内核Endian不同的数据,比如涉及到处理网络数据的程序经常需要做这种转换, 因为网络数据一般为Big Endian.
倒序的指令有三个, 分别为REV, REV16, REVSH. 分别是将4Byte完全倒序,分别在高低16bit进行倒序,低进行低16bit的倒序并且扩展符号.
;Reverse Bytes in word
ALIGN
asm_rev FUNCTION
EXPORT asm_rev
REV r0, r0
bx lr
ENDP
;Reverse Bytes in both halfwords
ALIGN
asm_rev16 FUNCTION
EXPORT asm_rev16
REV16 r0, r0
bx lr
ENDP
;Reverse Signed bottom half word
ALIGN
asm_revsh FUNCTION
EXPORT asm_revsh
REVSH r0, r0
bx lr
ENDP
3.SVC指令
SVC指令一般用于RTOS.用户域请求系统域的权限,保持用户域与系统域代码的隔离,但是用户域又能通过SVC指令来请求系统域的功能. Cortex M0内核在硬件上没有权限的概念,即用户域的代码即可完成所有操作.但是1.为了软件上保持与高版本的内核兼容 2.为软件实现隔离提供支持.还是有SVC这个指令.
SVC指令的使用语法:
SVC #imm
其中imm是0-255的立即数,即SVC可以有256种号码. 事实上SVC的指令格式:
DFxx
这个号码在硬件上对内核没有作用, 纯用于软件来识别SVC号码.如何取出SVC号码,后面会讲.
;Supervisor Call 1
ALIGN
asm_svc_1 FUNCTION
EXPORT asm_svc_1
SVC #1
bx lr
ENDP
4.MRS, MSR指令.
读写特殊寄存器的指令.
特殊指令包括:
APSR, IPSR, EPSR, IEPSR, IAPSR, EAPSR, PSR, MSP, PSP, PRIMASK, CONTROL
这里以PRIMASK读写为例.
;Test special register write
;special register is one of the special-purpose registers: APSR, IPSR, EPSR, IEPSR, IAPSR,
;EAPSR, PSR, MSP, PSP, PRIMASK, or CONTROL.
ALIGN
asm_test_msr FUNCTION
EXPORT asm_test_msr
;Write 0x00000001 to disable all exceptions with configurable priority
;Write 0x00000000 to enable all exceptions with configurable priority
MSR PRIMASK,r0
bx lr
ENDP
;Test special register read
;special register is one of the special-purpose registers: APSR, IPSR, EPSR, IEPSR, IAPSR,
;EAPSR, PSR, MSP, PSP, PRIMASK, or CONTROL.
ALIGN
asm_test_mrs FUNCTION
EXPORT asm_test_mrs
MRS r0, PRIMASK
bx lr
ENDP
只有注册用户才能在此添加评论。 如果您已经注册,请登录。 如果您还没有注册,请注册并登录。