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

关于C转汇编(转自网上)的更多相关文章

  1. VS的 X64下的汇编编译

    参考博客 VS编译64位汇编时报错:error C4235: 使用了非标准扩展: 不支持在此结构上使用“_asm”关键字 在用VS2013编译内联汇编时,报如下错误: 错误    5    error ...

  2. 冷知识:达夫设备(Duff's Device)效率真的很高吗?

    ID:技术让梦想更伟大 作者:李肖遥 wechat链接:https://mp.weixin.qq.com/s/b1jQDH22hk9lhdC9nDqI6w 相信大家写业务逻辑的时候,都是面向if.el ...

  3. 使用DOSBox在Win7_x64下搭建汇编环境

    1. 软件安装 1. debug.exe,masm.exe,link.exe,edit.com等汇编工具,一般32位的windows系统有自带,但64位系统下并没有,而且将32位系统下的工具拷贝到64 ...

  4. 在64位windows 7上安装汇编调试工具debug.exe的方法

    最近我在研究汇编,书中介绍的调试工具还是基于WinXP 32bit时代中自带debug.exe进行调试,但是64bit的Windows XP.Vista.Win7.Win8都已经不自带这个工具了,网上 ...

  5. 汇编Ring 3下实现 HOOK API

    [文章标题]汇编ring3下实现HOOK API [文章作者]nohacks(非安全,hacker0058) [作者主页]hacker0058.ys168.com [文章出处]看雪论坛(bbs.ped ...

  6. Win32汇编环境配置

    放假了,发现自己知识面窄,趁有时间就打算折腾下Win32汇编.其实在学校也上过汇编课,是基于dos的.那时老师不务正业,老跟我们讲政治经济文化,唯独不怎么讲课;再加上自己的问题,导致了dos汇编学得好 ...

  7. 第一个嵌入汇编的C程序

    最近两天开始学习linux内核,看了赵炯博士的<linux内核完全注释>感觉受益匪浅.今天看到第三章 嵌入汇编部分,于是写了一个小程序试验了一下,用gcc编译通过.代码如下: #inclu ...

  8. 内联汇编和JMP到内联函数注意事项

    对于jmp类型的hook, 如果自己的过程没有使用_declspec(naked),那么系统会自动给添加一些额外的代码,控制堆栈平衡,但是这些额外的代码会破坏被hook函数的堆栈. 对于call类型的 ...

  9. 从汇编来看c语言之变量

    1.基础研究 对如图程序进行编译连接,再用debug加载. 我们在偏移地址1fa处查看main函数的内容: 执行到1fd处,发现n的偏移地址为01a6,段地址存储在ds寄存器里,为07c4. 再查看函 ...

随机推荐

  1. Mapcontrol 遍历所有图层方法

    mapcontrol 遍历所有图层方法 2011-04-29 19:51 通过IMap中的get_layers()可以遍历MapControl中当前的图层.此方法可以通过指定UID对图层进行过滤或者分 ...

  2. AFNetwork ATS 网络层改造

    最近一直做项目的ATS改造,期间遇到了种种问题,各种坑都记录下来, 比如iOS版本.afnetwork版本.证书(是否为自签证书).域名验证.TLS版本等等,我们项目更复杂,还使用了域名到IP映射的路 ...

  3. strace命令简单用法

    strace可以显示一个程序经历的系统调用,接收到的信号等信息. 用法: 1.strace -ff -o output programName 将程序programName的写入output文件中,- ...

  4. bootstrapvalidator校验、校验清除重置

    //保存 function saveAdmin(){ //开启验证 $('#saveadmin_form').data('bootstrapValidator').validate(); if(!$( ...

  5. [Maven]Maven详解

    转自:http://www.cnblogs.com/hongwz/p/5456578.html 一.前言     以前做过的项目中,没有真正的使用过Maven,只知道其名声很大,其作用是用来管理jar ...

  6. Linux通过NAT方式配置网络

    步骤:1.将虚拟机的网卡VMware Network Adapter VMnet8改成DHCP自动获取IP.2.将Linux虚拟机的网卡自定义连接到VMware Network Adapter VMn ...

  7. opencv2.4.9在ubuntu(树莓派)上安装

    参考原文:https://my.oschina.net/u/1757926/blog/293976 1. 先从sourceforge上下载OpenCV的源码 http://jaist.dl.sourc ...

  8. “XXX::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。

    症状描述如下: 如果将一个委托作为函数指针从托管代码封送到非托管代码,并且在对该委托进行垃圾回收后对该函数指针发出了一个回调,则将激活 callbackOnCollectedDelegate 托管调试 ...

  9. 几大最短路径算法比较(Floyd & Dijkstra & Bellman-Ford & SPFA)

    几个最短路径算法的比较:Floyd 求多源.无负权边(此处错误?应该可以有负权边)的最短路.用矩阵记录图.时效性较差,时间复杂度O(V^3).       Floyd-Warshall算法(Floyd ...

  10. Kali连接数据库

    bt5的metasploit下连接postgresql在<metasploit渗透测试指南>已经介绍很清楚了,但是kail下部分路径是不一样,我就来科普一下.求过审核1.首先开启postg ...