LDR/STR和MOV有什么区别?ARM中的汇编指令貌似比51单片机的复杂啊

看书得出以下结论,不知对不对
LDR Rd , addressing ;Rd←[addressing](load)
STR Rd , addressing ;[addressing]←Rd (store)
MOV Rd ,operand2 ; Rd←operand2
LDR可以装载32Wie立即数,而MOV只能装载8位图立即数
貌似STR可实现地址偏移(是不是所谓前索引偏移?那么有后索引偏移么?)避免重复装载地址操作。

MOV是从一个寄存器或者移位的寄存器或者立即数的值传递到另外一个寄存器
从本质上是寄存器到寄存器的传递,为什么会有立即数,其实也是有限制的立即数,不是所有立即数都可以传递的
这个立即数要符合一个8位数循环右移偶数位的取值
原因是,MOV本身就是一条32bit指令,除了指令码本身,它不可能再带一个可以表示32bit的数字,所以用了其中的12bit来表示立即数,其中4bit表示移位的位数(循环右移,且数值x2),8bit用来表示要移位的一个基数

可以看出,并不是所有数都可以表示成一个8bit数循环右移偶数位的

LDR和STR用来存取内存,关于"索引偏移",你是不是指pre-indexed addressing和post-indexed addressing
pre-indexed addressing是指地址经过运算不写回基址寄存器
post-indexed addressing则回写到基址寄存器

