arm 汇编语言程序 有点看不懂 希望一句一句解释 并帮忙填写下表格

arm 汇编语言程序 有点看不懂 希望一句一句解释 并帮忙填写下表格,第1张

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开发板如何运行自己写的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9733979.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存