I.MX6U-ALPHAl裸机学习(-)

本文详细讲解了汇编语言中LDR(加载寄存器)和MOV(移动数据)指令的用法,包括它们在不同场景下的操作,以及LDRr,=label与LDRr,label的区别。重点讨论了如何在内存地址和立即数之间转换,以及如何处理BSS段的初始化和清除。
摘要由CSDN通过智能技术生成

汇编语法


#LDR和MOV的使用

MOV R0,R1 @将寄存器 R1 中的数据传递给 R0,即 R0=R1
MOV R0, #0X12 @将立即数 0X12 传递给 R0 寄存器,即 R0=0X12

LDR R0, =0X0209C004 @将寄存器地址 0X0209C004 加载到 R0 中,即 		  R0=0X0209C004
LDR R1, [R0] @读取地址 0X0209C004 中的数据到 R1 寄存器中
 
_bss_start:
    .word __bss_start   //相当于定义一个变量 _bss_start为变量名
    //_bss_start值等于__bss_start值,__bss_start 存储的是bss段的启示地址
.global _bss_end
_bss_end:
    .word __bss_end

  /*  清除BSS段 */
    ldr r0, _bss_start /* __bss_start为变量 bss起始地址赋给r0*/
    //stmia指令将起始地址r0清0后,地址加1
    ldr r1, _bss_end
    mov r2, #0

LDR r, label 和 LDR r, =label的区别:
LDR r, =label 会把label表示的值加载到寄存器中,而LDR r, label会把label当做地址,把label指向的地址中的值加载到寄存器中。
譬如 label的值是 0x8000, LDR r, =label会将 0x8000加载到寄存器中,而LDR r, label则会将内存0x8000处的值加载到寄存器中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值