微机原理课程设计报告 - 基于80X86汇编语言的动画图形设计

更新时间:2024-06-16 02:37:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

微机原理与接口技术

一、课题名称

基于80X86汇编语言的动画图形设计

二、设计任务书

课 程 设 计 任 务 书

1 课题名称:基于80X86汇编语言的动画图形设计 2 课程设计目的

通过本课程设计,初步掌握《微机原理及接口技术》这门课程课堂所学的理论知识具体运用到实践中去的基本方法。掌握利用BIOS实现微型计算机显示器和键盘接口程序设计的方法;掌握利用CPU汇编语言设计较大程序的一般方法;进一步加深对学习过程中的基本知识、基本理论、基本方法的理解;从而为今后从事微型计算机软硬件的设计、维护、调试和应用等打下良好的基础。 3内容简述

利用汇编语言设计一动画图形,具体内容由学生自己确定,原则上应为以下形式之一:

⑴图形按照一定规律自行运动且由键盘控制图形的起、停; ⑵键盘作为功能键,控制图形的过程运动和功能变化;

⑶交互式动画图形,既通过按下键盘上不同的按键后,能使图形按照不同的方向运动和静止。

5设计方案提示

⑴利用DOS系统功能调用和BIOS的INT16H实现按键的识别。 ⑵利用BIOS的INT10H完成图形绘制。 ⑶CRT工作方式04H为:320×200(彩色); CRT工作方式10H为:640×350(16色); CRT工作方式12H为:640×480(16色)(推荐);

三、内容提要

摘要:本实验主要讲述了基于80X86汇编语言动画的设计。主要采用了两种BIOS调用:INT 10H(显示中断)和INT 16H(键盘中断)。在与CPU和其各寄存器的配合工作下,完成动画图形。

关键字:BIOS中断 子程序 宏调用 字符图形

- 1 -

Abstract: The present work describes the animation design based on 80X86 assembly language. It mainly uses two BIOS calls: INT 10H (show interrupts) and the INT 16H (keyboard interrupt). With the cooperating of CPU and its various registers, the animation graphics work can be completed.

Keywords: BIOS interrupts; subroutine; macro; call; Character Graphics

- 2 -

四、目录

正文

1、概述所作题目的意义、系统的主要功能、及使用方法; 2、硬件电路设计及描述; 3、软件设计流程及描述; 4、源程序代码(要有注释)。

六、课程设计体会

七、参考文献 八、谢词 九、附录

- 3 -

五、正文

1、概述所作题目的意义、系统的主要功能、及使用方法;

2、硬件电路设计及描述;

3、软件设计流程及描述;

- 4 -

开始 AX清零,入栈 小鸟汽车动画 总程序流程图 设置320*200彩色图形方式 清屏、宏调用CLEAR 显示提示信息 AL?键盘输入字符 Y(AL)=’1’? N清屏CLEAR Y(AL)=’2’ 调用小鸟子程序 NN(AL)=’3’ Y调用汽车子程序 清屏CLEAR 结束

- 5 -

开始 汽车子程序 将寄存器压栈 设置显示器显示方式 AL=3,80*25(彩色) 设置彩色组颜色为绿、红、黄 调用清屏宏 选择开始显示汽车的位置 5行0列 调用move_shape子程序 结束

- 6 -

开始 move_shap子程序 将寄存器压栈 取当前显示方式 给变量赋值,di指向字符图形表中的第一个字符 暂停和返回功能 行列坐标相对移动 N出屏否? Y显示汽车的字符CX=汽车的字符数 将寄存器出栈 使di指向汽车下一个字结束 CX=CX-1 NCX=0? Y 调用dly子程序 调用erase子程序

- 7 -

开始 dly子程序 将cx、dx寄存器压栈 DX=1000 CX=6801 CX=0? N CX=CX-1 Y DX=DX-1 N DX=0? Y 将cx、dx寄存器出栈 结束

- 8 -

开始 erase子程序 CX=汽车字符的个数; DX=汽车的相对坐标; di指向汽车字符 行列坐标相对移动 设置光标的位置 清除汽车的字符 使di指向汽车下一个字CX=CX-1 CX初值为汽车字符数 N CX=0? Y CX=汽车字符的个数; DH=汽车的行坐标; DL=DL+1汽车的列坐标加1; di指向汽车字符 结束

- 9 -

开始 小鸟子程序 设置显示器显示方式 AL=3,80*25(彩色) 设置彩色组颜色为绿、红、黄 结束 调用清屏宏 取当前显示方式 选择开始显示小鸟的位置 10行0列 暂停和返回功能 Si=2,di指向字符图形表中的第一个字符 N Y Y si=0? 出屏否? N si=si-1 设置光标的位置 di=di+2 di指向下一个字符 显示小鸟的字符 小鸟列坐标加1 调用dly子程序 用空白清除小鸟字符

