• 入住“博客园”


    2019.11.15入住“博客园”开启了我的技术文章的开端

    有没有人好奇KEIL 如何实现 汇编的

    从最简单的单片机C 语言开始分析

    #include<reg52.h>
    void main()
    {
    unsigned char a=255;
    unsigned char B=255;
    unsigned char *p;

    p=&a;
    *p=254;

    }

    C中的内容简单 就是申请 内存 和申请内存的地址 并将它们赋值。

    DBUG 一下分析一下()为我的分析

    C:0x0000 020026 LJMP C:0026   (STEP1: 汇编的跳转指令 LJMP CPU无条件跳转到物理地址为16位:0026(16进制))
    C?CSTPTR:
    C:0x0003 BB0106 CJNE R3,#0x01,C:000C      (STEP 15:  CJNE :  R3:00 < 01 不相等 标志位C=1 并且 跳转到 000C   )
    C:0x0006 8982 MOV DPL(0x82),R1
    C:0x0008 8A83 MOV DPH(0x83),R2
    C:0x000A F0 MOVX @DPTR,A
    C:0x000B 22 RET
    C:0x000C 5002 JNC C:0010 ()   (STEP16 判断  C :是否为0  不为0所以跳转到下一条)
    C:0x000E F7 MOV @R1,A   (STEP17:A的内容  0X7F送到  R1: 0X08地址内 完成了对指针指向的地址赋值 )
    C:0x000F 22 RET
    C:0x0010 BBFE01 CJNE R3,#0xFE,C:0014
    C:0x0013 F3 MOVX @R1,A
    C:0x0014 22 RET
    2: void main()
    3: {
    4: unsigned char a=255;
    C:0x0015 7508FF MOV 0x08,#0xFF       (STEP8:开辟:0X 08 地址 并向内存储 0XFF)
    5: unsigned char B=255;
    6: unsigned char *p;
    7:
    C:0x0018 7509FF MOV 0x09,#0xFF     (STEP9: 开辟了 0X09的地址  并向内存储 0XFF :定义指针就是定义地址 )
    8: p=&a;
    C:0x001B 7B00 MOV R3,#0x00   (STEP10:寄存器相当于标记位)      
    C:0x001D 7A00 MOV R2,#0x00   (STEP11:指针地址的临时存储位置:高8位)
    C:0x001F 7908 MOV R1,#0x08    (STEP12:指针地址的临时存储位置:低8位)
    9: *p=254;
    C:0x0021 74FE MOV A,#0xFE     (STEP:13 :把要赋给指针指向的数值 ,先放到寄存器A中)
    C:0x0023 020003 LJMP C?CSTPTR(C:0003)      (SETP14:跳转到 0003)
    C:0x0026 787F MOV R0,#0x7F  ( STEP2 : 立即数:7F 放到寄存器 R0中 )
    C:0x0028 E4 CLR A   (SETP 3 :寄存器A的内容 清零)
    C:0x0029 F6 MOV @R0,A    (STEP4: 把A的内容存放到地址为7F 存储空间中)
    C:0x002A D8FD DJNZ R0,C:0029     (STEP5:R0的数值7F减一 如果结果不为 0 就转移到 0029  直到 为0 跳转到 下一条)
    C:0x002C 758109 MOV SP(0x81),#0x09   (STEP6: 以上延时后 将 堆栈SP 指向 0X09 )
    C:0x002F 020015 LJMP main(C:0015)    (STEP7:跳转到 0015  进入MAIN 函数)
    C:0x0032 00 NOP

  • 相关阅读:
    阶段3 2.Spring_10.Spring中事务控制_4 spring中事务控制的一组API
    阶段3 2.Spring_10.Spring中事务控制_3 作业-基于注解的AOP实现事务控制及问题分析_下
    阶段3 2.Spring_10.Spring中事务控制_2 作业-基于注解的AOP实现事务控制及问题分析_上
    程序员选择字体的标准是
    高通Audio中ASOC的codec驱动(二)
    HashTree【转】
    什么是负载均衡?【转】
    Linux RCU 机制详解
    如何使用C语言的面向对象
    高通HAL层之bmp18x.cpp
  • 原文地址:https://www.cnblogs.com/2SBC/p/11864246.html
Copyright © 2020-2023  润新知