当前位置: 首页 > news >正文

自己用笔记本做网站济南做seo的公司排名

自己用笔记本做网站,济南做seo的公司排名,wordpress添加评论框,罗湖网站的建设目录 一、ARM架构 1、RISC指令集 2、ARM架构数据类型的约定 2.1 ARM-v7架构数据类型的约定 2.2 ARM-v8架构数据类型的约定 3、CPU内部寄存器 4、特殊寄存器 4.1 SP寄存器 4.2 LR寄存器 4.3 PC寄存器 二、汇编 1、汇编指令(常用) 2、C函数的…

目录

一、ARM架构

1、RISC指令集

2、ARM架构数据类型的约定

2.1 ARM-v7架构数据类型的约定

2.2 ARM-v8架构数据类型的约定

3、CPU内部寄存器

4、特殊寄存器

4.1 SP寄存器

4.2 LR寄存器

4.3 PC寄存器

二、汇编

1、汇编指令(常用)

2、C函数的反汇编

2.1 让Keil生成反汇编

2.2 找到C函数的反汇编

2.3 分析


一、ARM架构

1、RISC指令集

ARM芯片属于精简指令集计算机(RISC:Reduced Instruction Set Computing),它所用的指令比较简单,有如下特点:

① 对内存只有读、写指令

② 对于数据的运算是在CPU内部实现

③ 使用RISC指令的CPU复杂度小一点,易于设计

对于上图所示的乘法运算a = a * b,在RISC中要使用4条汇编指令:

① 读内存a

② 读内存b

③ 计算a*b

④ 把结果写入内存

2、ARM架构数据类型的约定

2.1 ARM-v7架构数据类型的约定

byte ---> 字节 ---> 8bits ---> 1字节
half word ---> 半字 ---> 16bits ---> 2字节
word ---> 字 ---> 32bits ---> 4字节
double word ---> 双字 ---> 64bits ---> 8字节

2.2 ARM-v8架构数据类型的约定

byte ---> 字节 ---> 8bits ---> 1字节
half word ---> 半字 ---> 16bits ---> 2字节
word ---> 字 ---> 32bits ---> 4字节
double word ---> 双字 ---> 64bits ---> 8字节
quad word ---> 四字 ---> 128bits ---> 16字节

3、CPU内部寄存器

无论是cortex-M3/M4,还是cortex-A7,CPU内部都有R0、R1、……、R15寄存器;它们可以用来“暂存”数据。

4、特殊寄存器

4.1 SP寄存器

R13 ---> 别名:SP ---> the Stack Pointer : 堆栈寄存器
    作用:SP寄存器中存储的是执行栈空间的地址,即栈指针
    栈空间主要用于压栈保存现场,出栈恢复现场。

4.2 LR寄存器

R14 ---> 别名:LR ---> Link Register
    作用:用来保存返回地址
    栈空间主要用于压栈保存现场,出栈恢复现场。

4.3 PC寄存器

    R15 ---> 别名:PC ---> The Program Counter : 程序计数寄存器
    
    作用:PC寄存器中存储的是当前取指指令的地址,表示当前指令地址,写入新值即可跳转
    每完成取指操作之后,PC会自动加4指向下一条指令。

二、汇编

