位置相关和无关码.doc_第1页
位置相关和无关码.doc_第2页
位置相关和无关码.doc_第3页
位置相关和无关码.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ARM下的位置无关和相关码位置无关代码,即该段代码无论放在内存的哪个地址,都能正确运行。究其原因,是因为代码里没有使用绝对地址,都是相对地址。而位置相关码,即它的地址与代码处于的位置相关,是绝对地址,如:mov PC ,#0xff;ldr pc,=0xffff等。一、位置无关的写法:(1) B指令B指令接受一个相对地址,因此在汇编里用B跳转到一个标号时,实际编译的结果是一个相对跳转。相对地址有个范围限制,即目标不能太远,一般目标放在同一个文件里是肯定可以的。 Offset must IN 32Mbit_start: b _reset_reset: .(2) BLBL用于调用函数,也是一个相对跳转,same as B instrction(3) ADR获取标号的地址,在编译时会使用PC+偏移的方式得到该位置的地址。例如,当TEXT_BASE是0时SMRDATA可能被放在0x100的位置,当TEXT_BASE为0x30000000时放在0x30000100的位置。使用ADR总能获取正确的位置,与程序的加载地址无关。 ADR R0, SMRDATASMRDATA: .word 0x22111120 .word 0x00002F50 .word 0x00000700(相应的, LDR Rn, =LABEL是位置相关的)(4) LDR当加标号时,LDR可以用于伪指令,也可以真指令。真指令: (标号前不加=号,表示取标号处的值) LDR R0, SDRDATA实际被编译为LDR R0, PC, #NN,其中NN是目标的相对距离伪指令: (标号前加=号,取标号的地址) LDR R0, = SDRDATA实际编译的时候的时候,会在某位置存处SDRDATA的值,然后用一个LDR取出来。显然,用LDR时,加不加=号有很大区别。无=号:取该标号处的值,位置无关有=号:取该标号的地址,位置相关举例分析例1:中断向量跳转_start: b reset ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ldr pc, _not_used ldr pc, _irq ldr pc, _fiq_undefined_instruction: .word undefined_instruction_software_interrupt: .word software_interrupt_prefetch_abort: .word prefetch_abort_data_abort: .word data_abort_not_used: .word not_used_irq: .word irq_fiq: .word fiq其中,ldr pc, _irq,由于没加=号,表示取值_irq处的值放在pc里 (位置无关)_irq: .word irq ,表示_irq存放的值是irq的绝对地址(位置有关)例2:bl main ; 位置无关ldr pc, =main; 把main的地址放在pc,位置相关例3: 静态变量_MAGIC_NUM: .word 0x12345678取值 LDR R0, _MAGIC_NUM ; 位置无关例4: 存放标号绝对地址(绝对地址是编译的时候已经固定)_OS_Running_p: .word OS_Runing则_OS_Running_p存放的是标号OS_Running的绝对地址例5: 显式LDR和隐式LDR以给某C中的变量的g_num赋值为例(1) 使用伪指令LDR,即为隐式 LDR R0, =g_num 取g_num的地址到R0 MOV R1, #10 STR R1, R0(2) 显式赋值先定义一个变量p_g_num,用于保存g_num的地址p_g_num: .word g_num g_num的绝对地址然后赋值 LDR R0, p_g_num MOV R1, #10 STR R1, R0显然,两者其实一样,伪指令被展开后其实就是(2)的样子。不同点在于:在多次引用的时候,如果使用伪指令,则会有多个临时定义。所以,在多次引用的时候应该使用显式定义。例6: 使用LinkScript中的变量这种情形和例5相同1) LinkScript中定义了两个位置 _bss_start = .; .bss : *(.bss) _end = .;2) 定义两个变量,用于存处这两个位置.globl _bss_start_bss_start: .word _bss_start.globl _bss_end_bss_end: .w

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论