- 7
- 0
- 约2.59千字
- 约 5页
- 2017-07-05 发布于河南
- 举报
C 语言与启动代码
C 语言与启动代码
2009-09-04 02:09:36 来源: 作者: 【大 中 小】 浏览:114次 评论:0条
--?讲述当没有嵌入操作系统时如何启动执行文件???本来,各种C语言编译器都提供启动代码,以X86为例,无论是TC、MSC、?BC?都有。TC在不同模式下启动代码不一样,为C0X.OBJ.????一般编程,用不着去修改启动代码.但有的场合就有必要了.笔者为一套系统?开发软件时发现:一套系统当没有操作系统时,要想使得系统正常运行是相当困难?的.?笔者开发的系统CPU为80C188EB,无操作系统.?开发工具为TC2.0.?为了能使?得系统运行,又不能用太低级的语言如汇编,可谓历尽辛苦(当然可以买现成的开发?工具和仿真工具,太贵).????笔者重写了TC的启动代码,另外还改写了一个重定位工具(把EXE文件变为可?直接写入ROM去的文件).因为很少见到类似文章,下面把主要内容写出来,以飨?读者.?C语言的启动代码如下:????;?tcstart.asm?;?for?d000?code?only,?external?eprom?on?memory?card?;?FOR?PC?ROM??extrn??_main:far?;??/*??说明外部的C语言的MAIN()?函数?*/?_text?segment?byte?public?CODE?;?/*?C语言生成的代码段?*/?_text?ends?_textend?segment?para?public?CODEEND;??/*?代码段的结束段?*/?_textend?ends?_data?segment?para?public?DATA;?/*?C语言生成的初始化数据段?*/?_data?ends?_dataend?segment?para?public?DATAEND;?/*?初始化数据段的结束段?*/?_dataend?ends?_bss?segment?para?public?BSS??;/*?C语言生成的非初始化数据段?*/?_bss?ends?_bssend??segment?byte?public?BSSEND;/*?C语言生成的非初始化数据结束段?*/?_bssend??ends?_stack?segment?para?stack??STACK?;?/*?堆栈段?*/?_stack?ends?DGROUP?group?_DATA,?_DATAEND,?_BSS,?_BSSEND?CGROUP?group?_TEXT,?_TEXTEND?_TEXT?segment????;?/*?代码段?*/?assume?CS:CGROUP,?DS:DGROUP,?ES:DGROUP,?SS:_STACK?public?start?db?55h???;/*?PC?ROM?标志?*/?db?0AAh?db?40h?jmp?start?start:?cli????????????;?disable?interrupts?mov?ax,?_STACK?;?initialise?stack?mov?ss,?ax?mov?ax,?offset?stackend?mov?sp,?ax?mov?ax,?seg?_BSS?;?/*?BSS?SEG?CLEAR?*/?mov?es,?ax?mov?cx,?offset?DGROUP:endbss?mov?di,?0????mov?ax,?0?rep?stosb?;?write?to?ES:DI?mov?ax,?seg?DGROUP??;初始化数据段?mov?es,?ax?;?point?ES?to?_DATA?mov?cx,?offset?DGROUP:enddata?mov?si,?0?mov?di,?0?assume?ds:CGROUP?mov?ax,?seg?_TEXTEND:codeend?inc?ax?mov?ds,?ax?;?point?DS?to?_CONST?rep?movsb?;?copy?_CONST?to?_DATA?push?es?;?point?DS?to?_DATA?pop?ds??????????????????????????????;下面内容非PC?机可以不要?mov?al,?80h??????;?enable?NMI?out?0a0h,?al?mov?al,?0bch?????;?enable?8259?PIC??1011-1100?(irq0,1,6?enabled)?out?21h,?al??????????????????????????????;上面内容非PC?机
原创力文档

文档评论(0)