ARM汇编
国境之南Fantasy
Coder
展开
-
ARM指令集详解
1 指令格式 (1)基本格式 {}{S} ,{,} 其中, opcode 指令助记符,如LDR,STR 等 cond 执行条件,如EQ,NE 等 S 是否影响CPSR 寄存器的值,书写时影响CPSR,否则不影响 Rd 目标寄存器 Rn 第一个操转载 2016-01-01 00:46:14 · 1559 阅读 · 0 评论 -
内联汇编
这篇介绍一下c内联汇编的使用,准确的说,内联汇编不算是汇编的语法,而是c/c++的语法,虽然c/c++是有标准参考的,但是不同编译器使用的 汇编不同,导致内联汇编是编译器相关的。这里介绍vc和gcc下c的内联汇编使用,vc使用masm语法,gcc自然是AT&T语法。一般来讲,MASM的语法规则较多,也比较复杂,不过内联汇编却相当的方便,相反,AT&T的内联汇编语法规非常复杂,这里先介绍简单转载 2016-01-12 11:12:29 · 1383 阅读 · 0 评论 -
深入理解 x86/x64 的中断体系
实模式下的中断机制中断向量表(IVT)改变中断向量表地址设置自己的中断服务例程保护模式下的中断机制查找 interrupt handler 入口IDT 表中 descriptor 类型的检查使用 16-bit gate descriptorIDT 表的 limit 检查请求访问 interrupt handler 时的权限检查gate 的权限设置interrupt ha转载 2016-01-03 15:41:06 · 9478 阅读 · 2 评论 -
深入理解Linux内核(4)---中断和异常(x86平台)
本文是ULK中断和异常这一章的笔记,讲的是Intel 80x86的中断,与硬件紧密相关,ARM与其有很大不同。中断通常分为同步中断(synchronous)和异步中断(asynchronous):同步中断:是当指令执行时,由CPU控制单元产生的,只有在一条指令终止执行后CPU才会发生中断。异步中断:是由其他硬件设备依照CPU时钟信号随机产生的。Intel微处理器手册中,把同步和异步转载 2016-01-03 15:26:27 · 3665 阅读 · 0 评论 -
浅析Arm Linux中断Vector向量表的建立流程
Linux混入了mmu内存管理之后,ARM的中断是怎么样的呢?和我们在裸板上的中断有没有区别?让我们从源代码入手,做一个粗略的分析:init/main.c->start_kernel()->trap_init()//-----------------------------------------------1.trap_init()//gliethttp函数转载 2016-01-03 01:19:30 · 2441 阅读 · 0 评论 -
ARM Linux Oops使用小结
出现Oops消息的大部分错误时因为对NULL指针取值或者因为用了其他不正确的指针值。Oops如何产生的解释如下: 由于处理器使用的地址几乎都是虚拟地址,这些地址通过一个被称为“页表”的结构被映射为物理地址。当引入一个非法指针的时候,分页机制无法将该地址映射到物理地址,此时处理器就会向操作系统发出一个“页面失效(page fault)”的信号。如果地址非法“换入(page in)”缺失转载 2016-01-02 01:19:29 · 1997 阅读 · 0 评论 -
基本的ATPCS规则
基本ATPCS规定了在子程序调用时的一些基本规则,包括下面四方面的内容。各寄存器的使用规则及其相应的名称。数据栈的使用规则。参数传递的规则。子程序结果的返回规则。1. 寄存器的使用规则及其相应的名称寄存器的使用必须满足下面的规则。子程序间通过寄存器R0~R3来传递参数,被调用的子程序在返回前无需恢复寄存器R0~R3的内容。在子程序中,转载 2016-01-02 01:03:06 · 734 阅读 · 0 评论 -
ARM汇编子程序参数传递
ATPCS规则体现了一种模块化设计的思想,其基本内容是C模块(函数)和汇编模块(函数)相互调用的一套规则(C51中也有类似的一套规则)。我感觉比在线汇编功能强大(不用有很多忌讳),条理更清楚(很简单的几条规则)。规则内容一.被调用模块的寄存器使用 1.调用模块和被调用模块通过R0-R3传递参数,因此参数少于四个时可以随意 使用剩余的而不必保存和恢复转载 2016-01-02 00:54:56 · 9628 阅读 · 0 评论 -
嵌入式STMFD SP!,{R0-R7,LR}分析
STMFD SP!,{R0-R7,LR} 的伪代码如下SP = SP - 9×4;address = SP; for i = 0 to 7Memory[address] = Ri;address = address + 4;Memory[address] = LR;注意:ARM规定,sp始终是指向栈顶位置的,STM指令把寄存器列表中索引最小的寄存器存在最低转载 2016-01-02 00:40:36 · 6779 阅读 · 0 评论 -
ARM LR寄存器
异常的发生会导致程序正常运行的被打断, 并将控制流转移到相应的异常处理(异常响应),有些异常(fiq、irq)事件处理后,系统还希望能回 到当初异常发生时被打断的源程序断点处继续完成源程序的执行(异常返回),这就需要一种解决方案, 用于记录源程序的断点位置,以便正确的异常返回。 类似的还有子程序的调用和 返回。在主程序中(通过子程序调用指令)调用子程序时,也需要记录下主程序中的调用转载 2016-01-02 00:25:25 · 9650 阅读 · 0 评论 -
ARM汇编指令集
ARM处理器的指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令6大指令。一、跳转指令跳转指令用于实现程序流程的跳转,在ARM程序中有以下两种方法可以实现程序流程的跳转。Ⅰ.使用专门的跳转指令;Ⅱ.直接向程序计数器PC写入跳转地址值,通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前转载 2016-01-01 00:58:59 · 526 阅读 · 0 评论 -
ARM体系中存储系统非对齐的存储访问操作
ARM 系列处理器是 RISC (Reducded Instruction Set Computing)处理器。很多基于ARM的高效代码的程序设计策略都源于RISC 处理器。和很多 RISC 处理器一样,ARM 系列处理器的内存访问,也要求数据对齐,即存取“字(Word)”数据时要求四字节对齐,地址的bits[1:0]==0b00;存取“半字 (Halfwords)”时要求两字节对齐,地址的b转载 2016-07-16 16:54:41 · 1256 阅读 · 0 评论