zoukankan      html  css  js  c++  java
  • ARM汇编程序闪烁灯与其反汇编代码比较

    /*
    *LED闪烁
    *led.s
    */
     #define GPJ0CON 0xE0200240
     #define GPJ0DAT 0xE0200244
     .global _start                //把 _start 链接属性改为外部
    _start:
        //第一步 :把0x1111 1111写入 0xe0200240(gpj0con)
        ldr r0, =0x11111111   //这里ldr 为伪指令 
        ldr r1,    =GPJ0CON
        str r0, [r1]          //寄存器间接寻址 将r0的值给ri所指地址的内存中
        
        
    flash:
        //第二部:把 0x0写入0xe0200244(GPJ0DAT) 点亮
        //ldr r0, =0x28//  第一种 缺陷是需要人为计算设定值  可阅读型差    
        
        ldr r0, =(0<<3) |(0<<4)| (0<<5)// 等效于 0b0010_1000 即 0x28
        ldr r1, =GPJ0DAT
        str r0, [r1]            //点亮
        //第三步: 延迟
        bl delay                //使用bl进行调用可以将当前执行地址存入lr
        
        //第四部:灭
        //ldr r0, =0x28//  第一种 缺陷是需要人为计算设定值  可阅读型差    
        
        ldr r0, =(1<<3) |(1<<4)| (1<<5)
        ldr r1, =GPJ0DAT
        str r0, [r1]            //熄灭
        bl delay    
        b flash                   
        
        b .                       //写一个死循环 防止CPU跑飞
        
    delay:
        ldr r2, =1000000
        ldr r3, =0
    delay_loop:
        sub r2, r2, #1      //r2=r2-1
        cmp r2, r3        //cmp 比较r2 r3 如果相等 Z 为1
        bne delay_loop    //bne 为当Z为1时执行跳转  bne 为 b+后缀
        mov pc, lr          //函数调用返回  mov 为 寄存器间寻址    

     反汇编

    led.elf:     file format elf32-littlearm
    
    
    Disassembly of section .text:
    
    00000000 <_start>:
       0:    e59f0044     ldr    r0, [pc, #68]    ; 4c <delay_loop+0x10>
       4:    e59f1044     ldr    r1, [pc, #68]    ; 50 <delay_loop+0x14>
       8:    e5810000     str    r0, [r1]
    
    0000000c <flash>:
       c:    e3a00000     mov    r0, #0
      10:    e59f103c     ldr    r1, [pc, #60]    ; 54 <delay_loop+0x18>
      14:    e5810000     str    r0, [r1]
      18:    eb000005     bl    34 <delay>
      1c:    e3a00038     mov    r0, #56    ; 0x38
      20:    e59f102c     ldr    r1, [pc, #44]    ; 54 <delay_loop+0x18>
      24:    e5810000     str    r0, [r1]
      28:    eb000001     bl    34 <delay>
      2c:    eafffff6     b    c <flash>
      30:    eafffffe     b    30 <flash+0x24>
    
    00000034 <delay>:
      34:    e59f201c     ldr    r2, [pc, #28]    ; 58 <delay_loop+0x1c>
      38:    e3a03000     mov    r3, #0
    
    0000003c <delay_loop>:
      3c:    e2422001     sub    r2, r2, #1
      40:    e1520003     cmp    r2, r3
      44:    1afffffc     bne    3c <delay_loop>
      48:    e1a0f00e     mov    pc, lr
      4c:    11111111     tstne    r1, r1, lsl r1
      50:    e0200240     eor    r0, r0, r0, asr #4
      54:    e0200244     eor    r0, r0, r4, asr #4
      58:    000f4240     andeq    r4, pc, r0, asr #4
    
    Disassembly of section .ARM.attributes:
    
    00000000 <.ARM.attributes>:
       0:    00001a41     andeq    r1, r0, r1, asr #20
       4:    61656100     cmnvs    r5, r0, lsl #2
       8:    01006962     tsteq    r0, r2, ror #18
       c:    00000010     andeq    r0, r0, r0, lsl r0
      10:    45543505     ldrbmi    r3, [r4, #-1285]    ; 0x505
      14:    08040600     stmdaeq    r4, {r9, sl}
      18:    Address 0x00000018 is out of bounds.
  • 相关阅读:
    Entity Framework Core 2.0 新特性
    asp.net core部署时自定义监听端口,提高部署的灵活性
    asp.net core使用jexus部署在linux无法正确 获取远程ip的解决办法
    使用xshell连接服务器,数字键盘无法使用解决办法
    使用Jexus 5.8.2在Centos下部署运行Asp.net core
    【DevOps】DevOps成功的八大炫酷工具
    【Network】Calico, Flannel, Weave and Docker Overlay Network 各种网络模型之间的区别
    【Network】UDP 大包怎么发? MTU怎么设置?
    【Network】高性能 UDP 应该怎么做?
    【Network】golang 容器项目 flannel/UDP相关资料
  • 原文地址:https://www.cnblogs.com/PengfeiSong/p/6338974.html
Copyright © 2011-2022 走看看