关于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直接调用汇编子程序(为了效率)。尽量别把底层汇编改了。
关于C转汇编(转自网上)的更多相关文章
- VS的 X64下的汇编编译
参考博客 VS编译64位汇编时报错:error C4235: 使用了非标准扩展: 不支持在此结构上使用“_asm”关键字 在用VS2013编译内联汇编时,报如下错误: 错误 5 error ...
- 冷知识:达夫设备(Duff's Device)效率真的很高吗?
ID:技术让梦想更伟大 作者:李肖遥 wechat链接:https://mp.weixin.qq.com/s/b1jQDH22hk9lhdC9nDqI6w 相信大家写业务逻辑的时候,都是面向if.el ...
- 使用DOSBox在Win7_x64下搭建汇编环境
1. 软件安装 1. debug.exe,masm.exe,link.exe,edit.com等汇编工具,一般32位的windows系统有自带,但64位系统下并没有,而且将32位系统下的工具拷贝到64 ...
- 在64位windows 7上安装汇编调试工具debug.exe的方法
最近我在研究汇编,书中介绍的调试工具还是基于WinXP 32bit时代中自带debug.exe进行调试,但是64bit的Windows XP.Vista.Win7.Win8都已经不自带这个工具了,网上 ...
- 汇编Ring 3下实现 HOOK API
[文章标题]汇编ring3下实现HOOK API [文章作者]nohacks(非安全,hacker0058) [作者主页]hacker0058.ys168.com [文章出处]看雪论坛(bbs.ped ...
- Win32汇编环境配置
放假了,发现自己知识面窄,趁有时间就打算折腾下Win32汇编.其实在学校也上过汇编课,是基于dos的.那时老师不务正业,老跟我们讲政治经济文化,唯独不怎么讲课;再加上自己的问题,导致了dos汇编学得好 ...
- 第一个嵌入汇编的C程序
最近两天开始学习linux内核,看了赵炯博士的<linux内核完全注释>感觉受益匪浅.今天看到第三章 嵌入汇编部分,于是写了一个小程序试验了一下,用gcc编译通过.代码如下: #inclu ...
- 内联汇编和JMP到内联函数注意事项
对于jmp类型的hook, 如果自己的过程没有使用_declspec(naked),那么系统会自动给添加一些额外的代码,控制堆栈平衡,但是这些额外的代码会破坏被hook函数的堆栈. 对于call类型的 ...
- 从汇编来看c语言之变量
1.基础研究 对如图程序进行编译连接,再用debug加载. 我们在偏移地址1fa处查看main函数的内容: 执行到1fd处,发现n的偏移地址为01a6,段地址存储在ds寄存器里,为07c4. 再查看函 ...
随机推荐
- [PHP] - Laravel - CSRF token禁用方法
前文 CSRF攻击和漏洞的参考文章: http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html Laravel默认是开启了CSRF功能, ...
- [Spring MVC] - view的redirect和forward
可以通过redirect/forward:url方式转到另一个Action进行连续的处理.可以通过redirect:url 防止表单重复提交 .写法如下:return "forward:/o ...
- 手机网页调试利器: Chrome
新开发的网页需要在手机或是模拟机上运行测试, 可以借助 Chrome提供的手机网页预览程序进行简单调试.查看 制作的网页是否能够适合各种手机型号使用. 下面所以下如何使用Chrome调试多类型手机网页 ...
- MyBatis原理分析之三:初始化(配置文件读取和解析)
1. 准备工作 编写测试代码(具体请参考<Mybatis入门示例>),设置断点,以Debug模式运行,具体代码如下: )ExecutorType:执行类型,ExecutorType主要有三 ...
- mysql:查询结果添加序列号
select (@i:=@i+1) as i,table_name.* from table_name,(select @i:=0) as it
- Ubuntu下,python输出中文
python教程里说,如果要输出非英语文本就加前缀u或U, 例如: print u"你好啊,祖国" print u"こんにちは.私はとてもいいです" 结果会报错 ...
- caffe-mnist别手写数字
[来自:http://www.cnblogs.com/denny402/p/5685909.html] 整个工作目录建在:/home/ubunt16041/caffe/examples/abc_mni ...
- i2c 读写
在I2C设备读取,必须是在同一个周期内. 一个例子,可以同时读出两个值 int read_register_double_value(int reg_addr, unsigned char *valu ...
- 写给java开发的运维笔记
转载至:https://github.com/biezhi/java-bible/tree/master/learn_server
- email
#region 邮件帮助类 //+-------------------------------------------------------------------+ //+ FileName: ...