- 10 -

调用INT 16H,AH=12H读取键盘标志 暂停和返回功能 按下右shift? Y N 调用INT 16H,AH=12H读取键盘标志 Y 按下左ctrl? 按下左shift? N Y N 继续执行代码 返回主菜单

- 11 -

4、源程序代码(要有注释)。

六、课程设计体会

这次课程设计我们选的是基于80X86汇编语言的动画编程,这学期刚学《微机原理与接口技术》,对于汇编语言我们只学到最基本的内容。要用它编出一个动画来难度可想而知。刚发下课程设计任务书时,老师给我们讲解了动画的基本知识,让我们对动画编程有了个初步的了解。回去之后,当我们自己开始调试时问题来了,一开始连汽车的图形都无法显示,虽然我们已经找到了已经可以运行的程序,但是面对有200多行的代码,我们有心无力。

在多次与老师交流后,我对程序一步一步加深了认识,只有在完全理解了前人的程序和思想后,我才可能有自己的设计。功夫不负有心人,在老师的指导下我查阅了大量的资料后,终于弄懂了程序,并改进了程序。

七、参考文献

1.IBM-PC汇编语言程序设计(第二版)沈美明 温冬婵 清华大学出版社 2.IBM PC 80X86汇编语言程序设计 汪媛媛 任卓谊 冶金工业出版社

3.8086/8088和ARM核汇编语言程序设计 试验教程 李敬兆 中国科学技术大学出版社 4.微机原理与汇编语言程序设计 刘永华 王成端 中国铁道出版社 5.汇编语言程序设计 甘玲 机械工业出版社

6.汇编语言、微机原理及接口技术 初华 电子工业出版社

7.16/32位微机原理、汇编语言及接口技术 钱小捷 陈涛 机械工业出版社 8.www.hackbase.com BIOS中断大全 9.汇编语言 王爽 清华大学出版社

10.汇编语言课程设计案例精编 李珍香 中国水利水电出版社

- 12 -

八、谢词

在这次课程设计中,电信学院的丁老师给了我们莫大的支持,感谢丁老师在百忙之中抽出时间给我们指导和帮助。

九、附录

BIOS中断大全 (1)2009-09-22 10:32:07

www.hackbase.com

来源:beach's blog

1、显示服务(Video Service——INT 10H)

00H —设置显示器模式0CH —写图形象素 01H —设置光标形状0DH —读图形象素

02H —设置光标位置0EH —在Teletype模式下显示字符 03H —读取光标信息0FH —读取显示器模式 04H —读取光笔位置10H —颜色 05H —设置显示页11H —字体

06H、07H —初始化或滚屏12H —显示器的配置

08H —读光标处的字符及其属性13H —在Teletype模式下显示字符串 09H —在光标处按指定属性显示字符1AH —读取/设置显示组合编码 0AH —在当前光标处显示字符1BH —读取功能/状态信息

0BH —设置调色板、背景色或边框1CH —保存/恢复显示器状态 (1)、功能00H

功能描述:设置显示器模式 入口参数:AH=00H

AL=显示器模式,见下表所示 出口参数:无

可用的显示模式如下所列:

显示模式显示模式属性显示模式显示模式属性 00H40×2516色 文本01H40×2516色 文本 02H80×2516色 文本03H80×2516色 文本 04H320×2004色05H320×2004色 06H640×2002色07H80×252色 文本 08H160×20016色09H320×20016色 0AH640×2004色0BH保留

- 13 -

0CH保留0DH320×20016色

0EH640×20016色0FH640×3502(单色) 10H640×3504色10H640×35016色 11H640×4802色12H640×48016色 13H640×480256色

对于超级VGA显示卡,我们可用AX=4F02H和下列BX的值来设置其显示模式。 BX显示模式属性BX显示模式属性

100H640×400256色101H640×480256色 102H800×60016色103H800×600256色 104H1024×76816色105H1024×768256色 106H1280×102416色107H1280×1024256色 108H80×60文本模式109H132×25文本模式 10AH132×43文本模式10BH132×50文本模式 10CH132×60文本模式 (2)、功能01H

功能描述:设置光标形状 入口参数:AH=01H

CH低四位=光标的起始行 CL低四位=光标的终止行 出口参数:无 (3)、功能02H

功能描述:用文本坐标下设置光标位置 入口参数:AH=02H BH=显示页码 DH=行(Y坐标) DL=列(X坐标) 出口参数:无 (4)、功能03H

功能描述:在文本坐标下,读取光标各种信息 入口参数:AH=03H BH=显示页码

出口参数:CH=光标的起始行 CL=光标的终止行 DH=行(Y坐标) DL=列(X坐标) (5)、功能04H

功能描述:获取当前状态和光笔位置 入口参数:AH=04H

