




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、汇编语言课程设计任务书一、课程设计目的1. 掌握汇编语言与高级语言的接u方法,正确编写混合语言程序,掌握混合 语言程序的调试和运行;2. 掌握dos、bios系统功能调用,掌握基本的显存读写技术;进一步了解 汇编接口的功能和用法,掌握利用定时器产生声音的方法;3. 学会用汇编语言编写一个较完整的实用程序,培养自己的动手操作能力;4. 学习汇编语言项目设计的基木思路和方法,编程、调试、撰写报告等。二、任务内容:任务一:混合编程,将内存中的一个字符串的小写字母转换为大写并输出。也 可根据自己兴趣自定题目。要求:1.分别运用混合编程的两种方法:嵌入式编程、c程序调用汇编函数模 块完成该任务;2. 也
2、可根据兴趣自定题目,如排序、求阶乘和等。任务二:以下题目二选一1. 显示系统日期和时间要求:1.在屏幕特定位置显示当前系统日期和时间;2. 显示的日期和时间要求即时更新,妖跳动的时钟、3. 可自定义电子钟的显示区域、显示位置、背景和前景色或以 图形化方式显示。4. 当按下某个键,如“q”时,程序返回dos,数字钟消失。2. 利用pc扬声器演奏乐曲要求:1.在屏幕特定位置显示乐曲名称;2. 循环演奏乐曲(自选);3. 当按下某个键,如“q”时,音乐停止,程序返回dos。课程设计报告的要求1. 本次课程设计每位同学必须认真、独立的完成课程设计的编程和调试。2. 课程设计报告要求使用a4纸打印,必须
3、有r录。封面提供,n容要认真独立完成。3. 课程设计报告内容一般应包含如下部分: 课程设计目的、内容; 每个任务的程序流程阁 程序淸单 调试结果及分析; 收获、体会和建议。4. 课程设计结束同时上交课程设计报告,不得拖延。成绩的评定1. 考勤(20分)2. 调试验收(30分)3. 随机回答指导教师的问题(20分)4. 课程设计报告(30分)5. 课程设计态度不认真,超过1/3时间不到者,不予及格。6. 完全拷贝他人,对设计内容一无所者或知之甚少者,一经发现,不予及 格。7. 课程设计拫告雷同或抄袭者,不予及格。8. 可以自主扩充功能,有创新可加分。汇编语言课程设计指导书一、混合编程预备知识(一
4、) 什么是混合编程多种程序设计语言间,通过和互调用、参数传递、共享数据结构和数据信 息而形成程序的过程就是混合编程。程序的大部分采用高级语言编写,可以提 高程序的开发效率;在某些部分,利用汇编语言编写,可以提高程序的运行效 率。(二) 混合编程方法汇编语言与c语言混合编程有4种实现方法:一是嵌入式汇编,即将汇编 语句或程序嵌入到c语言程序中;二是在c语言程序中调用汇编语言函数(汇 编函数以汇编程序源文件形式存在);三是在汇编语言程序屮调用c语言程序; 四是采用dos或bios调用函数。这里我们着重介绍前两种方法。1. 嵌入式汇编(1) c语言中嵌入汇编语句的格式如下:asm操作码操作数 <
5、;或换行 如以下c源程序文件“test.c” :1 iinclude <stdio.h>2 int x=10;3 main()4 5 inti=5byte ptr x ax, 20 i, ax6 asminc7 asranov8 asmmov9 printf(”i=dn”,x,i);10 getchar ();1”(2) 编译连接方法含有嵌入式汇编语句的c程序的编译连接,需要使用tc环境的命令行编 译器tcc.exe,而tcc.exe在编译时要调用tasm.exe,因此tc安装目录 下必须有汇编程序tasm.exe。但是在大多数的情况下此a泶屮是没有 tasnlexe的。我们可以先
6、下载tasm 5.0进行安装,然后将安装目录下的 tasm.exe直接拷w到tc安装目录下,就可以用了。tcc.exe的调用格式是:tcc options file s其中,files|为需要编译或连接的文件,可有一个或多个。foptionl为各个参数选项,常用的有“-b”,用于指示源程序中使用了嵌入式汇编,则编译命令为: tcc -id:tcinclude -b test注意:tcc区分大小写,b必须为大写。(3) 编译连接过程假定tc2.0安装目录为c:turboc2, test.c文件在turboc2文件夹中,且该目 录中含有tasm.exe。则编译连接过程如下: 启动命令提示符,使用c
7、dturboc2命令切换到tc目录,输入tcc命令: 运行该编译命令,如下阁所示表示编译连接成功:exes? c:tiido¥ssyst e>32c>d.turbo c uersion 2.0 copyright <c> 198?, 1988 borland international (test c:turbo assembler uersion 4.1 copyright <c> 1988, 1996 borland internationalbssembling file:test .asmerror messages:noneuapning
8、 messages: none tpasses:1henaining nenory:232k|turbo link uersion 2.0 copyright <c> 1987, 1988 borland international available nenory 396860 :turboc2>_ 此时在当前r荣不生成test.obj、test.exe文件,运行test.exe文件,结果如下:结果正确!2. 在c语言程序中调用汇编语言函数此方法要求分别编译c语言程序和汇编语言程序,再将目标文件连接成- 个可执行文件。在这一过程中,汇编语言程序被看作函数,被c语言程序调用。
9、 c语言程序以汇编语言子程序名作为函数名调用汇编语言程序模块。(1)编写源程序汇编语言子模块的过程应用public伪指令将其说明为“公用过程”。在 c语言程序中,也应对被调用的汇编语言程序模块用extern声明为“外部模例如:在c中调用汇编语言模块完成两个数的求和。 c文件(命名为addc.c)1 #include<stdio.h>2 main()3 4 extern int addup(int,int);5 int x=33z y=ss,z;6 z=addup(x,y);7 printf(nnx+y=%dn”'z);8 getchar();9 参数传递主要采用堆栈来进行。
10、对于tc中的小模式采用近调用,参数入 栈采用自右向左的顺序,即变量y、变量x,且在栈中各占用2个字节。汇编语言文件(命名为addm.asm,完成的功能为求两个整数之和)1 _text2 一3 public4 _addup5675 911 _addup12 一 text13 segment byte public 1 code assume cs:_text 一addupprocpushbpnovbp, spnovax,bp+4addax,bp+6popretendpendsendbp可以看出代码段是以带下划线的标识符开头的,代码段的标识a_text, 这是由tc编译程序所定好了的,如果不按照这
11、个格式书写汇编代码,调用就不 会成功。tc编译器默认情况下,对外部标识符均要在其首部加下划线,所以c 程序中调用的函数addup在这里也是以下划线标出:_addup。(2)编译过程 用masm宏汇编在命令行下对addm. asm汇编,汇编后生成一个模 块文件addm.obj,然后将addm.obj复制到tc r录下,以便于建立tc下的工程文件。 工程文件的建立。在tc集成环境下建一个新文件,其内容为:就只有以上两行内容,写完后保存为addcm.prj,说明了该工程包含了 addc.c和addm.obj两个程序模块。 对工程文件编译连接。在tc环境中利用compilemake exe file命
12、令, 可将该文件编译连接为addcm.exe。运行addcm.exe,结果如下:保护现场读取系统日期、时间分别将时间的时、分、秒转换力ascii码在指定位置显示期和时间恢复现场f1 >中断返回图2屮断处理程序流程图二、系统时间的获取和显亦(一)时间的获取调用系统口期和时间,并将调用的口期和时间数转换成ascii码存在系统 内存区的字符串中。将存在系统内存区的日期和时间用字符串存入显存区(显 存的起始地址:b800:0000)并在合适的位置显示出来。由于获取了的系统时间 不会自动刷新,所以我们要设计成刷新的方式(如利用定时器中断,中断类型 号为1ch)来不断获取系统的时间,这样就形成了会跳
13、动的电子钟。流程阁如图1、图2所示。开始i获取原1ch中断向量保存原中断向量设置新1ch的巾断向量开定时器屮断执行屮断处理程序断恢复原1ch的屮断向量结束i图1主程序流程图(二)屏幕特定位置显示字符 阅读教材p.324-335页内容。对应屏幕上的每个字符位置,显存空间都有相应的存储单元与之对应。对 应显示在屏幕上的每个字符,在存储器中由连续的两个字节表示,一个字节保 存ascii码,另一个字节保存字符的属性。属性字节对单色显示和彩色显示都 是冇效的。相应的值与属性关系参考教材p.325图9.5以及p.326图9.6以及表 9.7o我们可以使用bois显示中断10h的各项功能来进行显示字符的编程
14、。 首先,利用0号功能设置屏幕显示方式:mov ax, 0003h;设置80x25彩色文本方式int joh设置光标位置:mov ah, 02h mov bh,显示的页号 mov dx,显示的行、列 int joh 在光标位置显示字符:mov ah, 09h mov bh,显示的页号 mov bl,字符属性值 mov al,显示的字符 mov cx,显示次数int 10h、使pc发出音符声音8253定时器内部有三个独立的计数器:countero、counter 1 > counter2 (端 口地址为40h、41h、42h)和一个控制寄存器(端口地址为43h)。三个计数 器是分别编程的,
15、对任一个计数器编程时,首先要将控制字节写入控制寄存器。 控制字节各位含义如图1所示.r oo计数器锁存操作 01只读写lsb 10只读写msb、11 读写 lsb,:isb'0二进制l 1 bcd5马r 000 modeo 001 model xl0mode2 xll mode3 100mode4、101 mode500 选择 counto 01countl10 选择 count2 11无效sciscorl1rl0m2mlm0bcd图1控制字节各位含义pc中,通过初始化控制寄存器(43h端口值为0b6h),使通道2用于扬 声器发声。使扬声器发声的驱动电路如图2所示。8255 的 pb
16、端口 (61h)第1位8255 的 pb 端口 (6111)第0位1.19mhz 信号 计数值(地址42h )(地址43h )图2微机扬声器发声电路原理图放大器扬声器通过使8255的pb端口的第1位输出高电平打开与门,利用8253的2通 道发出不同频率的脉冲信号,经过放大器放大后,便可驱动扬声器发声。通过 改变计数值的方法,使其产生不同频率音调的声音。音符与频率值的对应关系 如表1所示。表1音符与频率值对应关系表123爨456712345671131147165175196220247262294330349392440494523编程提示:音频频率的产生,可通过设置8253通道2的计数器值来
17、确定。 计数值=1.19318mhz/给定音符频率=1234dch/给定音符频率可用以下程序求计数值。mov db给定频率值mov dx, 12hmov ax, 34dchdiv di得到的计数值,按低8位、高8位分别送通道2,程序如下:out 42h, almov al, ahout 42h, al乐曲是按照一定的高低、长短和强弱关系组成的音调,组成乐曲的每个音 符的频率值和持续时间是乐曲程序发声所需耍的两个数据。音符的频率可以从 表1屮获得,音符的持续时间根据乐曲每个音符的节拍数来确定。在4/4 (四 四拍)中,四分音符为一拍,每小节4拍,全音符持续4拍,二分音符持续2 拍,四分音符持续1
18、拍,八音符持续半拍等。如果我们给全音符分配1秒的时 间,则二分音符的持续时间为0.5秒。10ms的延迟时间可以简单地通过执行循环指令取得:wait1:mov cx, 2801delay: loop delay如果要产生与10ms成倍数的延迟时间,可执行该倍数次延迟10ms的指令。知道了音调与频率和时间的关系,我们就可以按照乐曲的曲谱将每个音符 的频率和持续时间定义成两个数据表,然后编写程序依次取出表中的频率值送 通道2并用持续时间进行延时。两只老虎1=c|1231两只老虎,5- 6 5- 4 3 1一 k没蚤眼睛,12313两只老虎,跑5» 6 5- 4 3 1 | 1 一
19、6;没i耳朵,真4 5 - i 34得快, 跑得5 1 - | 15奇怪, 真奇如上面两只老虎的乐曲,我们就可以建立如下数据表: mus一freq dw2 dup(262,294,330,262)dw 2 dup(330349r392)dw 2 dup(392,440,392,349,330,262)dw2 dup(262f392f262)dw-1mus_time dw8dup(100)dw 2 dup(100,100,200)dw2dup (75,25,75,25j00j00>dw 2 dup(100,100,200)三、附件附1:任务一参考程序清单1 芬include <std
20、io . ti>2 main() /* 主程序*/3 4 char *str=nthis started out as lowercase!”; printf("origin string:n%snn,str);6 asm mov sir str77 loop:/* c语言定义的标号*/9asmmov alr si10asmcmp alr 1 a 111asmjb next/*转移到c的标号*/12asmcmp alr1z11314asm/* j a next不是a'到f之间的字符保持原样15asmsub al,20h /*小写字母转换成大写*/16asmmov si,
21、al17 next:18asm inc si19asm and alr al20/* c语言中,字符串用nullco)结尾/21asm jnz loop2223printf(nuppercase string:n%snh 9 str);24getchar();25 设计思路:对字符串中的字符进行逐个判断是否为小写字母,若是,则转 换为大写。小写字母转换为大写字母的方法为减去20h。运行结果如下:c、c:turboc2a-exeorigin string:this started out as lowercase! uppercase string:this started out as low
22、ercase!附2:获取日期时间参考程序清单注意:此程序没宥设置为跳动的吋钟以及确定时钟显示位置。data segment data endscount;dwinfodbfcurrenr r二me ls : , odh, c,ah, s ;提不/5datestrdb100-00-0000f , odh, oah,;日期s示信息:month-day-yeartimestrdb1 00 : 00 : c 0 f f 0dhr 0ahr f s f;时间s示信息:hour :minute: secondcode segmentassume cs:code,ds:data;main programma
23、in proc farstart:mov ax,data mov ds,ax,保存原中断向呈mov alrich mov ah,35hint 21h;获取ich中断向量到es :bxpush es push bxpush ds;保存;设置新的中断向量mov gxr offset intpro mov ax,seg intpro mov ds,axmov alr ich mov ahr 25hint 21h;设置中断向量ds:dxpop dsin alr 21h;读亡新异赶奇存器and al, l1l1l1l开弓 t 器=out 2ihr al,写中靳=蔹吾存器sti,开中断mov dir of
24、fffhdelay:mov siroffffhdeiayl:dec si jnz delay! dec di jnz delay loop s/等待中®s :;恢复ich原中断向imainpopdxpopdsmoval,ichmovahr25hint21hmovax,4c00hint21hendp中断处理程字intprointoro croc near 现场push ds push ax push ex push dxnov ax,data nov ds,ax stidec count jnz exit;並不提7fmov dx,offset nov ah,09h int 21h ca
25、ll dispdate call disptime mov count, 18,exit:clipop dx pop ex pop ax pop dsiretintpro endpinfo,显示字符串;词甲函数显示曰期和时间;显.示日期子程字dispdate參爛隱dispdateproc nearpush ax push ex push dx oush si;获取系銳日期:入口: ah<-2ah,出口y:movah,2ahint21hmovax, exnovbxr 10leadatssr*9movcxr 4push dxxordxr gxdivbxadddlr30hmovsil.dlde
26、csiloop ypop gx nov alrcl xor ah,ah div bladd ax,3030hs cx<-yearz dh<-month,dl<-day;年汾转4位ascii码/指向字符串年份最后一位 ,年份4位,循坏4次,保存月曰;dx清零,保存余数即个位;商存ax,余数存dx,转ascii码,存dates tr字符串末尾;还原dx,处理彐;求曰的个位,存ah,十位存;分别转ascii码/存曰nov dh;处理弓;显示日期字符芸xorah, ahdivbl,求月的个位,存ah,十位存aladdax,3030h;分别转ascii妈subsi# 3raovsi,a
27、x,存曰novdxr offset datestrraovah,09hint21hpopsipopdxpopexpopaxretdispdateendp;足示时间子裡序disptimedisptimeprocpush ax push ex push dx push si;获取系统时间:入口: mov ahr 2ch int 21hnearah<-2chz 出口:ch<-hour, ck-ninute/ dh<-secondmov 10lea si,tinestrraov ch;处珪小时xor ahdiv bladd ax,3030hmov si9axadd si,3mov alr cl;处理分xor ahr ah div bladd ax,3030hmov isiz axadd sif 3mov alrdh;处理秒xor ahr ah div bladd ax# 3030h nov :si
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 春季学期德育工作计划发言稿模版
- 介质粉购销合同范本
- 北京公墓购买合同范例
- 冰瓶供应合同范例
- 加工厂承包合同范例
- 债权性投资合同范例
- 动力煤供需合同范例
- 酒店服务员年终工作总结模版
- 买标合同范例
- ppp项目运营合同范例
- 红河砷业有限责任公司200ta砷化锌电子信息新材料项目环评报告
- 保健品概念及分类
- 水电班组施工进度计划表
- 水土保持监理实施细则
- 打印版80个常见象形字(一年级必备)课件
- 2024届天津市天津一中高三第四次月考(英语试题文)试题含解析
- 医院不良事件管理质量评价标准
- 高中数学必修5《正弦定理与余弦定理》集体备课2课时表格式教案
- (现行版)江苏省建筑与装饰工程计价定额说明及计算规则
- 重庆2023年重庆鈊渝金融租赁股份有限公司(筹)招聘上岸提分题库3套【500题带答案含详解】
- JJG 596-1999电子式电能表
评论
0/150
提交评论