关于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直接调用汇编子程序(为了效率)。尽量别把底层汇编改了。

原文地址:https://www.cnblogs.com/bytebee/p/6111233.html