- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验项目-3:C和汇编的混合编写
实验项目 3:C和汇编的混合编写【实验题目】 C和汇编混编实现多种功能【实验目的】了解汇编的编写,熟悉linux环境下对磁盘的读写,学会C语言和汇编语言的混合编写【实验要求】clr_screen清除屏幕功能key_detect按键检测功能:a.通过参数指定所按按键是否回显b.通过参数指定调用该函数时是否阻塞,即指定函数是等待任意按键按下才返回,还立即返回c.有按键按下返回该按键ascii码,无按键按下返回0read_floppy读软盘功能:a.通过参数指定起始扇区/扇区数目b.其他参数及返回值可以自定义c中实现函数 void print_str_uppercase(char *str): a.如果str = NULL,将entry.asm文件中的预定义字符串“success”转换 为大写并输出; b.如果str != NULL,将str指向的字符串转大写输出; c.在entry.asm中调用一次该函数显示“SUCCESS”c中实现函数 int choose(int a, int b, int c, int d):在entry.asm中调用该函数,输出a, b, c, d中的最大值和最小值。【实验准备】软件工具及作用必备:Ubuntu系统Vmware/Virtualbox虚拟机,执行系统镜像gcc 编译器,完成c代码编译/链接nasm汇编编译器,完成汇编代码编译dd镜像生成工具可选: hexdump16进制查看工具(hexdump -C xxx.bin) objdump反汇编工具(objdump -Mi8086,intel -d xxx.o) bochs虚拟机,汇编代码调试【实验过程】功能展示如图:entry.o 先被执行其中执行了 boot.asm中的代码得到 : Loading Boot...然后执行了函数 showInfo 得到: Loading Kernel... 有执行了函数 print_str 打印了: Success.接下来是自己编写的函数 print_str_uppercase :大写输出 SUCCESS还有函数 choose 判断最大最小值 。以上函数都是C语言和汇编的混合编写。main.o 接着运行 a. 首先是清屏函数 slr_screen() 如图,按下1后会将之前的信息以黑色字体覆盖实现清屏,为了方便交互在清屏后立即打印菜单。 b.接着是按键检测函数 key_detect(char*,char*)按下2后进入按键检测功能,判断不阻塞和不回显的标志都是0,以上是传参为 (0,1)的情况,即阻塞,需要按键才返回的情况。c.最后是读软盘功能 read_floppy(int,int)第一个参数是起始扇区,第二个参数是扇区数编译过程代码一中自己添加的部分:entry.asm部分:main.c部分:utils.asm部分:【实验总结】从头开始讲好了,清屏功能其实是百度的,最后发现就两句代码;接着做按键检测,感觉题目的意思很绕,一直理解不清楚,在TA和同学的帮助下终于搞懂了,主要还是弄清楚回显和阻塞的关系;然后是读软盘的功能,这个模仿boot.asm中的代码再进行传参就可以,虽然运行后我自己也不清楚是不是成功了,在这个函数上的反馈我做的不是很好;接下来就是跟C语言接轨的函数了,做起来思路也比较清晰,但是在细节的地方还是不够注意,比如print_str_uppercase函数的参数类型是指针,所以在给它传空指针的时候直接传0就可以,至于choose函数我一开始想的太复杂了,参数的要求是int类型,而从汇编中传入是使通过字符串传入,所以得到的是ASCII码,所以我就想着要进行类型转换在输出,后来一想,即使所谓的数字是字符串,但也可以进行大小的比较,所以直接比较输出结果就行。完成这个实验确实花了不少时间,但是还是很有收获。【参考文献】《INTEL汇编语言程序设计》《x86汇编语言-从实模式到保护模式》
您可能关注的文档
- 安徽省2018年中考数学考纲变化对照2017-2018.docx
- 安徽省中小型机械制造人业员流失的原因及对策0---副本.doc
- 安徽省亳州市2016-2017学年高一(上)期中化学试卷(Word版-含解析).doc
- 安徽省2017年中考化学试题.doc
- 安徽省亳州市2018届高三上学期期末质量检测政治试卷(pdf版).pdf
- 安徽省六校教育研究会2018届高三第二次联考理综物理试题-word.doc
- 安徽省六校教育研究会2018届高三第二次联考理科数学试题.doc
- 安徽省六安市舒城中学2018届高三仿真(二)数学(文)试题+Word版含答案.doc
- 安徽省合肥一中、马鞍山二中等六校教育研究会2018届高三上学期第二次联考英语试卷.docx
- 安徽省合肥市2018年高三第一次教学质量检测化学试题.doc
- 2021-2022学年陕西省三原县北城中学高一月考数学试卷.docx
- 2021-2022学年吉林省辉南县第六中学高一上学期周测数学试卷.docx
- 安徽省亳州市第五完全中学2021-2022学年高一上学期期中考试历史试题.doc
- 2021-2022学年黑龙江绥化市第一中学高一上学期期中考试数学试卷.doc
- 2021-2022学年河南省商丘一中高一上学期期中语文试题.docx
- 2020-2021学年河北省衡水市第二中学高一上学期期中语文试题(解析版).doc
- 2020-2021学年河北省衡水市第二中学高一上学期期中语文试题.doc
- 2020-2021学年四川省资阳市高一上学期期末语文试题.docx
- 2021-2022学年福建省泉州市永春县一中高一上学期期中语文试题(解析版).doc
- 2020-2021学年四川省资阳市高一下学期期末语文试题.docx
文档评论(0)