TASM汇编与TurboC混合编程_第1页
TASM汇编与TurboC混合编程_第2页
TASM汇编与TurboC混合编程_第3页
TASM汇编与TurboC混合编程_第4页
TASM汇编与TurboC混合编程_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机操作系统实验报告计算机操作系统实验报告 目目 录录 一、实验目的一、实验目的 .2 二、实验内容二、实验内容 .2 三、开发环境三、开发环境 .2 四、分析设计四、分析设计 .2 1、实验要求、实验要求.2 2、设计原理、设计原理.3 3、涉及到的类、涉及到的类.5 4、流程图、流程图.6 五、结果及分析五、结果及分析.8 1、运行示例、运行示例.8 2、结果分析、结果分析.9 六、心得体会六、心得体会 .9 七、参考文献七、参考文献.10 TASM 汇编与汇编与 Turbo C 混合编程混合编程 1、实验目的实验目的 在 dos 下,练习使用 TASM 命令,并用 TASM 汇编并链接程序,了解汇编 程序与 c 语言程序的相互调用机制及其原理。 二、实验内容二、实验内容 实现 DOS 下的 TASM 汇编程序 hello。 实现 DOS 下的 TASM 汇编程序和 C 语言混合编程。 三、开发环境三、开发环境 此程序的设计在 Windows 7 操作系统下,用到 notepad+,TASM 工具,以 及虚拟机 vmware player。 四、分析设计四、分析设计 1、实验要求、实验要求 实现 DOS 下的 TASM 汇编程序 hello,理解 TASM 的相关命令。 实现 DOS 下的 TASM 汇编程序和 C 语言混合编程,使程序能够完美的运 行。 2.设计原理设计原理 C 语言是专门为编写操作系统而发明的语言,大多数现代操作系统都是用 C 语言结合汇编语言编写的,也有部分高层代码(如用户态模块、GUI、API 类 库等)是用 C+(通用) 、Object-C(苹果公司) 、C#(微软.NET) 、Java(嵌入 式系统)等面向对象的高级语言编写的。即: 层 次 语言功能 高 层 OOP(高级语言)编写 GUI 和类库等 中 层 C(中级语言)实现算法和 API 底 层 汇编(低级语言)控制硬件和 I/O 设备 我们的操作系统,不涉及高层部分,所以采用汇编+C 的方式来编写。 作为测试,我们编写一个汇编程序 afile.asm 和一个 C 程序 cfile.c,让它们 相互调用。具体来说,在 afile.asm 有一个显示一个字符的 printChar 函数和 getChar()函数,在 cfile.c 中有一个实现打印字符串的 printf()函数,在入口程序 afile.asm 中调用 cfile.c 中的 cmain 函数,再在 cmain 函数中调用 printf()函数, 最后由 printChar 函数在屏幕显示字符串中的字符。参见下图: afile.asm extern _cmain _start 调用_cmain 退出 printChar() getChar() bar.c void printf() 调用 printChar int cmain() 调用 printf afile.asm 与 cfile.c 的相互调用关系 五、结果及分析五、结果及分析 1、运行示例、运行示例 Windows 中启动 DOS 命令执行模式,在命令行键入:TASM hello.asm hello.obj 则会对启动 hello.asm 进行汇编,产生 hello.obj: 用 Tlink 链接编辑器,用于将.obj 链接为可执行程序.com,链接命令:Tlink /t hello, ,: 执行 ,键入: Hello: Windows 中启动 DOS 命令执行模式,在命令行键入: TASM afile.asm afile.obj 则会对启动 afile.asm 进行汇编,产生 afile.obj: 用 Tlink 链接编辑器,用于将.obj 链接为可执行程序.com,链接命令:Tlink /t afile, ,: Windows 中启动 DOS 命令执行模式,在命令行键入:TCC -mt -c -ocfile.obj cfile.c 则会对启动 hello.c 进行编译,产生 hello.obj: 用 Tlink 链接编辑器,afile 和 cfile 链接产生可执行的程序 ,链 接命令:Tlink /t afile cfile, ,: 运行 程序: 2、结果分析 编写一个汇编程序 afile.asm 和一个 C 程序 cfile.c,它们相互调用。在 afile.asm 有一个显示一个字符的 printChar 函数和 getChar()函数,在 cfile.c 中有 一个实现打印字符串的 printf()函数,在入口程序 afile.asm 中调用 cfile.c 中的 cmain 函数,再在 cmain 函数中调用 printf()函数,最后由 printChar 函数在屏幕 显示字符串中的字符。 先汇编 afile.asm 生成 afile.obj 和 ,然后编译 cfile.c 生成 cfile.obj 和 ,链接两个程序,生成 ,打开在屏幕显示字符串“hello,hupan 11348041” 。 六、心得体会六、心得体会 做实验之前虽然好多细节部分还不是太了解,但是对一个进程的流向和执 行过程还是有个大概的认识,所以这个实验做起来也不是那么的困难。不过后 来老师委托学习委员发给了大家一个资料包。里面有文档还有 TSAM 相关的工 具,于是实验过程要轻松了许多。刚开始的时候,对 TASM 的相关命令不是很 了解,于是编译出来的 cfile 程序一直无法运行,后来才知道没有用 Tlink 链接 编辑器将 cfile 程序与 afile 程序链接在一起,于是 cfile 中调用的一些函数没有 定义,相应的就无法运行了,将他们链接起来,才能够实现互相的调用。出现 这个问题的关键在于,我对汇编程序和 C 程序之间的互相调用规则以及原理没 有很深的了解。所以,在实验之前了解实验的基本步骤和实验的基本原理还是 有很大的必要的。 另外一个问题,当我把两个程序链接在一起编译得到一个新的 文件,可是打开却没有办法运行,原本我一直以为是链接出了问题,可是检查 了好几遍,发现编译以及链接的步骤完全是没有问题,于是我又去看汇编程序 以及 cfile.c 程序用没有问题。经过反复的试验,百度和 Google 查找资料,向同 学请教和讨论,终于找到程序的一个小错误,即把 ss 写成了 sp,然后一帆风顺, 顺利的完成了实验。 还要注意下一次的实验报告不要拖到要交报告的前一天来写,通常写的很 急,不能够写的很完美,毕竟赶出来的东西不如精雕细琢的东西。拖延症不好, 无论是学习上还是生活上,今天的事情,今天毕。 附:实验程序清单 afile.asm: extern macro %1 ;统一用 extern 导入外部标识符 extrn %1 endm .8086 _TEXT segment byte public CODE assume cs:_TEXT DGROUP group _TEXT,_DATA,_BSS org 100h start: mov ax,cs mov ds,ax; DS = CS mov es,ax; ES = CS mov ss,ax; SS = cs mov sp, 4800h ; call near ptr _cmain .1:jmp .1 _printChar proc push bp mov bp,sp ;* mov al,bp+4 mov bl,0 mov ah,0eh int 10h ;* mov sp,bp pop bp ret _printChar endp _getChar proc mov ah,0 int 16h ret _getChar endp public _printChar public _getChar extern _cmain:near extern _printf:near _TEXT ends _DATA segment word public DATA _DATA ends _BSSsegment word public BSS _BSS ends end start cfile.c: extern char getchar();

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论