1、汇编指令(常用)

  • 读内存:Load

    • # 示例
      LDR  R0, [R1, #4]  ; 读地址"R1+4", 得到的4字节数据存入R0

  • 写内存:Stroe

    • # 示例
      STR  R0, [R1, #4]  ; 把R0的4字节数据写入地址"R1+4"

  • 加减

    • ADD R0, R1, R2  ; R0=R1+R2
      ADD R0, R0, #1  ; R0=R0+1
      SUB R0, R1, R2  ; R0=R1-R2
      SUB R0, R0, #1  ; R0=R0-1

  • 比较

    • CMP R0, R1  ; 结果保存在PSR(程序状态寄存器)

  • 跳转

    • B  main  ; Branch, 直接跳转(直接使用PC寄存器执行指令跳转)
      BL main  ; Branch and Link, 先把返回地址保存在LR寄存器里再跳转(先使用LR寄存器保存返回地址,再使用PC寄存器执行指令跳转)

2、C函数的反汇编

我们用一个简单的C函数添加进FreeRTOS工程中,观察其反汇编:

int add(volatile int a, volatile int b)
{volatile int sum;sum = a + b;return sum;
}
2.1 让Keil生成反汇编

点击魔术棒中的 Linker ,找到文件输出位置

再点击 User ,输入反汇编指令,同时将上个步骤中提取的输出位置替换掉反汇编指令中的xxx

为了方便复制,制作反汇编的指令如下:

fromelf  --text  -a -c  --output=xxx.dis  xxx.axf

2.2 找到C函数的反汇编

找到C函数反汇编的文件

用 Notepad++ 打开并找到我们所定义的 add 函数

使用 add 函数位于我们所创建的FreeRTOS工程中的 diver_oled.c 中,再次找到C函数被调用时的反汇编形式

2.3 分析
int add(volatile int a, volatile int b)
{volatile int sum;sum = a + b;return sum;
}int cnt = 0;
cnt = add(cnt, 1);

在 cnt 调用 add 函数过程中,第一个参数用 R0 来传输,即 R0 = cnt ,第二个参数用 R1 来传输,即 R1 = #1。之后调用 add 函数,用汇编形式表示:BL add。

在 OLED_Test 中找到 add 被调用时的反汇编码,可以更加深刻的理解。

当CPU执行 OLED_Test 中的 add 函数时,cpu会读取地址,得到机器码并执行机器码。

PUSH 就是写内存,就是 Store 指令的变种,会将括号内三个寄存器的值写入栈中,并且调整栈的位置

设SPA = A,调用 PUSH 指令将 lr 、r1、r0 从高到底存入栈中,每个数据为4字节,则占用了12字节,新得到的SP=SP-12,即SP=A-12;调用SUB指令,即S=SP-4;调用 LDRD 指令将SP加4的位置读8个字节分别存入 r0、r1,所以SP+4之后SP对应红线上面一条横线(SP的位置仅此时有效,仅是为了汇编,后面SP的位置还是位于红线处),读取8个字节表示 r0 = [SP,#4] = cnt,r1 = [sp,#8] = 1;调用ADD指令,表示为 r0 = r0 + r1 = cnt + 1,此时 cnt 成功计数;调用 STR 指令,将 r0 保存在 SP+0 处(红线处),此时新的 r0 对应 add 函数中的 sum 变量,汇编形式表示:r0->[SP,#0]->sum;调用 POP 指令,低地址对应低标号的寄存器,将数值清空,将 LR 的地址(对应 OLED_Test 汇编码中执行完 add 函数后面的地址)存到 PC 寄存器,即得到执行完整 add 函数后的结果并保存,这样做主要是是为了再次执行 add 函数时栈中没有数据。

http://www.hengruixuexiao.com/news/11639.html

相关文章:

  • 公司做一个网站内容如何设计网络推广的渠道有哪些
  • 会计题库网站怎么做怎样制作网站教程
  • 网页制作怎么上传到网站泰州百度公司代理商
  • 网站设计广州seo整站优化
  • 做网站的前途百度站长平台网站提交
  • 学校网站建设目标台州seo优化
  • 广州线上推广公司淘宝标题优化工具推荐
  • 本地dede网站怎么上线百度关键词优化快速排名软件
  • 通常做网站的需求百度旗下产品
  • 淮北集团网站建设百度推广如何办理
  • 网站301了不知道在哪做的公司网站设计模板
  • 做 网络网站湖南网站建站系统哪家好
  • 吴谨含厂家不愿做网站企业培训课程种类
  • 网站 302重定向 备案湖北疫情最新情况
  • 网站设计行业前景百度热搜的含义
  • 建设银行商城网站购物网站推广方案
  • url 网站目录结构网站搭建公司哪家好
  • 宝安网站建设定制网络推广有哪几种方法
  • 资源站 wordpress郑州seo优化公司
  • 彩票网站开发.极云市场营销策划
  • 做网站的 深圳十大销售管理软件排行榜
  • 百度地图怎么放在网站上近期舆情热点事件
  • 网站建设建设哪家好优化网站的方法
  • 营销网站制作都选ls15227北京seo优化诊断
  • 青岛鲁icp 网站制作 牛商网网络推广员是什么
  • app网站建设 - 百度推广活动策划方案范文
  • 杭州做绒毛鉴定网站西安做网站的网络公司
  • 饶阳营销型网站建设费用seo关键词优化软件
  • 给一个公司做网站维护企业网站营销实现方式
  • 重庆做网站厦门人才网唯一官网招聘