TASM总汇编与TurboC混合编程.docx

上传人:b****1 文档编号:15074887 上传时间:2023-06-30 格式:DOCX 页数:11 大小:726.47KB
下载 相关 举报
TASM总汇编与TurboC混合编程.docx_第1页
第1页 / 共11页
TASM总汇编与TurboC混合编程.docx_第2页
第2页 / 共11页
TASM总汇编与TurboC混合编程.docx_第3页
第3页 / 共11页
TASM总汇编与TurboC混合编程.docx_第4页
第4页 / 共11页
TASM总汇编与TurboC混合编程.docx_第5页
第5页 / 共11页
TASM总汇编与TurboC混合编程.docx_第6页
第6页 / 共11页
TASM总汇编与TurboC混合编程.docx_第7页
第7页 / 共11页
TASM总汇编与TurboC混合编程.docx_第8页
第8页 / 共11页
TASM总汇编与TurboC混合编程.docx_第9页
第9页 / 共11页
TASM总汇编与TurboC混合编程.docx_第10页
第10页 / 共11页
TASM总汇编与TurboC混合编程.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

TASM总汇编与TurboC混合编程.docx

《TASM总汇编与TurboC混合编程.docx》由会员分享,可在线阅读,更多相关《TASM总汇编与TurboC混合编程.docx(11页珍藏版)》请在冰点文库上搜索。

TASM总汇编与TurboC混合编程.docx

TASM总汇编与TurboC混合编程

计算机操作系统实验报告

 

一、实验目的2

二、实验容2

三、开发环境2

四、分析设计2

1、实验要求2

2、设计原理3

3、涉及到的类5

4、流程图6

五、结果及分析8

1、运行示例8

2、结果分析9

六、心得体会9

七、参考文献10

 

TASM汇编与TurboC混合编程

1、实验目的

在dos下,练习使用TASM命令,并用TASM汇编并程序,了解汇编程序与c语言程序的相互调用机制及其原理。

二、实验容

实现DOS下的TASM汇编程序hello。

实现DOS下的TASM汇编程序和C语言混合编程。

三、开发环境

此程序的设计在Windows7操作系统下,用到notepad++,TASM工具,以及虚拟机vmwareplayer。

四、分析设计

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与cfile.c的相互调用关系

五、结果及分析

1、运行示例

Windows中启动DOS命令执行模式,在命令行键入:

TASMhello.asmhello.obj

则会对启动hello.asm进行汇编,产生hello.obj:

用Tlink编辑器,用于将.obj为可执行程序.,命令:

Tlink/thello,hello.,,<回车>:

执行hello.,键入:

Hello<回车>:

Windows中启动DOS命令执行模式,在命令行键入:

TASMafile.asmafile.obj

则会对启动afile.asm进行汇编,产生afile.obj:

用Tlink编辑器,用于将.obj为可执行程序.,命令:

Tlink/tafile,afile.,,<回车>:

Windows中启动DOS命令执行模式,在命令行键入:

TCC-mt-c-ocfile.objcfile.c则会对启动hello.c进行编译,产生hello.obj:

用Tlink编辑器,afile和cfile产生可执行的程序hupan.,命令:

Tlink/tafilecfile,hupan.,,<回车>:

运行程序:

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和afile.,然后编译cfile.c生成cfile.obj和cfile.,两个程序,生成hupan.,打开在屏幕显示字符串“hello,hupan11348041”。

六、心得体会

做实验之前虽然好多细节部分还不是太了解,但是对一个进程的流向和执行过程还是有个大概的认识,所以这个实验做起来也不是那么的困难。

不过后来老师委托学习委员发给了大家一个资料包。

里面有文档还有TSAM相关的工具,于是实验过程要轻松了许多。

刚开始的时候,对TASM的相关命令不是很了解,于是编译出来的cfile程序一直无法运行,后来才知道没有用Tlink编辑器将cfile程序与afile程序在一起,于是cfile中调用的一些函数没有定义,相应的就无法运行了,将他们起来,才能够实现互相的调用。

出现这个问题的关键在于,我对汇编程序和C程序之间的互相调用规则以及原理没有很深的了解。

所以,在实验之前了解实验的基本步骤和实验的基本原理还是有很大的必要的。

另外一个问题,当我把两个程序在一起编译得到一个新的文件,可是打开却没有办法运行,原本我一直以为是出了问题,可是检查了好几遍,发现编译以及的步骤完全是没有问题,于是我又去看汇编程序以及cfile.c程序用没有问题。

经过反复的试验,XX和Google查找资料,向同学请教和讨论,终于找到程序的一个小错误,即把ss写成了sp,然后一帆风顺,顺利的完成了实验。

还要注意下一次的实验报告不要拖到要交报告的前一天来写,通常写的很急,不能够写的很完美,毕竟赶出来的东西不如精雕细琢的东西。

拖延症不好,无论是学习上还是生活上,今天的事情,今天毕。

 

附:

实验程序清单

afile.asm:

externmacro%1;统一用extern导入外部标识符

extrn%1

endm

.8086

_TEXTsegmentbytepublic'CODE'

assumecs:

_TEXT

DGROUPgroup_TEXT,_DATA,_BSS

org100h

start:

movax,cs

movds,ax;DS=CS

moves,ax;ES=CS

movss,ax;SS=cs

movsp,4800h;

callnearptr_cmain

.1:

jmp.1

 

_printCharproc

pushbp

movbp,sp

;***

moval,[bp+4]

movbl,0

movah,0eh

int10h

;***

movsp,bp

popbp

ret

_printCharendp

_getCharproc

movah,0

int16h

ret

_getCharendp

public_printChar

public_getChar

extern_cmain:

near

extern_printf:

near

_TEXTends

_DATAsegmentwordpublic'DATA'

_DATAends

_BSSsegmentwordpublic'BSS'

_BSSends

endstart

 

cfile.c:

externchargetchar();

externvoidprintChar(charch);

voidprintf(constchar*str){

while(*str)

printChar(*str++);

}

/*charbuffer[10]="abcdefg";*/

cmain(){

charbuffer[30]="hello,hupan11348041";

printf(buffer);

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2