出口参数:AH=00h——光笔未按下/未触发,01h——光笔已按下/已触发 BX=象素列(图形X坐标)

CH=象素行(图形Y坐标,显示模式:04H~06H) CX=象素行(图形Y坐标,显示模式:0DH~10H) DH=字符行(文本Y坐标) DL=字符列(文本X坐标)

- 14 -

(6)、功能05H

功能描述:设置显示页,即选择活动的显示页 入口参数:AH=05H AL=显示页

对于CGA、EGA、MCGA和VGA,其显示页如下表所列: 模式页数显示器类型 00H、01H0~7CGA、EGA、MCGA、VGA 02H、03H0~3CGA

02H、03H0~7EGA、MCGA、VGA 07H0~7EGA、VGA 0DH0~7EGA、VGA 0EH0~3EGA、VGA 0FH0~1EGA、VGA 10H0~1EGA、VGA 对于PCjr:

AL=80H——读取CRT/CPU页寄存器 81H——设置CPU页寄存器 82H——设置CRT页寄存器

83H——设置CRT/CPU页寄存器 BH=CRT页(子功能号82H和83H) BL=CPU页(子功能号81H和83H)

出口参数:对于前者,无出口参数,但对PCjr在子功能80H~83H调用下,有:BH=CRT页寄存器,BL=CPU页寄存器 (7)、功能06H和07H

功能描述:初始化屏幕或滚屏

入口参数:AH=06H——向上滚屏,07H——向下滚屏 AL=滚动行数(0——清窗口) BH=空白区域的缺省属性

(CH、CL)=窗口的左上角位置(Y坐标,X坐标) (DH、DL)=窗口的右下角位置(Y坐标,X坐标) 出口参数:无 (8)、功能08H

功能描述:读光标处的字符及其属性 入口参数:AH=08H BH=显示页码

出口参数:AH=属性 AL=字符

(9)、功能09H

功能描述:在当前光标处按指定属性显示字符 入口参数:AH=09H AL=字符

BH=显示页码

BL=属性(文本模式)或颜色(图形模式) CX=重复输出字符的次数 出口参数:无

- 15 -

(10)、功能0AH

功能描述:在当前光标处按原有属性显示字符 入口参数:AH=0AH AL=字符

BH=显示页码

BL=颜色(图形模式,仅适用于PCjr) CX=重复输出字符的次数 出口参数:无 (11)、功能0BH

功能描述:设置调色板、背景色或边框 入口参数:AH=0BH

设置颜色:BH=00H,BL=颜色

选择调色板:BH=01H,BL=调色板(320×200、4种颜色的图形模式) 出口参数:无 (12)、功能0CH

功能描述:写图形象素 入口参数:AH=0CH AL=象素值 BH=页码

(CX、DX)=图形坐标列(X)、行(Y) 出口参数:无 (13)、功能0DH

功能描述:读图形象素 入口参数:AH=0DH BH=页码

(CX、DX)=图形坐标列(X)、行(Y) 出口参数:AL=象素值 (14)、功能0EH

功能描述:在Teletype模式下显示字符 入口参数:AH=0EH AL=字符 BH=页码

BL=前景色(图形模式) 出口参数:无 (15)、功能0FH

功能描述:读取显示器模式 入口参数:AH=0FH

出口参数:AH=屏幕字符的列数

AL=显示模式(参见功能00H中的说明) BH=页码

(16)、功能10H

功能描述:颜色中断。其子功能说明如下: 功能号 子功能名称功能号00H — 设置调色板寄存器01H — 设置边框颜色 02H — 设置调色板和边框03H — 触发闪烁/亮显位

- 16 -

子功能名称 07H — 读取调色板寄存器08H — 读取边框颜色 09H — 读取调色板和边框10H — 设置颜色寄存器 12H — 设置颜色寄存器块13H — 设置颜色页状态 15H — 读取颜色寄存器17H — 读取颜色寄存器块 1AH — 读取颜色页状态1BH — 设置灰度值 (17)、功能11H

功能描述:字体中断。其子功能说明如下: 子功能号子功能名称 00H装入用户字体和可编程控制器 10H装入用户字体和可编程控制器

01H装入8×14 ROM字体和可编程控制器 11H装入8×14 ROM字体和可编程控制器 02H装入8×8 ROM字体和可编程控制器 12H装入8×8 ROM字体和可编程控制器 03H设置块指示器

04H装入8×16 ROM字体和可编程控制器 14H装入8×16 ROM字体和可编程控制器 20H设置INT 1Fh字体指针 21H为用户字体设置INT 43h

22H为8×14 ROM字体设置INT 43H 23H为8×8 ROM字体设置INT 43H 24H为8×16 ROM字体设置INT 43H 30H读取字体信息 (18)、功能12H

