ARM汇编
文章平均质量分 68
如小丧
这个作者很懒,什么都没留下…
展开
-
B BL指令浅析
B或BL指令引起处理器转移到“子程序名”处开始执行。两者的不同之处在于BL指令在转移到子程序执行之前,将其下一条指令的地址拷贝到R14(LR,链 接寄存器)。由于BL指令保存了下条指令的地址,因此使用指令“MOV PC ,LR”即可实现子程序的返回。而B指令则无法实现子程序的返回,只能实现单纯的跳转。用户在编程的时候,可根据具体应用选用合适的子程序调用语句。 AREA Init,COD转载 2014-10-05 18:01:24 · 1011 阅读 · 0 评论 -
常用ARM汇编指令及ATPCS规则
常用ARM汇编指令及ATPCS规则 2010-02-16 00:15:08| 分类: 嵌入式|举报|字号 订阅在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时的初始化,进出中断时的环境保存、恢复,对性能要求非常苛刻的函数等。1、相对跳转指令: b 、 bl 不同之处在于: bl 指令除了跳转之外,还将返回地址( bl 的下一条指转载 2014-10-11 18:26:49 · 1338 阅读 · 0 评论 -
GUN ASM概述
转自:http://blog.csdn.net/shuzjd/article/details/7916515GAS指代GUN ASM一、简介 作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但重要性却勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。就拿 Linux 内核来讲,虽然绝大部分代码是用 C 语言编写的,但仍然不可避免地在某些关键地方使用了汇编代转载 2014-10-05 18:05:27 · 629 阅读 · 0 评论 -
常用ARM汇编指令及ATPCS规则
转自:http://kinglaw05.blog.163.com/blog/static/5968331420101160158144/在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时的初始化,进出中断时的环境保存、恢复,对性能要求非常苛刻的函数等。1、相对跳转指令: b 、 bl 不同之处在于: bl 指令除了跳转之外,还将返回地址( bl 的下一条指令的地址)保存转载 2014-10-05 20:01:27 · 566 阅读 · 0 评论 -
u-boot 代码中常见汇编指令
在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初始化,进出中断时的环境保护,恢复等对性能有要求的地方。ARM指令集可以分为六大类,分别为数据处理指令 、Load/Store指令 、跳转指令 、程序状态寄存器处理指令 、协处理器指令 和异常产生指令 。 ARM 指令使用的基本格式如下: 〈opcode〉{〈cond〉}{S} 〈Rd〉,〈Rn〉{,〈operand转载 2014-10-18 22:14:19 · 456 阅读 · 0 评论 -
u-boot 代码中常见汇编指令
在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初始化,进出中断时的环境保护,恢复等对性能有要求的地方。ARM指令集可以分为六大类,分别为数据处理指令 、Load/Store指令 、跳转指令 、程序状态寄存器处理指令 、协处理器指令 和异常产生指令 。 ARM 指令使用的基本格式如下: 〈opcode〉{〈cond〉}{S} 〈Rd〉,〈Rn〉{,〈opera转载 2014-10-19 15:39:05 · 441 阅读 · 0 评论 -
关于adr指令的理解
之前在阅读arm的汇编代码时,碰到了adr指令,查arm的指令手册,只说该指令是采用相对地址的,但这个相对地址应该怎么理解,却没有具体说明。之后在网上以adr指令为关键字进行搜索,也没有找到进一步的知识。结果,今天在搜索android资料的时候,意外的发现了adr指令与ldr指令的不同,一下子解决了心中的问题。以adr指令与ldr指令对比作为关键字,甚至可以搜到好几篇文章,实在是......转载 2014-10-18 23:47:32 · 506 阅读 · 0 评论 -
arm汇编—ldr加载指令,ldr伪指令
1,ldr加载指令LDR指令的格式为:LDR{条件} 目的寄存器,LDR指令用亍从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用亍从存储器中读取32位的字数据到通用寄存器,然后对数据迕行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。该指令在程序设计中比较常用,丏寻址方式灵活多样,请读者认真掌握。转载 2014-10-18 23:46:27 · 2488 阅读 · 0 评论 -
Linux下使用objdump+vim+xxd进行反汇编并修改指令
前段时间花了一个星期时间马马虎虎算是对汇编入了门吧(好吧,其它我还是什么都不懂),最近又开始对汇编有点兴趣了,于是想试下反汇编的感觉并尝试自己修改下指令据说对一个程序反汇编后再修改的方法是以十六进制的方式打开程序,然后再通过一些工具找到相关的位置再用相关工具计算出偏移量等然后再做修改,不过我从来没搞过反汇编,对汇编也是一知半解的样子,所以就没那么专业了,至于能不能直接使用汇编的助记符修改我还不转载 2014-10-20 22:09:03 · 2348 阅读 · 0 评论 -
ARM GNU 汇编伪指令简介
1 ARM GNU 汇编伪指令简介 (1)abort .abort 停止汇编 (2)align .align absexpr1,absexpr2 以某种对齐方式,在未使用的存储区域填充值. 第一个值表示对齐方式,4, 8,16或 32. 第二个表达式值表示填充的值 (3)if...else...endif .if转载 2014-10-21 10:47:03 · 486 阅读 · 0 评论 -
AT&T汇编语法格式
一、AT&T 格式Linux 汇编语法格式在 AT&T 汇编格式中,寄存器名要加上 '%' 作为前缀;而在 Intel 汇编格式中,寄存器名不需要加前缀。例如:AT&T 格式Intel 格式pushl %eaxpush eax在 AT&T 汇编格式中,用 '$' 前缀表示一个立即操作数;而在 Intel 汇编格式中,立即数的表示不用带任何前缀。例如:AT&T 格式I转载 2014-10-11 10:21:23 · 2243 阅读 · 0 评论 -
__asm__ __volatile__("": : :"memory")
memory 强制gcc编译器假设RAM所有内存单元均被汇编指令修改,这样cpu中的registers和cache中已缓存的内存单元中的数据将作废。cpu将不得不在需要的时候重新读取内存中的数据。这就阻止了cpu又将registers,cache中的数据用于去优化指令,而避免去访问内存。 The GCC manual says using 'asm volatile' p转载 2014-10-09 01:49:35 · 730 阅读 · 0 评论 -
_armboot_start 内容的疑问
--------------------------------------------------------------------------------"aaronwong: u-boot中代码的疑问(_armboot_start与_start)?12Gm---------------------------=j我使用的是u-boot-1.3.0-rc2。在cpu/pxa/st转载 2014-10-23 14:44:14 · 458 阅读 · 0 评论 -
汇编 bne 1b和bne 1f浅析
以前看过的汇编代码只有b,原创 2014-10-06 12:44:12 · 6144 阅读 · 2 评论 -
adr和ldr
这两个都是伪指令:adr是小范围的地址读取伪指令,ldr是大范围的读取地址伪指令。可实际上adr是将基于PC相对偏移的地址值或基于寄存器相对地址值读取的为指令,而ldr用于加载32为立即数或一个地址到指定的寄存器中。到这儿就会看到其中的区别了。如果在程序中想加载某个函数或者某个在联接时候指定的地址时请使用adr,例如在lds中需要重新定位的地址。当加载32为的立即数或外部地址时请用ldr。转载 2014-10-23 09:37:23 · 488 阅读 · 0 评论 -
uboot中的TEXT_BASE
都知道U-BOOT分为两个阶段,第一阶段是(~/cpu/arm920t/start.S中)在FLASH上运行(一般情况下),完成对硬件的初始化,包括看门狗,中断缓存等,并且负责把代码搬移到SDRAM中(在搬移的时候检查自身代码是否在SDRAM中),然后完成C程序运行所需要环境的建立,包括堆栈的初始化等,最后执行一句跳转指令: ldr pc, _start_armboot转载 2014-10-23 09:12:29 · 471 阅读 · 0 评论 -
ARM存储器访问指令——多寄存器存取
•LDR和STR——字和无符号字节加载/存储指令 LDR指令用于从内存中读取单一字或字节数据存入寄存器中,STR指令用于将寄存器中的单一字或字节数据保存到内存。指令格式如下: LDR{cond}{T} Rd, ;将指定地址上的字数据读入Rd STR{cond}{T} Rd, ;将Rd中的字数据存入指定地址 LDR{cond}B{T} Rd, ;将指定地址上的字节数转载 2014-10-23 11:21:21 · 1735 阅读 · 0 评论 -
STMFD和LDMFD指令个人理解分析
LDM/STM指令主要用于现场保护,数据复制,参数传送等。STMFD指令STMFD Rn{!},{reglist}{^} STMFD SP!,{R0-R7,LR}对于这条指令伪代码的解释,网上是这么说的:SP = SP - 9×4; address = SP; for i = 0 to 7 Memor转载 2014-10-23 12:25:25 · 948 阅读 · 0 评论 -
关于ARM9协处理器CP15及MCR和MRC指令
在基于ARM的嵌入式应用系统中,存储系统通常是通过系统控制协处理器CP15完成的。CP15包含16个32位的寄存器,其编号为0~15。访问CP15寄存器的指令MCR ARM寄存器到协处理器寄存器的数据传送MRC 协处理器寄存器到ARM寄存器的数据传送MCR指令和MRC指令只能在处理器模式为系统模式时执行,在用户模式下执行MCR指令和MRC指令将会触发未定义指转载 2014-10-06 17:25:23 · 562 阅读 · 0 评论 -
ARM汇编中LDR与LTORG的关系
最近对LDR与LTORG有了一些新的认识。 LDR是一个比较复制的指令。作用是从存储器到寄存器的单一数据读取指令。它有19条指令格式。其中有两条格式为宏指令(macro),格式如下:1,LDRRd,2,LDR Rd,= 这里重点分析下第二条宏指令。它会被编译器编译成一条指令,把给定的32位数值保存到寄存器Rd.通常这掉指转载 2014-10-07 15:31:58 · 558 阅读 · 0 评论 -
关于adr指令的理解
转自:http://blog.csdn.net/batoom/article/details/6658603之前在阅读arm的汇编代码时,碰到了adr指令,查arm的指令手册,只说该指令是采用相对地址的,但这个相对地址应该怎么理解,却没有具体说明。之后在网上以adr指令为关键字进行搜索,也没有找到进一步的知识。结果,今天在搜索android资料的时候,意外的发现了adr指令与ldr指令的不同,转载 2014-10-07 15:33:37 · 835 阅读 · 0 评论 -
u-boot第一阶段初始化流程(反汇编分析)
1.设置中断向量表为了更清楚,彻底的理解u-boot,我会全部从反汇编的代码去分析忘记的朋友先补下课啦,提示:arm-linux-objdump -D u-boot>u-boot.s====================================================================================================.转载 2014-10-07 15:35:21 · 984 阅读 · 0 评论 -
linux内嵌汇编语言
一.声明 虽然Linux的核心代码大部分是用C语言编写的,但是不可避免的其中还是有一部分是用汇编语言写成的。有些汇编语言代码是直接写在汇编源程序中的,特别是Linux的启动代码部分;还有一些则是利用gcc的内嵌汇编语言嵌在C语言程序中的。这篇文章简单介绍了gcc中的内嵌式汇编语言,主要想帮助那些才开始阅读Linux核心代码的朋友们能够更快的入手。写这篇文章的主要信息来源是GNU的两个i转载 2015-04-24 23:43:38 · 453 阅读 · 0 评论