今天上自习回来打开电脑觉得无聊就收拾一下文件夹,无意中打开了汇编文件夹的一个ppt,是讲在Turbo C是怎么使用嵌入汇编的,觉得不错,汇编已经学得快一年的,而且我现在正在看反汇编呢,可是发现自己不知道汇编代码是这么编译运行的,实则惭愧阿。

找来以前的课本--哦,恍然大悟,原来是这样的。

我把上面的代码拷下来,才发现竟然没告诉我们是这么编译的。直接编译以前好像干过,不行。上网搜,还是有些的,都是csdn的,按照上面的说法下了个tasm(后来发现自己有masm),把tasm.exe托到tc目录(可以直接用masm)。

#include void upper(char *dest,char *src)

{ asm mov si,src

/* dest和src是地址指针 */

asm mov di,dest

asm cld

loop: asm lodsb /* C语言定义的标号 */

asm cmp al,'a'

asm jb copy /* 转移到C的标号 */

asm cmp al,'z'

asm ja copy

/* 不是’a’到’z’之间的字符原样复制 */

asm sub al,20h /*小写字母转换成大写*/

copy: asm stosb

asm and al,al

/* C语言中,字符串用NULL(0)结尾 */

asm jnz loop

}

main() /* 主程序 */

{

char str[]="This Started Out As Lowercase!";

char chr[100];

upper(chr,str);

printf("Origin string:\n%s\n",str);

printf("Uppercase String:\n%s\n",chr);

}

就这个例子了,进入命令行,输入tcc -S file.c 生成.asm文件,按照网上说的用link连接,可是出错,大意是访问地址出错。怎么办,用tlink试一下,呵呵还是不行,是printf未定义(后来想起这个需要c的库函数,苯阿,都是问题解决了才看到问题的本质阿)。还是去找,网络的信息真多,也真浪费时间阿,你看都几点了。有个说法是  tlink m.obj cs.lib,但是要么就出错,要么就运行exe时显示ntvdm cpu 遇到无效的指令。查了一下原因貌似堆栈溢出,哦,那就自己添加堆栈申请的代码阿。。。,没完没了

后来,拿了一本书,清华大学的,有两种方法,一种是以工程方式(这个还没来得及看呢,有机会以后讲了),第二中是分别用c和汇编的编译器得到他们的目标代码,在连接在一起阿。(阿,真辛苦!)

我先 tcc -S file.c 生成.asm文件,再用tasm编译出目标文件,最后直接用tc打开c文件,编译运行。ok。说来真的简单阿,可是花了我这么多的时间,为什么没有人教我阿,啊啊啊 。

附带上c中嵌入汇编的的要求:

格式

asm  操作码  操作数

举例

asm  mov ax,ds;

asm  pop ax; asm pop ds; asm ret;

asm  push ds

操作码支持8086/8087指令或若干伪指令:db/dw/dd和extern

操作数是操作码可接受的数据:立即数、寄存器名,还可以是C语言程序中的常量、变量和标号等

内嵌的汇编语句可以用分号“;”结束,也可以用换行符结束

使用C的注释,如 / * … * /

正确运用通用寄存器、标号等

命名约定

汇编语言过程应采用C语言类型

声明约定

C对调用的外部过程、变量等采用EXTERN说明

汇编语言程序的标识符用public操作符定义

寄存器使用约定

存储模式约定

采用相同的存储模式

参数传递约定:堆栈和共享变量

感谢燕姿的歌,不然睡着了都。。

----by adrian

