f1c100s入坑笔记(4)-uboot学习stepbystep-1

一. 分析uboot之前先简单学习一下Lin参考下的汇编指令,参考 http://blog.sina.com.cn/s/blog_59b189220100au1k.html

1. Linux汇编与windows的不同

  • (1)寄存器名上要加%,例如  : pushl  %eax
  • (2)立即数前要加$, 例如: pushl $1
  • (3)源操作数在左边,目标操作数在右边,例如: add $1, %eax
  • (4)操作数的字长由最后一个字符决定(b=8bit,w=16bit,l=32bit), 例如 move val, %al
  • (5)绝对转移和调用指令(jump/call)的操作数前要加*号做前缀

2. Linux汇编的行结构

  • 任何汇编行都是如下结构:
    [:] [} @ comment
    [:] [} @ 注释
  • Linux ARM 汇编中,任何以冒号结尾的标识符都被认为是一个标号,而不一定非要在一行的开始。

3. Linux汇编的标号

  • 标号只能由a~z,A~Z,0~9,“.”,_等字符组成。
  • 标号为0~9的数字时为局部标号,局部标号可以重复出现,使用方法如下:
    标号f: 在引用的地方向前的标号
    标号b: 在引用的地方向后的标号
    例子:
    1:
      subs r0,r0,#1 @每次循环使r0=r0-1
      bne 1f @跳转到1标号去执行
    局部标号代表它所在的地址,因此也可以当作变量或者函数来使用。

4. Linux汇编程序的分段

  • (1) .section伪操作, 用户可以通过.section伪操作来自定义一个段,格式如下:
    .section section_name [, "flags"[, %type[,flag_specific_arguments]]]
    其中 flags = a 表示允许段
            flags = w 表示可写段
            flags = x 表示可执行段
    每一个段以段名为开始, 以下一个段名或者文件结尾为结束。这些段都有缺省的标志(flags),连接器可以识别这些标志。
  • (2).align 2 表示2字节对齐
  • (3)汇编系统预定义的段名
            .text @代码段
            .data @初始化数据段
            .bss @未初始化数据段
            .sdata @
            .sbss @
            需要注意的是,源程序中.bss段应该在.text之前。

5. 定义入口点

  • 汇编程序的缺省入口是 _start标号,用户也可以在连接脚本文件中用ENTRY标志指明其它入口点。
  •  例子:
    .section.data
    < initialized data here>
    .section .bss
    < uninitialized data here>
    .section .text
    .globl _start
    _start:

 

 

 

你可能感兴趣的:(arm,linux学习)