功能描述:显示器的配置中断。其子功能说明如下: 功能号 功能名称 功能号 功能名称 10H — 读取配置信息20H — 选择屏幕打印

30H — 设置扫描行31H — 允许/禁止装入缺省调色板 32H — 允许/禁止显示33H — 允许/禁止灰度求和 34H — 允许/禁止光标模拟35H — 切换活动显示 36H — 允许/禁止屏幕刷新 (19)、功能13H

功能描述:在Teletype模式下显示字符串 入口参数:AH=13H BH=页码

BL=属性(若AL=00H或01H) CX=显示字符串长度 (DH、DL)=坐标(行、列)

ES:BP=显示字符串的地址 AL=显示输出方式

0——字符串中只含显示字符,其显示属性在BL中。显示后,光标位置不变 1——字符串中只含显示字符,其显示属性在BL中。显示后,光标位置改变 2——字符串中含显示字符和显示属性。显示后,光标位置不变 3——字符串中含显示字符和显示属性。显示后,光标位置改变 出口参数:无 (20)、功能1AH

功能描述:读取/设置显示组合编码,仅PS/2有效,在此从略

- 17 -

(21)、功能1BH

功能描述:读取功能/状态信息,仅PS/2有效,在此从略 (22)、功能1CH

功能描述:保存/恢复显示器状态,仅PS/2有效,在此从略

5、键盘服务(Keyboard Service——INT 16H)

00H、10H —从键盘读入字符03H —设置重复率 01H、11H —读取键盘状态04H —设置键盘点击

02H, 12H —读取键盘标志05H —字符及其扫描码进栈 (1)、功能00H和10H

功能描述:从键盘读入字符

入口参数:AH=00H——读键盘

=10H——读扩展键盘,可根据0000:0496H单元的内容判断:扩展键盘是否有效 出口参数:AH=键盘的扫描码 AL=字符的ASCII码 (2)、功能01H和11H 功能描述:读取键盘状态

入口参数:AH=01H——检查普通键盘 =11H——检查扩展键盘

出口参数:ZF=1——无字符输入,否则,AH=键盘的扫描码,AL=ASCII码。 (3)、功能02H和12H 功能描述:读取键盘标志

入口参数:AH=02H——普通键盘的移位标志 =12H——扩展键盘的移位标志

出口参数:AL=键盘标志(02H和12H都有效),其各位之值为1时的含义如下: 位7—INS开状态位3—ALT键按下

位6—CAPS LOCK开状态位2—CTRL键按下 位5—NUM LOCK开状态位1—左SHIFT键按下 位4—SCROLL LOCK开状态位0—右SHIFT键按下

AH=扩展键盘的标志(12H有效),其各位之值为1时的含义如下: 位7—SysReq键按下位3—右ALT键按下

位6—CAPS LOCK键按下位2—右CTRL键按下 位5—NUM LOCK键按下位1—左ALT键按下 位4—SCROLL键按下位0—左CTRL键按下 (4)、功能03H

功能描述:设置重复率

入口参数:AH=03H 对于PC/AT和PS/2:AL=05H BH=重复延迟 BL=重复率

对于PCjr:AL=00H——装入缺省的速率和延迟 =01H——增加初始延迟 =02H——重复频率降低一半

=03H——增加延迟和降低一半重复频率 =04H——关闭键盘重复功能

- 18 -

出口参数:无 (5)、功能04H

功能描述:设置键盘点击

入口参数:AH=04H AL=00H——关闭键盘点击功能 =01H——打开键盘点击功能 出口参数:无 (6)、功能05H

功能描述:字符及其扫描码进栈 入口参数:AH=05H CH=字符的描述码 CL=字符的ASCII码

出口参数:CF=1——操作成功,AL=00H,否则,AL=01H

8、直接系统服务(Direct System Service)

INT 00H —“0”作除数 INT 01H —单步中断

INT 02H —非屏蔽中断(NMI) INT 03H —断点中断 INT 04H —算术溢出错误

INT 05H —打印屏幕和BOUND越界 INT 06H —非法指令错误 INT 07H —处理器扩展无效 INT 08H —时钟中断 INT 09H —键盘输入

INT 0BH —通信口(COM2:) INT 0CH —通信口(COM1:)

INT 0EH —磁盘驱动器输入/输出 INT 11H —读取设备配置

INT 12H —读取常规内存大小(返回值AX为内存容量,以K为单位) INT 18H —ROM BASIC INT 19H —重启动系统

INT 1BH —CTRL+BREAK处理程序 INT 1CH —用户时钟服务

INT 1DH —指向显示器参数表指针 INT 1EH —指向磁盘驱动器参数表指针 INT 1FH —指向图形字符模式表指针

- 19 -

- 20 -

本文来源:https://www.bwwdw.com/article/8qz3.html

Top