
MOV R5,#15; 给r5寄存器赋值 r5=15
MOV R2,#Oxc ; 给r2寄存器赋值 r2=12
MOV R1,R5; 把r5的值给r1,此时r1=15
ADD R0,R1,R2,LSR #3; r2右移三位,然后加上r1,和给r0 r0 = r1+(r2>>3) = 15+1=16
LDR R4,=0x90000 ; r4 = 0x90000
STR R0,[R4] 把R0的值写入到0x90000所以[0x90000] = 16
STR R0,[R4,#4] 把R0的值写入到0x90000所以[0x90004] = 16
LDR R3,[R4,#4]! 把[0X90000+4]的值写入到r3,然后r4+4,所以 r3 = 16,r4 = 0x90004
HERE B HERE 死跳转
END
CMN负数比较指令
CMN(Compare
Negative)比较指令使用寄存器Rn的值减去operand2的负数值(加上operand2),根据 *** 作的结果更新CPSR中相应的条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。
2.指令的语法格式
CMN{<cond>}
<Rn>,<shifter_operand>
①
<cond>
为指令编码中的条件域。它指示指令在什么条件下执行。当<cond>忽略时,指令为无条件执行(cond=AL(Alway))。
②
<Rn>
指定第一个源 *** 作数寄存器。
③
<shifter_operand>
详见TST指令。
3.指令 *** 作的伪代码
指令 *** 作的伪代码如下面程序段所示。
If
ConditionPassed{cond}
then
ALU_out
=
Rn
+
shifter_operand
N
Flag
=
ALU_out[31]
Z
Flag
=
if
ALU_out==0
then
1
else
0
C
Flag
=CarryFromFrom{Rn+shifter_operand}
V
Falg=OverflowFrom{Rn+shifter_operand}
4.指令举例
例612CMN指令举例。
CMN指令将寄存器<Rn>中的值加上<shifter_operand>表示的数值,根据加法的结果设置CPSR中相应的条件标志位。寄存器<Rn>中的值加上<shifter_operand>的 *** 作结果对CPSR中条件标志位的影响,与寄存器<Rn>中的值减去<shifter_operand>的 *** 作结果的相反数对CPSR中条件标志位的影响有细微差别。当第二个 *** 作数为0或者为0x80000000时二者结果不同。比如下面两条指令。
CMP
Rn,#0;
CMN
Rn,#0;
第一条指令使标志位C值为1,第二条指令使标志位C值为0。
下面的指令使R0值加1,判断R0是否为1的补码,若是,则Z置位。
CMN
R0,#1;
用户程序insmod 核心模块加载:具体如下:
核心模块编译完成后,基本上是个未经符号定位的目标文件(object)(当然,如果这个object又是一些子object经过ld -r生成的话,则子object之间的符号定位是已经完成的),object是一种可重定位的代码,它可以加载到不同位置的内存执行。而真正加载进核心,并成为核心的一部分,则是用户程序insmod和核心几个系统调用共同完成的。在此过程中,insmod主要完成或通过系统调用完成以下的工作:
1)由参数找到模块文件,如insmod fooo,模块文件就是fooo,根据模块文件计算出模块文件所需的内存大小
2)调用系统调用create_module,为该模块分配核心空间内存
3)调用系统调用query_module,得到核心提供的符号表,与系统调用create_module的返回值(核心模块首地址)加在一起对模块进行重定位。
4)在用户空间为核心模块分配内存,并往该段内存复制一个经过定位的object映象。
5)调用系统调用init_module,将用户内存中的模块映象copy到相应的核心空间(首地址为create_module的返回值)。
6)释放用户内存,中止insmod运行。
如果一切顺利,没有出现未定位的符号,则核心模块object就融入系统,成为系统的一部分了。
核心模块的加载过程对核心来说实际是个“静态链接”的过程,这和用户程序动态链接运行过程再链接需要的代码还是不太一样的,当然,object的可重定位特性保证了链接后的代码正常运行,这点倒是比较相似的。
以上回答你满意么?
以上就是关于arm 汇编语言程序 有点看不懂 希望一句一句解释 并帮忙填写下表格全部的内容,包括:arm 汇编语言程序 有点看不懂 希望一句一句解释 并帮忙填写下表格、CMN R1,R2 为什么ARM中汇编CMN完成两个寄存器相加、arm开发板如何运行自己写的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)