比如
pre-indexed addressing:
mov r1,#0
STR r0, [r1, #0x10] ;r1+0x10这个是所用的实际地址值,但是不回写入r1,在此句之后,r1=0

post-indexed addressing:
STR r0, [r1], #0x10 ;r1+0x10这个是所用的实际地址值,这个值回写入r1,此句之后,r1=0x10

还有一点是关于ldr的,其实ldr可以装载一个32bit立即数的说法并不确切,因为实际上并不是这一条语句装载了一个32bit立即数,比如
ldr r1, =0x12345678
其实真正的汇编代码是将某个地址的值传递给r1,就是说需要一个地址存放0x12345678这个立即数,实际上可以看作是一条伪指令
而且如果这个立即数可以用mov指令的形式来表达,会被编译器实际用mov来代替
比如:
ldr r1,=0x10
会变成
mov r1,#0x10

参考资料:ARM ArchitectureReference Manual

温馨提示:内容为网友见解,仅供参考
第1个回答  2009-07-07
LDR/STR 跟mov最大都差别是LDR/STR就是用来读跟写数据的,而mov是可以送数和读写数据...ARM的指令比较多,比51复杂,但是用C来写就差不多,就是寄存器多一点
第2个回答  2009-07-07
ARM是哈佛结构的只用LDR和STR等访问内存指令
第3个回答  2018-01-16
MOV是从一个寄存器或者移位的寄存器或者立即数的值传递到另外一个寄存器
从本质上是寄存器到寄存器的传递,为什么会有立即数,其实也是有限制的立即数,不是所有立即数都可以传递的
这个立即数要符合一个8位数循环右移偶数位的取值
原因是,MOV本身就是一条32bit指令,除了指令码本身,它不可能再带一个可以表示32bit的数字,所以用了其中的12bit来表示立即数,其中4bit表示移位的位数(循环右移,且数值x2),8bit用来表示要移位的一个基数
可以看出,并不是所有数都可以表示成一个8bit数循环右移偶数位的
LDR和STR用来存取内存,关于"索引偏移",你是不是指pre-indexed addressing和post-indexed addressing
pre-indexed addressing是指地址经过运算不写回基址寄存器
post-indexed addressing则回写到基址寄存器
比如
pre-indexed addressing:
mov r1,#0
STR r0, [r1, #0x10] ;r1+0x10这个是所用的实际地址值,但是不回写入r1,在此句之后,r1=0
post-indexed addressing:
STR r0, [r1], #0x10 ;r1+0x10这个是所用的实际地址值,这个值回写入r1,此句之后,r1=0x10
还有一点是关于ldr的,其实ldr可以装载一个32bit立即数的说法并不确切,因为实际上并不是这一条语句装载了一个32bit立即数,比如
ldr r1, =0x12345678
其实真正的汇编代码是将某个地址的值传递给r1,就是说需要一个地址存放0x12345678这个立即数,实际上可以看作是一条伪指令
而且如果这个立即数可以用mov指令的形式来表达,会被编译器实际用mov来代替
比如:
ldr r1,=0x10
会变成
mov r1,#0x10

LDR\/STR和MOV有什么区别?ARM中的汇编指令貌似比51单片机的复杂啊
原因是,MOV本身就是一条32bit指令,除了指令码本身,它不可能再带一个可以表示32bit的数字,所以用了其中的12bit来表示立即数,其中4bit表示移位的位数(循环右移,且数值x2),8bit用来表示要移位的一个基数 可以看出,并不是所有数都可以表示成一个8bit数循环右移偶数位的 LDR和STR用来存取内存,...

arm中mov指令和ldr指令有何区别?
1、两者含义不同 mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中。x86中没有ldr这种指令,因为x86的mov指令可以将数据从内存中移动到寄存器中。但是有ldr伪指令,虽然ldr伪指令和ARM的ldr指令很像,但是作用不太一样。ldr伪指令可以在立即数前加上=,以表示把一个地址写到某寄存器中。2、两...

arm嵌入式LDR和STR的简单提问
LDR R0, [R1] 这条指令的意思是,将R1中的值作为地址,将地址里面存的值复制给寄存器R0STR R1,[R0]这条指令的意思是,将R1里面的值,复制到以R0里面的值作为地址的内存里面。avr和arm分别是两类微控制器,就好像intel和AMD的CPU一样.嵌入式系统是一个智能电子领域,包含各种硬件平台软件系统,比如...

ARM中LDR载入指令
所以,ldr伪指令和mov是比较相似,mov指令限制了立即数的长度为8位,是不能超过512。ldr伪指令没有这个限制。如使用ldr伪指令时,后面跟的立即数没有超过8位,在实际汇编的时候该ldr伪指令是被转换为 mov指令。 arm中mov指令和ldr指令有何区别? MOV和LDR的区别,资料从记忆体到CPU之间的移动只能通过LDR\/STR指令来完...

主要的汇编指令有哪些?
\\x0d\\x0aLDR{cond}B{T} Rd, 指令加载指定地址的字节数据到Rd的的最低字节中(Rd的高24位清零);\\x0d\\x0aSTR{cond}B{T} Rd, 指令存储Rd中的最低字节数据到指定的地址单元中。\\x0d\\x0a T为可选后缀,若有T,那么即使处理器是在特权模式下,存储系统也将访问看成处理器...

arm 汇编胡问题 , ldr pc,lr
回答1:你的指令用的不对,MOV可以随意执行寄存器\/立即数到寄存器的数据传输,因此MOV那条指令没问题;但是LDR指令是从内存单元加载数据到寄存器,既然是加载,那么源操作数必须是地址,无论是以什么形式(如直接地址、间接地址)产生的地址,但LR只是个寄存器,违反了指令使用规范;那条可以这样改:STR LR...

急要周立功主编<ARM嵌入式系统基础教程>课后习题答案
(4)LDR\/STR指令的偏移形式有哪4种?LDRB和LDRSB有何区别?(1) 零偏移;(2) 前索引偏移;(3) 程序相对偏移;(4) 后索引偏移。LDRB就是读出指定地址的数据并存入指定寄存器,LDRSB读出指定地址的数据,并高24位用符号位扩展,再存入指定寄存器。(5)请指出MOV指令与LDR加载指令的区别及用途。MOV 将 8 位图(pattern)...

主要的汇编指令有哪些啊
STR{cond}B{T} Rd, <地址> 指令存储Rd中的最低字节数据到指定的地址单元中。T为可选后缀,若有T,那么即使处理器是在特权模式下,存储系统也将访问看成处理器是在用户模式下,T 在用户模式下无效,不能与前索引偏移一起使用T。地址部分可用的形式有4种:零偏移(zero offset) [Rn] ,Rn的...

汇编语言中的STR是什么意思.还有CALL指令怎么用?
ARM的汇编中有STR指令,STR是寄存器数据放到内存,即存储(写).与LDR意思相反。回复不要乱选满意答案,会误导的,看评论 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 istone107 2012-09-08 知道答主 回答量:51 采纳率:100% 帮助的人:21.3万 我也去答题访问个人页 关注 展开全部 STR是...

arm 汇编 指令看不太懂,高手解释下
LDRCC 小于则装载内存数据到寄存器,LDR装载,CC小于 STRCC BCC类似 <助记符>{<执行条件>}{S} <Rd>,<Rn>{,第2操作数} 有S则表示影响CPSR寄存器的值 条件码助记符:EQ 相等 NE 不相等 CS\/HS 无符号数大于或等于 CC\/LO 无符号数小于 MI 负数 PL 正数或零 VS 溢出 VC 没有溢出 HI 无...

相似回答