.text @当前汇编里注释用‘@’ .test声明下面的内容属于文本段内容
.global _start @.global声明_start为一个全局标签
_start:@汇编里的标签,类似于c语言里的函数
mov r1,#1 @汇编命令 将1保存到r1寄存器
stop: b stop @跳转到stop标签
map.lds是一个链接脚本文件 程序最终链接时,链接器读取链接脚本的内容,按照链接脚本指定的规则将指定的代码存放在内存的不同位置
伪操作 .text .global .end .if .else .endif .data 可以实现和指令类似的功能 占4字节
数据搬移指令 = 数据移位指令 << >> 数据算数运算指令
+ - * / 位运算指令 & | ~ ^ 数据比较指令
2.跳转指令 3.内存读写指令 4.状态寄存器读写指令 5.软中断指令
mov:将第一操作数的值保存在目标寄存器
mvn:将第一操作数的值按位取反,将结果保存在目标寄存器
LDR 目标寄存器,=数值 将指定的数据放在目标寄存器中
移位指令 格式:
将第一操作寄存器的数值移位第二操作数指定的位数,将结果保存在目标寄存器中
LSL:左移运算 低位补0 LSR:右移运算 高位补0 ROR:循环右移:低位移出的值补到高位
位运算指令 格式:
将第一操作寄存器和第二操作数进行位运算,将结果保存在目标寄存器中
and:与 与0清0 与1不变 orr:或 或1置1 或0不变 eor:异或 相同为0 不同为1
bic:按位清零指令,想将哪一位设置为0,只需要用bic指令给这一位运算一个1即可
算术运算指令 格式:
将第一操作寄存器的值和第二操作数进行算数运算,结果保存在目标寄存器中
add:加法运算 adc:进行加法运算时需要考虑CPSR的条件位
sub:减法运算 sbc:进行减法运算时需要考虑CPSR的条件位 mul:乘法运算
比较指令 cmp 第一操作数,第二操作寄存器 用于比价数据
就是比较的两个数进行减法运算,并且减法运算的结果会影响到CPSR寄存器的条件位
跳转指令
指令码: b:跳转时不影响LR寄存器的值
指令码以及功能
向内存中写: str:向内存中写一个字(4字节)的数据 strh:写半个字(2字节)strb:一个字节
从内存读: ldr:从内存读取一个字的数据 ldrh:读取半个字的数据 ldrb:读取一个字节的数据
指令码{条件码} 目标寄存器 [目标地址]
str 目标寄存器 ,[目标地址]:将目标寄存器的数据写入到以目标地址为起始的内存中
ldr 目标寄存器 ,[目标地址]:从以目标地址为起始的内存中读一个字的数据到目标寄存器
向内存写: stm 目标地址,{寄存器列表} 将寄存器列表中每一个寄存器的值都写道目标地址指向的连续空间之中
从内存读 ldm 目标地址,{寄存器列表} 将目标地址指向的连续内存中的数据读到寄存器列表中的寄存器中
ia后缀 先写入然后地址向地址大的方向增长 ib先向地址大的方向增长然后写入数据
da后缀先向指向的内存中存数据,然后寄存器保存的地址往地址小的方向增长
DB后缀先将保存的地址往地址小的方向增长,再往保存的地址内存中存入数据
————————————————
版权声明:本文为CSDN博主「SongJia_6」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/SongJia_6/article/details/133616762