zoukankan      html  css  js  c++  java
  • 汇编

    连接脚本,map.lds
    SECTIONS
    {

    /* 机器代码的地址 */

    . = 0x0;

    /* 4个字节对齐 */

    . = ALIGN(4);

    /* 代码段 */

    .text : { start.o(.text) *(.text)}

    . = ALIGN(4);

    /* 常量数据段 */

    .rodata : { *(.rodata) }

    . = ALIGN(4);

    /* 初始化数据段 */

    .data : { *(.data) }

    /* 未初始化数据段 */

    . = ALIGN(4);

    .bss : { *(.bss) }

    }
    *********************************
    程序各个部分在CPU中的分布
    栈(从上到下)
    堆(从下到上)
    数据段
    代码段
    **************************
    这两个看上去相反了,连接脚本看上去没有栈,其实栈在你的代码段里边,从视频里看出来;
    **************************************
    应用程序
    void niuniu(void)
    {
    led_init();
    uart_init();
    int a;
    int b=666;
    puts("led test ");

    while(1)
    {
    led_on(2);
    led_on(4);
    delay(10000);
    led_off(2);
    led_off(4);
    delay(10000);
    }
    }
    ***********************************
    puts("led test ");这里边的led test 字符串是当做常量来处理的,
    /* 常量数据段 */

    .rodata : { *(.rodata) }

    . = ALIGN(4);

    在反汇编的语言中看图。
    ****************************************************************
    连接器组织这些连接脚本.lds
    **********************************************************************
    问:栈段 代码段可以换位么?
    可以只是我们有协议。
    连接地址必须是4的倍数。
    多连接地址改的不是1,则程序不会运行因为程序的运行必须从cpu 0地址开始。
    4个字默认对齐,写不写无关。
    .text (start.0.*.o必须放到开头)

    *****************************************************************8

    有录像视频
    1 汇编语言与机器语言的关系?
    机器语言是01代码,而汇编语言是英文简写,汇编语言机器识别不了,必须转变为机器语言。
    2 汇编语言与高级语言的关系?
    c语言是面向过程的的高级语言语言,高级语言,结构化,模块化。高级语言的一般的人能用,减少对程序员的要求。汇编还是机器的思考方式,高级语言是人类的思考方式,高级语言先变成汇编语言后变成机器语言。
    3 arm-linux-objdump是干什么的?
    把操作系统下的可执行的.elf文件(机器语言)变为.dis汇编语言。 这是反汇编。
    4 对于led.bin来说,nandflash的前4个字节存的是什么?
    ea000006这个东西,目的是为了跳转。
    5 对于led.bin来说,cpu启动会从哪里取第一条机器指令,取得是什么?
    cpu的启动或者复位后,会跳到地址总线的0地址,我们从地址总线的0地址获得我们需要数据。取得的也是ea000006;
    6 我们学习汇编语言的目标是什么?
    能读懂,不要求会写。
    7 对于led.bin来说,发生中断以后,运行的第一条机器指令是什么,cpu的通过地址总线的什么地址取到的?
    放生中断以后会跳到地址总线的18,数据是ea000011,执行这个跳转指令。
    8 C++的出现为了减少程序员的工作量。
    9 AMD完全兼容inter.
    10 c语言程序前面必须有一段程序的引导程序,汇编语言,。
    11 nop指令什么也不干,只是占用地址。
    12 机器语言32位.
    13 .bin 无操作体统下的可执行文件。.elf有操作体统下的可执行文件。
    14 nandflash 256m,norflash 2m,
    norflash(1) 基于总线,运行速度慢,(2)单位存储量少,对多支持4G(寻址少。总线32位,对多支持4G)
    15 程序放到SRAM中,程序重启时,CPU从0地址开始运行。
    16 .text代码段
    17 地址总线从哪里取。数据总线,取东西(数据);
    18 我们的start.s中
    系统调用是特权模式,我们的中断实现,是从特权模式到外部中断的转变。
    除了用户模式,其他6个都是特权模式。
    除了系统模式,其他5个都是异常模式。
    irp 外部中断(一般称为中断),FIQ,快速中断。
    复位以后进去特权模式.
    19 CPU arm920T,芯片S3C2440.
    20 37个寄存器,31个通用寄存器,6个状态寄存器。
    7个模式,用户模式,快速中断模式,外部中断模式,特权模式,数据访问模式,未定义指令中止模式,系统模式。
    1个r0~r7
    2个r8
    2个r9,
    2个r10;
    2个r11;
    2个r12;
    6个r13; 栈指针寄存器;
    6个r14; 链接寄存器;
    1个r15; 程序计数器;
    1个cpsr; 当前程序状态寄存器;
    5个spsr; 保存程序状态寄存器;
    21

    =========================

    1 没有4096的地址,最多4095.可是我们的栈定义的时候就是4096,因为我们用的是满递减栈。有图。
    2 cpsr不需要入栈,因为有spsr,r0~r12则需要入栈。
    3 栈有两个作用,(1)保存arm寄存器。(2)函数调用局部变量。
    4 stmfd sp! {r0~r12,lr}
    解释stmfd 意思满递减栈,而!的意思是跟新sp,sp=sp-4;lr连接寄存器,特权模式下运行下一条指令。
    原sp r3
    r2
    r1
    现sp r0(注意入栈顺序)
    5 stmfd 入栈,ldmfd出栈,
    6 中断流水线,arm9支持5级,其实支持3流水线,只是在某个特定的步骤情况多,分的步骤多。
    arm7 3级流水线,arm95级流水线。
    7 ATPES默认执行满递减栈的约定。能实现汇编语言和c语言直接的混用。
    8 fp sp的变体,保存sp。
    9 push {fd,lr}
    add {fp,sp,#4}这两部是惯性的操作,我们不管。

    10 ldr____指令 ldr r3,[pc,#28](pc由16进制转化为10进制然后+28,然后加赋给ldr(也可以先转化为16进制在给r3))
    ____伪指令
    11 .word表示4个字节的空间。
    12 函数传参,一般用4个以下,r0~r3,如果用的多了,就会用到栈
    13 逻辑左移,lsl r2,r0,r2(r0=1,r2=6)1左移6位,给r2.。
    14 mvn反转。
    15 push{fp}
    16 我们所说的程序就是裸机程序。
    17

  • 相关阅读:
    WAMP 2.2 配置与IIS共用单IP,多域名多网站配置方法
    [.NET MVC4 入门系列00]目录
    [.NET MVC4 入门系列04]Controller和View间交互原理
    [.NET MVC4 入门系列05]添加自定义查询页Search
    [.NET MVC4 入门系列02]MVC Movie 为项目添加Model
    [.NET MVC4 入门系列07] 在Model模型模块中添加验证
    [.NET MVC4 入门系列03]使用Controller访问Model中数据
    DateTime 类常用技巧
    Access 注意地方
    互联网公司老板的十大谎言,别对号入座
  • 原文地址:https://www.cnblogs.com/coding4/p/5604783.html
Copyright © 2011-2022 走看看