turbo c 混编 汇编语言,Turbo C 编译 嵌入汇编相关推荐

  1. c51 嵌入汇编语言,在C51中嵌入汇编

    在C51编程中,有时控制一些器件时,需要较强实时性,这时有必要在其中嵌入ASM语句,关于嵌入的方法众多,网上也可以找到相关说明,不过说得并不详细,这里结合本人调试18B20测温程序来说说如何在C中嵌入 ...

  2. 【iOS-Cocos2d游戏开发之十二】浅析使用C++/C/OC进行iOS游戏混编出现“failed with exit”问题与小结;...

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/478.html ...

  3. Xcode中C、C++、Object-C3种语言的混编

    http://hi.baidu.com/onejw/item/f34390c997cdc226a1b50ae http://www.cocoachina.com/ask/questions/show/ ...

  4. 京东App Swift 混编及组件化落地

    背景 自 Swift 诞生以来,逐步见证其从饱受诟病到日渐完善.在苹果的全力推动下,潜移默化地把开发支持中心从 Objective-C 转向 Swift,在业界的呼声也越演越烈.当我们相继迎来 ABI ...

  5. 从预编译的角度理解Swift与Objective-C及混编机制

    本文从预编译的基础知识入手,由浅至深的介绍了 Objective-C 和 Swift 的工作机制,并通过这些机制来解释混编项目中使用到的技术和各种参数的作用,由此来指导开发者如何进行混编. 写在前面 ...

  6. keil C对lib封装库反汇编成C语言,Keil软件“C语言”及“汇编”混编 —— 相关知识整理.doc...

    Keil软件"C语言"与"汇编"混编 相关知识整理 用Keil在C中嵌入汇编1 在Keil中嵌入汇编2 介绍直接嵌入汇编代码的方法4 采用汇编可能会有的好处5 ...

  7. keil c语言pdf,Keil软件“C语言”与“汇编”混编 —— 相关知识整理.pdf

    Keil软件"C语言"与"汇编"混编 -- 相关知识整理.pdf Keil 软件软件C 语言语言与与汇编汇编混编混编 相关知识整理相关知识整理 用 Keil 在 ...

  8. Linux下C++和Fortran的混编

    事情的起因是我需要计算多组分燃烧问题中的粘性项,实现起来非常麻烦.并且CHEMKIN中有现成的代码,但问题在于我的程序为.cpp的MPI并行代码.将Fortran代码翻译成C++代码再用也可,但是仅仅 ...

  9. TASM、TCC和TLINK实现汇编和C的混编

    TASM.TCC和TLINK的使用 由于网上有关TASM.TCC和TLINK使用的资料较少,本人希望后来者在完成操作系统实验时不至于在实验工具的使用上遇到过多困难,因此,下面将对TASM.TCC和TL ...

  10. Swift 与 Objective-C混编xxx-Swift.h File not found

    在iOS 开发中,由于苹果14年发布了Swift语言,具备简单实用.高效等诸多优点,越来越受开发者青睐.另外,由于Objective-C多年发展和稳定性,有很多框架(特别是商业SDK)采用Object ...

最新文章

  1. 【C++自我精讲】基础系列二 const
  2. java ppt 转图片格式_Java PPT(X)转图片、PDF和SVG
  3. python的scrapy框架的安装_Python爬虫基础(四)--Scrapy框架的安装及介绍
  4. 关于操作系统中英文切换的.po和.mo介绍
  5. 安装mysql程序运行出错_如何解决mysql安装后.net程序运行出错的问题
  6. nfc修改饭卡软件下载_你还要什么校园卡?有NFC不就够了
  7. 智能运维(AIOps)时代开启,一文帮你快速了解其定义与发展现状
  8. 左对齐 latex_LaTex中使用XYpic绘制交换图表
  9. java谁对view进行渲染_为啥 Response.Write 后,View就不渲染了?
  10. HTML+CSS实现淘宝首页
  11. 《信息化项目文档模板一——项目需求说明书》
  12. 我的超休闲游戏作品集
  13. 轴承选型选不好,可别再说轴承质量差劲啦!
  14. MTK平台 Android8.1 SD卡驱动能力修改
  15. nvm,node.js,npm,cnpm都是什么意思,怎么使用。
  16. 「MacTeX」如何插入代码块
  17. bmob php支付,个人开发者也能盈利!Bmob支付SDK使用实例
  18. navicat打开数据库某个表 报table 啥啥啥 doesn't exist
  19. POJ-2387:Dijkstra模板题
  20. Windows_U盘_SD卡_硬盘等存储介质无法完成格式化

热门文章

  1. vector::erase()的那些事儿
  2. 一个DirectInput演示程序
  3. 计算机学win7画图,win7自带画图工具
  4. 教你如何正确使用CSDN下载,福利贴,个别方法免积分
  5. ADAS技术市场总结展望(2021年-2022年)
  6. unitywebplayer 32/64 5.3版本
  7. python深度学习介绍
  8. 证件照制作微信小程序源码
  9. 廖雪峰Python练习题
  10. 罗技鼠标驱动怎么设置宏?