• 第1阶段——关于u-boot目标文件start.o中.globl 和.balignl理解(3)


    汇编程序中以.开头的名称并不是指令的助记符,不会被翻译成机器指令,而是给汇编器一些特殊指示,称为伪操作.


    .globl _start  
    

    作用:声明一个_start全局符号(Symbol), 这个_start这个符号要被lds链接脚本用到

    .balignl 16,0xdeadbeef
    

      

    作用:以当前地址开始,在地址为16的倍数的指令位置的上一个指令填入为0xdeadbeef的内容。


    实例,在start.o中有以下几段:

    1 .globl _start                             // .globl定义一个全局符号"_start",表明_start这个符号要被链接器用到 
    2 _start:	                                  //_start:系统复位设置,以下共8种不同的异常处理
    3 b reset                                   //复位异常             0x0
    4 ldr	pc, _undefined_instruction          //未定义的指令异常       0x4
    5 ldr	pc, _software_interrupt             // 软件中断异常          0x8 
    6 ldr	pc, _prefetch_abort                 //内存操作异常           0xc
    7 ldr	pc, _data_abort                     //数据异常               0x10
    8 ldr	pc, _not_used                       //未使用                 0x14
    9 ldr	pc, _irq                            //中断IRQ异常            0x18
    10 ldr	pc, _fiq                          //快速中断FIQ异常        0x1c
    11 
    12 _undefined_instruction:	.word undefined_instruction         //0x20
    13 _software_interrupt:	.word software_interrupt               //0x24
    14 _prefetch_abort:	.word prefetch_abort                  // 0x28
    15 _data_abort:	.word data_abort                          //0x2c
    16 _not_used:	.word not_used                              //0x30
    17 _irq:	.word irq                                       //0x34
    18 _fiq:	.word fiq                                       //0x38
    19 
    20 .balignl 16,0xdeadbeef                                  //0x3c 

    在第1行中".globl _start":

    使用.globol声明全局符号_start,在 board/100ask24x0/u-boot.lds中ENTRY(_start)这里用到_start是一个符号,符号在汇编程序中代表一个地址,然后在lds链接脚本中通过这个_start全局符号来跳转到_start所在的地址来进行复位异常处理。

    第20行中 .balignl 16,0xdeadbeef:

    它的意思就是在以当前地址开始,在地址为16的倍数的指令位置的上一个指令填入为0xdeadbeef的内容,

    此时当前地址刚好0x3c=60,由于ARM每个指令间隔4个字节,且64%16=0,所以在0x3c中填入0xdeadbeef。仿真如下图所示,可以看出在0X3C处填入了0xdeadbeef.
    它们的作用就是为内存做标记,插在那里,这个位置往前有特殊作用的内存,禁止访问。

      

  • 相关阅读:
    PHP htmlspecialchars和htmlspecialchars_decode(函数)
    使用CURL抓取淘宝页面
    PHP 自定义字符串中的变量名解析
    Notepad++前端开发常用插件介绍
    使用phpExcel实现Excel数据的导入导出(完全步骤)
    moment.js 日期包装类 (说明示例)
    php函数前面加&符号 和 变量前面加&符号的意义
    window 查看端口/杀进程
    eureka 去除注册中心保护机制
    mysql 表关联更新另一张表的数据
  • 原文地址:https://www.cnblogs.com/lifexy/p/7171507.html
Copyright © 2020-2023  润新知