zoukankan      html  css  js  c++  java
  • 基础汇编指令

    start:

    mov  sp,  #4096

    bl  c  main

    halt

    b  8

    mov  ip,  sp

    stmdb   sp!,  {fp,ip,lr,pc}

    sub   fp,  ip  ,#4;  0x4

    sub   sp,  sp,  #8  0x8

    mov  r3,#1442840576  0x56000000

    add  r3,  r3,  #80;  0x50

    str  r3,  [fp,#-16

    mov  r3,  #1442840576  0x56000000

    add  r3,  r3,  #84 ;  0x54

    str  r3,  [fp, #-20]

    ldr  r2,  [fp, #-16]

    mov  r3,  #256

    str  r3,  [r2]

    ldr  r2,  [fp,#-20]

    mov  r3,  #0

    str  r3,  [r2]

    mov  r3,  #0

    mov  r0,  r3

    sub  sp,  fp,  #12

    ldmia  sp,{fp,sp,pc}

    解析:

      stmdb  sp!,{fp,ip,lr,pc}

    db含义:decrement  before  先减,后存。

      sp' = sp -4 = 4092,如果布加感叹号,sp为原值,并不会被减。

      高编号寄存器存在高地址,4092到4095存放PC的值,sp' = sp - 4 = 4088.

                  4088到4091存放lr寄存器的值

                  4084到4087存放ip的值

                  4080到4083存放fp的值。

    stmdb最常用

    ldmia  sp,  {fp,sp,pc}

      先读4080到4083的值 = 原来的fp的值  低地址对应低编号。

      

      

      

        

  • 相关阅读:
    【Lua】LuaForWindows_v5.1.4-46安装失败解决方案
    【C++】指针引发的bug
    【C++】指针引发的bug
    【C++】位操作(3)-获取某位的值
    bzoj1444
    bzoj1758
    bzoj3091
    poj1741 bzoj2152
    bzoj2125 3047
    bzoj3669
  • 原文地址:https://www.cnblogs.com/stm32f4/p/7609844.html
Copyright © 2011-2022 走看看