汇编语言-arm 汇编胡问题,,ldr pc,lr

问题描述

arm 汇编胡问题,,ldr pc,lr

arm 汇编胡问题
我想问您一下arm 汇编胡问题,如下。

.globl
_start:
bl _test
_end:
b _end
_test:
mov pc,lr @ 编译通过;
@ldr pc,lr @不能编译通过

问题:
1。
ldr pc,lr @不能编译通过
这是为什么?
2。
如下
bic r0,r0,#0x00ff
bic r0,r0,#0xff00
没有问题,但
bic r0,r0,#0xffff
就不行,是不是,1,2,都是一种错误呢?
谢谢。。。
本人新手,请多关照!

解决方案

arm汇编里面返回指令为什么能用mov pc ,lr而不能用ldr pc,=lr?

你在调用函数之前不是把返回地址存在lr中了吗?返回的时候只要再把lr的值赋给PC就行
LDR r0,=name,像这种带等号的是伪指令,而不是ARM指令,LDR 伪指令用于加载立即数或一个地址值到指定寄存器.
*如果name是立即数的话:LDR R0,=0X123;//将0X123存入R0
*如果name是个标识符:LDR R0,=NAME;//将NAME的地址存入R0
LR是寄存器,不是标示符

解决方案二:

to:PB人生

【LR】既然是寄存器,

LDR PC,LR 什么不可行?
不能理解为 将LR中的值赋给PC吗?

LDR R0,R1 ,,, 这样不是一个道理吗?

解决方案三:

ldr就是做普通协处理器的 pc是第13个 不能用

时间: 2024-11-01 03:02:21

汇编语言-arm 汇编胡问题,,ldr pc,lr的相关文章

ARM汇编逆向iOS 实战_IOS

我们先讲一些ARM汇编的基础知识.(我们以ARMV7为例,最新iPhone5s上的64位暂不讨论) 基础知识部分: 首先你介绍一下寄存器: R0-R3:用于函数参数及返回值的传递 R4-R6, R8,R10-R11:没有特殊规定,就是普通的通用寄存器 R7:栈帧指针(Frame Pointer).指向前一个保存的栈帧(stack frame)和链接寄存器(link register, lr)在栈上的地址. R9:操作系统保留 R12:又叫IP(intra-procedure scratch),

ARM汇编中伪指令的介绍

伪指令没有相对应的操作码,他们所完成的操作称为伪操作.     伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成(就如你睡觉她为你铺床,铺在哪儿和铺床技巧由她安排,但她不陪你睡觉,铺好了就走 :-( ). 在 ARM 的汇编程序中,有如下几种伪指令:符号定义伪指令.数据定义伪指令.汇编控制伪指令.宏指令以及其他伪指令. 符号定义( Symbol Definition )伪指令 符号定义伪指令用于定义 ARM 汇编程序中的变量

使用ARM汇编破解iOS程序基础知识分享_IOS

一.Thumb指令与ARM指令 Thumb指令为16位,因此存储代码的密度高,节省存储空间.但是功能不全,它只是ARM指令(32位)集的补充,是ARM指令集下的一个子集.在初级阶段我们不需要了解这些知识,只要有个概念知道有这么个东西就可以. 二.ARM的寄存器初步了解 R0-R3: 用于函数参数及返回值的传递,超过4个参数,其它参数存在栈中,在ARM中栈是向下生长的,R0还可以作为返回值. R4-R6, R8,R10-R11: 没有特殊规定,就是普通的通用寄存器 R7: 栈帧指针,指向母函数与被

汇编语言-关于汇编指令jmp的问题

问题描述 关于汇编指令jmp的问题 本人初学汇编语言,所用教材为汇编语言第3版(清华大学王爽著).发现win8.1没有debug功能,无奈只好去下了个DOSBox将就着用.学了-r -d -a -u -e指令都没问题,就是在jmp的这条指令下被卡住了.书上写的是jmp 段地址:偏移地址重新改写CS:IP或者jmp []只修改IP的值.可在我上机实践的时候发现上述两种用法被提示错误.如图: 不知是哪出了问题了,我已经用过几种搜索引擎均不见成效,朋友们求帮忙呗 小弟感激不尽!

汇编语言-8086汇编寄存器与段代码

问题描述 8086汇编寄存器与段代码 datasg segment db '.find...........' db '.moonth.........' db '.sun............' db '.visit..........' datasg ends 当mov ax,datasg的时候ax保存的是datasg的[0]单元地址还是datasg的数据,如果保存的是数据,那最大存储大小是多少,是如何计算的 解决方案 对,是段的首地址.在8086下,段的大小是64k. 8086实在是太古

嵌入式 uboot以及kernel添加看门狗临时记录(个人记录未整理乱)

Uboot_Kernerl_Add_Watch_Dog:   U-Boot 2010.06 (Nov 01 2013 - 15:28:44) DRAM:  128 MiBCheck spi flash controller v350... FoundSpi(cs1) ID: 0xEF 0x40 0x18 0x00 0x00 0x00Spi(cs1): Block:64KB Chip:16MB Name:"W25Q128B"*** Warning - bad CRC, using def

Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7) 【转】

转自:http://blog.chinaunix.net/uid-25909619-id-4938388.html   研究内核源码和内核运行原理的时候,很总要的一点是要了解内核的初始情况,也就是要了解内核启动过程.我在研究内核的内存管理的时候,想知道内核启动后的页表的放置,页表的初始化等信息,这促使我这次仔细地研究内核的启动代码.       CPU在bootloader的帮助下将内核载入到了内存中,并开始执行.当然,bootloader必须为zImage做好必要的准备:  1. CPU 寄存

Android ARM常用的汇编指令合集

               ARM   处理器的指令集可以分为 跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.加载/存储指令.协处理器指令和异常产生指令  六大指令,这里把其它几个指令一起发了出来,可以查看具体的目录,请点击头部左上角 一.跳转指令 跳转指令用于实现程序流程的跳转,在ARM程序中有以下两种方法可以实现程序流程的跳转.Ⅰ.使用专门的跳转指令: Ⅱ.直接向程序计数器PC写入跳转地址值,通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前

arm9-ARM汇编,MDK,ARM初学

问题描述 ARM汇编,MDK,ARM初学 我是一名linux嵌入式初学者,现在在看ARM处理器. 使用的是一块S3C2440的开发板,目前的开发调试环境是KEIL4. 我在一个添加了启动代码的工程中添加一个自己编写的简单汇编文件.然后在启动代码的C入口点处修改,import添加的简单汇编文件中的程序段,并使其跳转到该程序段. 编译不能通过,错误提示的我编写的汇编文件中定义的label没有定义.想知道如何解决. 我想在启动代码执行结束后调用一个定义在其他文件中的汇编程序. 解决方案 以下是我自己写