zoukankan      html  css  js  c++  java
  • 关于C转汇编(转自网上)

    ②在KILE软件的菜单中,选择Project-->Options for  Target 'Target 1',-->Listing选择Assembly code就能生产*.LST文件。在LST文件中就有生产的汇编代码。如果便于直观查看,在调试时,选择Disassembly可以单步调试擦看C-->汇编的转换。

    ③C转汇编的实际过程是,C--->汇编,C--->HEX--->汇编,后面的这个叫反汇编。再有了LST,那么如何转呢?

    1、汇编和C语言都一样,通常都是程序模块化写程序,那么汇编和C都按照模块化转过来。

    2、注意不要堆栈溢出,比如CALL不要用得过多,多添加jmp跳转。

    3、修改完毕后,注意时间的匹配、注意代码书写的优化。

    4、如果是改为不同芯片的使用,PIC<--->51、AVR<--->51、430<---->51等待都要注意汇编指令功能相似,但是格式有变,仔细修改反复运行几次方能得到理想效果。

    5、综上,C<--->汇编,无论你是正转还是反转,你必须对要转成的语言非常熟悉,实际上你懂原理,基本上都能重写一遍,只是通过这样的转换,能极大地提高效率,修修改改就完事。

    ④C语言调用汇编子程序,把汇编语句嵌入C代码中,或把汇编封装起来。按如下设置:

    1、在Project Workspace中右键.c文件,并写勾选Options for File中的两项,Generate Assembler SRC File和Assemble SRC File(勾选后成实线勾)

    2、代码书写有这样两种格式:(仿真时在.src文件中我们能看到整体编译后的汇编)

    #pragma ASM
    MOV A, #0xAA
    MOV P1, A
    #pragma ENDASM

    或者

    __asm  MOV A, #0x33

    __asm  MOV P2, A

    3、若要把汇编直接改为C这个没办法,只能按汇编语句逐步用C修改,把寄存器的位配置好,时间达到要求,按汇编的时序改就简单可靠了。

    4、对于ARM你就自认倒霉吧,动不动就用C直接调用汇编子程序(为了效率)。尽量别把底层汇编改了。

  • 相关阅读:
    在Centos 7下编译openwrt+njit-client
    开博随笔
    Chapter 6. Statements
    Chapter 4. Arrays and Pointers
    Chapter 3. Library Types
    Chapter 2.  Variables and Basic Types
    关于stm32不常用的中断,如何添加, 比如timer10 timer11等
    keil 报错 expected an identifier
    案例分析 串口的地不要接到电源上 会烧掉
    案例分析 CAN OPEN 调试记录 进度
  • 原文地址:https://www.cnblogs.com/bytebee/p/6111233.html
Copyright © 2011-2022 走看看