随笔分类 -  [ 编程语言 - ARM ASM ]#

摘要:简介 这两个都是伪指令:ADR 是小范围的地址读取伪指令,LDR 是大范围的读取地址伪指令。可实际使用的区别是: ADR 是将基于 PC 相对偏移的地址值或基于寄存器相对地址值读取的伪指令,而 LDR 用于加载 32 位立即数或一个地址到指定的寄存器中。 以下面的汇编代码为例: ~~~~ .glob 阅读全文
posted @ 2018-07-20 19:35 Zackary丶Liu 阅读(11284) 评论(0) 推荐(1)
摘要:简介 __weak 或 [weak] 具有相同的功能,用于定义变量或者函数,常见于定义函数,在 MDK 链接时优先链接定义为非 weak 的函数或变量,如果找不到则再链接 weak 函数。 在STM32 的启动文件中有以下定义: ~~~~ ; Reset handler Reset_Handler 阅读全文
posted @ 2018-04-19 22:15 Zackary丶Liu 阅读(546) 评论(0) 推荐(0)
摘要:简介 DCD:数据定义( Data Definition )伪指令 一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。 语法格式: ~~~~ 标号 DCD(或 DCDU) 表达式 ~~~~ DCD(或 DCDU)伪指令用于分配一片连续的字存储单元并用指定的表达式初始化。其中表达式可 阅读全文
posted @ 2018-04-18 21:51 Zackary丶Liu 阅读(14622) 评论(0) 推荐(3)
摘要:在 Uboot 的 Start.S 中存在以下源码: ~~~~ .globl _start _start: b start_code ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort 阅读全文
posted @ 2018-04-12 21:28 Zackary丶Liu 阅读(523) 评论(0) 推荐(0)
摘要:ENTRY ENTRY 是程序入口伪指令。在一个完整的汇编程序中至少有一个 ENTRY,编译程序在编译连接时依据程序入口进行连接。在只有一个入口时,编译程序会把这个入口的地址定义为系统复位后的程序起始点。但在一个源文件里最多只能有一个 ENTRY。 指令示例: ~~~~ AREA Example, 阅读全文
posted @ 2018-04-09 22:44 Zackary丶Liu 阅读(1782) 评论(0) 推荐(0)
摘要:指令简介: ~~~~ adr r0, _start 得到的是 _start 的当前执行位置,由 pc+offset 决定 ldr r0, =_start 得到的是绝对的地址,链接时决定 ~~~~ 程序示例: ~~~~ ldr r0, _start adr r0, _start ldr r0, =_s 阅读全文
posted @ 2018-04-08 21:58 Zackary丶Liu 阅读(432) 评论(0) 推荐(1)
摘要:我们以 LDR 指令为例来分别举例分析。 LDR 指令的格式为: ~~~~ LDR{条件} 目的寄存器, ~~~~ LDR 指令是字加载指令,用于从存储器中将一个 32 位的字数据送到目的寄存器中。该指令通常用于从存储器中读取 32 位的字数据到通用寄存器,然后对数据进行处理。当程序计数器 PC 作 阅读全文
posted @ 2018-03-27 22:10 Zackary丶Liu 阅读(668) 评论(0) 推荐(0)
摘要:立即数的定义: ~~~~ 每个立即数由一个8位的常数循环右移偶数位得到,其中循环右移的位数由一个4位二进制的两倍表示。如果立即数记为, 8位常数记为immed_8, 4位的循环右移值记作rotate_imm, 则有: = immed_8 ROR(2 rotate_imm) ~~~~ 所以并不是每一个 阅读全文
posted @ 2018-03-23 23:44 Zackary丶Liu 阅读(1726) 评论(0) 推荐(0)
摘要:![](http://images2017.cnblogs.com/blog/1319058/201801/1319058-20180131234834359-411435394.png) ![](http://images2017.cnblogs.com/blog/1319058/201801/1319058-20180131234837859-1729229406.png) ![](http:... 阅读全文
posted @ 2018-01-31 23:50 Zackary丶Liu 阅读(604) 评论(0) 推荐(0)