微机汇编实验七屏幕字符显示程序
- 格式:doc
- 大小:111.00 KB
- 文档页数:5
实验二LED显示程序设计实验一、实验目的1、初步学习和了解VHDL语言编程方式2、学习和掌握七段数码显示译码器的设计方法3、学习和掌握VHDL的多层设计方法二、实验要求1、根据硬件设计的思维方式,编制LED七段码的显示程序2、要求是一位LED以定位方式显示3、完成LED七段码波形分析的显示功能4、在EDA实验箱上按要求显示三、实验设备1、计算机一台2、EDA——Ⅳ实验箱一台四、实验原理1、七段码是用一种纯组合的逻辑电路,通常是用小型专用的IC门电路组成,数字输入与输出表达均未16进制,处理一般较复杂,而用FPGA/CPLD来实现较为简单。
2、七段码输入与输出的原理与真值表关系。
1.输入:七段码输入为四个输入信号,用来表示为“0000”到“1111”,即表示为十六进制的“0”到“F”。
2.输出:七段码输出为七个输出信号,分别用“A、B、C、D、E、F、G”七个符号来表示。
一般规定,输出信号为“1”时,它所控制的发光二极管为点亮状态,输出信号为“0”时,它所控制的发光二极管为熄灭状。
本实验使用的七段数码管为共阴极组,其电路如图2.1所示。
图2.1 共阴极数码管及其电路3.输入与输关系为四位二进制代码组成十六进制代码,将其代码显示,其对应关系如表2.1所示。
4.显示方式是通过选位的方式进行,是将FPGA/CPLD的三位二进制的信号输出,通过外部三——八译码器硬件电路,选中一路LED信号为输出,故选择一位LED数码管显示,本实验是采取选相应的一个指定位置进行LED显示。
3、输入是通过外部的四个按键操作而组成一位十六进制。
其连接到FPGA/CPLD的对应的引脚上,需进行引脚分配。
4、编写译码程序,生成底层组件,组合成底层文件。
表2-1 七段字符显示真值表五、实验步骤1、 在D 盘建立自己的文件目录2、 在自己的文件目录下,建立项目文件 File \ Project \ 文件名A3、 在自己的文件目录下,建立文本文件 File \ Project \ 文件名B.vhd 。
用七段数码管显示简单字符——译码器及其应用实验报告专业班级:2011级计算机1班学号:1137030 姓名:赵艺湾实验地点:理工楼901 实验时间:2012.9.26实验一用七段数码管显示简单字符——译码器及其应用一、实验目的1、了解显示译码器的结构和理解其工作原理。
2、学习7段数码显示译码器设计。
3、学习用基逻辑门、3-8译码器、4-1选择器控制显示器的显示。
二、实验内容1、了解逻辑门、3-8译码器、4-1选择器的工作原理,设计基本电路,实现以下功能:C2C1C0是译码器的3个输入,用C2C1C0的不同取值来选择在七段数码管上输出不同字符。
七段数码管是共阳极的。
图1 七段译码器C2C1C0 的不同取值对应显示的字母如下:图2 字符编码三、实验仪器及设备: 一、PC 机二、 Quartus Ⅱ 9.0三、 DE2-70 四、显示器四、实验步骤1、列出真值表,计算要实现以上功能时数码管的0-7段对应的逻辑函数式。
真值表如下:函数表达式如下: “0”='02C C +“1”=“2”=0'1'012C C C C C ++“3”=(2C +1C +'0C )(2C +0C +'1C )(2C +'1C +'0C ) “4”=“5”=2C “6”=2C +1C +02C C2、新建一个 quartusII 工程,用以在DE2_70平台上实现所要求的电路。
建立一个BDF 文件,基于SSI ,实现七段译码器电路,用SW3_SW1作为输入C2C1C0,DE2_70平台上的的数码管分别为HEX0~HEX7,输出接HEX1。
参照de2_70_pin_assignments.csv 中的引脚分配表配置引脚。
新建仿真文件,给出输入信号,观察输出信号是否符合要求。
编译工程,完成后下载到FPGA 中。
拨动波段开关并观察七段数码管HEX0的显示,以验证设计的功能是否正确。
一、实验目的1. 熟悉计算机字符显示的基本原理。
2. 掌握字符显示编程的基本方法。
3. 了解字符显示在计算机图形界面设计中的应用。
二、实验原理计算机字符显示是计算机输出设备的基本功能之一。
它通过将字符编码转换为字符图形,并在屏幕上显示出来,实现信息的输出。
字符显示主要包括以下三个步骤:1. 字符编码:将字符转换为计算机可识别的编码,如ASCII码、GB2312等。
2. 字模转换:将字符编码转换为字符图形,即字模。
3. 显示输出:将字符图形输出到屏幕上。
三、实验内容1. 实验环境:Windows操作系统、C++编程环境。
2. 实验步骤:(1)创建一个新的C++项目。
(2)编写字符显示程序,实现以下功能:① 输入字符编码。
② 将字符编码转换为字符图形。
③ 在屏幕上显示字符图形。
3. 实验代码:```cpp#include <iostream>#include <windows.h>using namespace std;// 定义字模数组,存储字符图形unsigned char font[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 空格 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, // 字母A // ... 其他字符的字模数据};// 字符显示函数void DisplayChar(unsigned char ch) {int width = 8; // 字模宽度int height = 16; // 字模高度int i, j;// 创建位图BITMAP bmp;bmp.bmWidth = width;bmp.bmHeight = height;bmp.bmWidthBytes = width;bmp.bmBits = new BYTE[bmp.bmWidthBytes bmp.bmHeight];// 初始化位图for (i = 0; i < bmp.bmHeight; i++) {for (j = 0; j < bmp.bmWidthBytes; j++) {bmp.bmBits[i bmp.bmWidthBytes + j] = 0;}}// 绘制字符图形for (i = 0; i < height; i++) {for (j = 0; j < width; j++) {if (font[(ch - 32) height + i] & (0x80 >> j)) {bmp.bmBits[i bmp.bmWidthBytes + j] = 0xFF;}}}// 创建设备上下文HDC hdc = GetDC(NULL);HDC memDC = CreateCompatibleDC(hdc);// 创建位图句柄HBITMAP hBitmap = CreateCompatibleBitmap(hdc, width, height); SelectObject(memDC, hBitmap);// 绘制位图BitBlt(memDC, 0, 0, width, height, hdc, 0, 0, SRCCOPY);// 清理资源DeleteObject(hBitmap);DeleteDC(memDC);ReleaseDC(NULL, hdc);// 输出字符cout << ch << endl;}int main() {unsigned char ch;cout << "请输入一个字符:";cin >> ch;DisplayChar(ch);return 0;}```4. 运行程序,输入一个字符,观察屏幕上是否显示对应的字符图形。
某某学院微机原理课程设计2013级电气工程及其自动化专业班级题目字符图形显示姓名学号指导教师职称二О一三年12 月13 日摘要 (3)一、字符图形显示的基本原理 (4)二、设计方案 (4)三、硬件设计 (4)四、软件设计 (5)4.1 主模块及子模块说明 (5)五、设计体会 (13)参考文献 (14)摘要本课程设计是通过使用汇编语言来完成的,具体实现的方法可以通过在MASM使用环境下运行,也可以通过在DOS环境下完成。
我做的课程设计是通过编写汇编语言程序,实现字符图形的显示。
在编写初期,我对字符“SPORT”进行了设计,确定了每个字符所在的位置,以便在编写程序的时候正确定义字符的属性,也为在显示的时候能够显示较好的效果,打下了基础。
接着开始编写程序,编写完程序后,对程序进行了注释,最后调试出所要求的字符。
本程序可以在DOS环境和MASM环境下运行,要求我们熟悉BIOS中断10的各种功能。
整个课程设计的过程,是一个不断学习、不断实践的过程,从而提高了我们的编程能力和程序开发思想,也提高了我们自主学习的能力。
关键词:字符显示,10号中断,图形,BIOS一、字符图形显示的基本原理字符图形显示可以在DOS环境下完成,编写完程序后分析并理解每条程序的意思,并解释主要程序的意思,最后调试出所要求的字符。
在程序编写前,我首先对自己显示的图形进行了设计,确定了每个数字相对于前一个数字的位置,以便在编写程序的时候正确定义字符的属性,也为在显示的时候能够显示较好的效果,打下了基础。
本次实验实验的编写环境是MASM,编译、链接也是在该环境下实现的。
程序的运行我使用的是DOS环境。
通过参考网上的一些原程序,要编写好该程序,首先应该对BIOS的中断熟悉,因此程序编写前,我先认真学习了该BIOS中断的有关功能。
二、设计方案在课程设计之前,首先要明确设计的目的。
本次课程设计的题目是字符图形显示,要求我们能够编写一个汇编程序,正确的显示所要求的字符。
课程设计任务书学生姓名专业班级指导教师黄珍工作单位自动化学院课程设计题目七段码显示汇编语言程序设计初始条件:采用16位微处理器8086 CPU以及86系列微型计算机的指令系统;软件设计平台为多功能微型计算机实验软件MFS中的微机原理实验集成环境MF2KP。
要求完成的主要任务:设计汇编语言程序,实现七段码显示效果,具体功能要求如下:(1)数字0~9或A~F中的每个数字、字母用“¦”和“—”字符组成的“七段”码图形表示;(2)运行程序后,要求数字0~9或字母A~F依次循环显示;(3)单击“Q”或“q”键退出程序。
根据功能要求绘制程序流程图、编写完整的汇编语言程序并上机调试:撰写课程设计说明书。
课程设计说明书的撰写格式如下:(1)设计说明书包括封面、任务书(指导老师提供)、正文、参考文献(3~5篇)、附录(程序清单,要求有注释)、成绩评定表(指导老师提供)。
(2)说明书正文包含总体方案论证(算法说明);程序流程图设计及其说明;软件设计关键问题或程序段落的说明;程序调试说明、结果记录及分析;课程设计收获及心得体会。
(3)同一选题若为合作完成,设计说明书中需注明本人承担的设计部分。
(本次课程设计时间:2011年1月10日-21日,历时两周)指导教师签名:年月日系主任(或责任教师)签名:年月日目录1 总体方案论证 (1)1.1 七段数码管显示功能分析 (1)1.2 算法说明 (1)2 程序流程图设计及其说明 (3)2.1 程序流程图 (3)2.2 程序流程图说明 (4)3程序段落的说明 (5)3.1 数据段定义 (5)3.2 程序初始化 (5)3.3 清空显示屏 (5)3.4 重置光标 (6)3.5 数码显示处理工作 (6)3.6 取得计数并为下次循环准备 (6)3.7 一个数字的数码管显示 (6)3.8 显示程序 (7)3.9 程序延时部分 (7)3.10 判断键盘输入部分 (7)3.11 结束DOS以及跳出语句 (8)4 程序调试说明、结果记录及分析 (9)5 课程设计收获及心得体会 (13)参考文献 (14)附录 (15)七段码显示汇编语言程序设计1 总体方案论证1.1 七段数码管显示功能分析双击进入程序,运行显示DOS 界面。
信息工程学院实验报告实验项目名称:显示程序实验实验时间:2016.11.10班级:姓名:学号:一、实验目的1、掌握在PC 机上以十六进制形式显示数据的方法2、掌握部分DOS 功能调用使用方法。
3、熟悉Windows 集成操作软件Tdpit 的操作环境和操作方法。
二、实验设备PC 微机一台、TD-PITD+实验系统一套。
三、实验原理一般来说,有很多程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。
本实验要求将指定数据区的数据以十六进制数形式显示在屏幕上,并利用DOS 功能调用完成一些提示信息的显示。
通过本实验,初步掌握实验系统配套操作软件的使用。
实验中所使用DOS 功能调用(INT 21H)说明如下。
(1)显示单个字符输出入口:AH=02H调用参数:DL=输出字符(2)显示字符串入口:AH=09H调用参数:DS:DX=串地址,’$’为结束字符(3)键盘输入并回显入口:AH=01H返回参数:AL=输出字符(4)返回DOS 系统入口:AH=4CH调用参数:AL=返回码程序流程图如图1-1 所示。
实验参考程序如下。
实验程序清单(例程文件名:A1.ASM)STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDATA SEGMENT USE16MES DB 'Press any key to exit!',0AH,0DH,0AH,0DH,'$' MES1 DB 'Show a as hex:',0AH,0DH,'$'SD DB 'b'DATA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET MES ;显示退出提示MOV AH,09HINT 21HMOV DX,OFFSET MES1 ;显示字符串MOV AH,09HINT 21HMOV SI,OFFSET SDMOV AL,DS:[SI]AND AL,0F0H ;取高4 位SHR AL,4CMP AL,0AH ;是否是A 以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;显示字符MOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FH ;取低4 位图1-1 显示程序实验参考流程图CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;显示字符MOV AH,02HINT 21HKEY: MOV AH,1 ;判断是否有按键按下?INT 16H ;(为观察运行结果,使程序有控制的退出)JZ KEYMOV AX,4C00H ;结束程序退出INT 21HCODE ENDSEND START四、实验内容与步骤(1)运行Tdpit 集成操作软件,进入编辑调试集成环境。
目录一.论文题目 (2)二.技术参数 (2)三.设计步骤 (2)1.数据段 (2)2. 主程序 (2)3. 清屏子程序 (3)4. 显示子程序 (3)五.程序代码 (4)六.程序运行结果 (16)七.设计体会 (17)八.参考文献 (17)九.附录 (17)一.论文题目字符图案显示程序二.技术参数1.通过编程将字符数据直接置入显示存储区,文本方式下屏幕上的字符位置所对应的显示缓冲区的偏移地址为:行号(0~24)×160+列号(0~79)×2。
2.BOIS功能调用:int 10H在本程序中发回了至关重要的作用。
在图形方式下,可以利用BOIS 的int 10h功能对屏幕上的像素进行读写和处理。
例如设置彩色文本方式:mov ah,0 ,mov al,3,int10h;取当前显示方式:mov ah,0fh ,int 10h,;置光标位置:mov ah,2 ,int 10h;显示字符:mov ah,09 ,int 10h等3.DOS系统功能调用(21H)。
从键盘输入字符:mov ah,01h ,int 21h,带返回码终止:mov ah,4ch ,int 21h。
三.设计步骤1.数据段在数据段中设置要显示“科技大学”图案的字符图形表。
图形表主要包括每个字符的ASCII,属性,以及在显示图形中的相对位移量(行、列坐标)四个参数组成。
其中,ASCII决定了用何种字符显示要求图案。
行、列坐标恰当的排列决定了图形的完整性和美观性。
2.主程序在主程序中完成初始化DOS,设置彩色文本方式等功能。
其中清屏子程序、显示子程序。
并且设置了退出的操作,操作者可以按空格退出,回到DOS界面。
3.清屏子程序INT 10H功能6使屏幕内容上卷指定的行,这个功能需要设置7个参数。
AH、BH、CH、CL、DH、DL分别表示了上卷行数、初始化窗口、卷入行属性、左上角行列号和右上角行列号。
在做这项工作前,将寄存器压栈保护寄存器,最后再出栈回复寄存器。
2.1系统生疏试验【试验目的】把握TD 系列微机原理及接口技术教学试验系统的操作,生疏Wmd86 联机集成开发调试软件的调试环境。
【试验设备】PC 机一台,TD-PITE 试验装置一套。
【试验内容】编写试验程序,将00H~0FH 共16 个数写入到内存3000H 开头的连续16 个存储单元中。
【试验步骤】1.运行Wmd86 软件,进入Wmd86 集成开发环境。
2.在设置菜单中选择“汇编语言”和“16 位存放器”。
3.单击文集菜单的建命令,建一个文档,默认文件名为Wmd861。
4.编写试验程序,并保存,此时系统会提示输入的文件名,输完后点击保存。
5.单击编译文件,假设程序编译无误,则科技连续单击进展链接,链接无误前方可以加载程序。
6.连接PC 与试验系统的通讯电缆,翻开试验系统电源。
7.编译、链接都正确并且上下机通讯成功后,就可以下载程序,联机调试了。
可以通过端口列表中的“端口测试”来检查通讯是否正常。
点击下载程序。
为编译、链接、下载组合按钮,通过该按钮可以将编译、链接、下载一次完成。
下载成功后,在输出区的结果窗中会显示“加载成功!”,表示程序已正确下载。
起始运行语句下会有一条绿色的背景。
8.将输出区切换到调试窗口,试验命令D0000:3000 查看内存3000H 起始地址的数据。
9.点击按钮运行程序,等待程序运行停顿后,通过命令来观看程序结果。
10.也可以设置端点,要修改内存中的数据可以使用命令E,如E0000:3000 可以修改地址0000:3000 处的数据,修改完一个后,可按“空格”键连续输入下一个数。
输入完成后按“回车”键退出。
2.2数制转换试验【试验目的】1 把握不同进制数及编码相互转换的程序设计方法,加深对数值转换的理解。
2.生疏程序调试的方法。
【试验设备】PC 机一台,TD-PITE 试验装置一套。
【试验内容】编写程序,将ASCII 码表示的十进制数转换为二进制数。
【试验步骤】1.依据程序流程图编写程序。
集美大学计算机工程学院实验报告课程名称:汇编语言程序设计班级:软件0812实验成绩:指导教师:徐焕姓名:谭驹翔实验项目名称:屏幕窗口程序学号:2008813050上机实践日期:实验项目编号:七组号:上机实践时间:学时一、实验目的与要求题目:屏幕窗口程序实验要求:在屏幕上开出三个窗口,它们的行列坐标(5,10)到(15,30);(5,50)到(15,70)以及(18,15)到(22,65)。
二、实验内容光标首先定位在右窗口最下一行的行首(15,50),如从键盘入字符,则显示在右窗口,同时也显示在下窗口的最下面一行。
若需要将字符显示于左窗口,则先按下←键,接着再从键盘输入字符,字符就会从左窗口的最下行开始显示,同时下窗口也显示出左窗口的内容。
同样再按→也是一样结果。
三、设计和编码scroll macro ulrow,ulcol,lrrow,lrcol,att,function ;设置或上卷窗口(由function决定) MOV bh,0MOV ah,6MOV al,functionMOV ch,ulrowMOV cl,ulcolMOV dh,lrrowMOV dl,lrcolMOV bh,attint 10hendmpos_curse macro x,y ;设置光标在(x,y)位置MOV bh,0MOV ah,2MOV dh,xMOV dl,yint 10hendmdisplay macro ;输出字符=alMOV ah,0eHint 10Hendm;a,b,c,d,e,f 分别保存了下一个字符在左右下三个窗口应显示的位置,也就是下一个字符的光标位置,该宏定义完成获取,判断,输出字符get_char macro a,b,c,d,e,flocal zuo,you,gol,completeagain: ;again是循环获取字符的标号,不是这个宏内部的标号,在下个宏定义末尾跳转到这里MOV ah,0int 16h ;获取字符放在al中cmp ah,01H ;若为esc 则跳转到exit(该标号在主程序的末尾)结束该程序je exitcmp ah,4BHje zuo ;若为左键跳转到zou(设置光标到左窗口相应位置(a,b)),该段程序结束cmp ah,4DHje you ;若为右键跳转到you(设置光标到左窗口相应位置(c,d)),该段程序结束MOV ah,3int 10H ;若以上三个键都不是则读取当前光标所在位置判断该字符应该在哪个窗口输出cmp dl,40 ;判断位于左窗口还是右窗口jl gol ;若为左窗口跳转到golpos_curse c,d ;若为右窗口则设置光标到右窗口相应位置(c,d)显示字符,纵坐标d+1,为下一次在右窗口设置光标准备displayINC dpos_curse e,f ;设置光标到下窗口相应位置(e,f)显示字符,纵坐标f+1,为下一次在下窗口设置光标准备displayINC fpos_curse c,d ;将光标设置回右窗口相应位置(c,d),该段程序结束jmp completegol: ;若判断光标在走窗口则执行以下命令pos_curse a,b ;则设置光标到左窗口相应位置(a,b)显示字符,纵坐标b+1,为下一次在左窗口设置光标准备displayINC bpos_curse e,f ;设置光标到下窗口相应位置(e,f)显示字符,纵坐标f+1,为下一次在下窗口设置光标准备displayINC fpos_curse a,b ;将光标设置回左窗口相应位置(a,b),该段程序结束jmp completezuo:pos_curse a,bjmp completeyou:pos_curse c,dcomplete:endm;a,b,c,d,e,f 分别保存了下一个字符在左右下三个窗口应显示的位置,也就是下一个字符的光标位置,该段代码完成判断三个窗口是否上卷judge macro a,b,c,d,e,flocal cl,cldMOV ah,3int 10H ;读取当前光标位置放入dx 为判断光标位置在左窗口还是右窗口,判断下窗口以及该窗口是否需要上卷push dxcmp f,66 ;若f=66说明下窗口字符已到边界jne clMOV f,15scroll 18,15,22,65,1fh,1 ;上卷下窗口并令f=15(下个字符显示的光标位置:下窗口最左边)pop dxMOV ah,2int 10Hcl: ;同样判断左窗口是否需要上卷cmp b,31jne cldMOV b,10scroll 5,10,15,30,1fh,1 ;上卷左窗口并令b=10(下个字符显示的光标位置:)pos_curse a,bjmp again ;因为左右窗口不可能同时上卷,所以直接跳转到上一个宏定义的开头再一次获取字符cld:cmp d,71 ;上卷右窗口并令d=50(下个字符显示的光标位置:右窗口最左边)jne againMOV d,50scroll 5,50,15,70,1fh,1pos_curse c,d ;将光标设置到右窗口最左边jmp again ;因为左右窗口不可能同时上卷,所以直接跳转到上一个宏定义的开头再一次获取字符endmDATAS SEGMENTlx db 15ly db 10rx db 15ry db 50dwx db 22dwy db 15DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXscroll 0,0,24,79,70h,0 ;function为0 设置三个窗口scroll 5,10,15,30,1fh,0scroll 5,50,15,70,1fh,0scroll 18,15,22,65,1fh,0pos_curse rx,ry ;将光标初始设置在右窗口get_char lx,ly,rx,ry,dwx,dwy ;获取键盘输入判断是否为esc、左右键改变光标位置或在相应的位置输出字符judge lx,ly,rx,ry,dwx,dwy ;判断窗口是否需要上卷循环再两个宏定义之间完成exit:MOV AX,4C00HINT 21HCODES ENDSEND START四、运行结果及分析五、实验小结在上卷的时候光标自动设置到最左侧,因此影响了下一次的输入。
若要在屏幕上打印出字符c,在c语言中需要用输出函数。
在本章程序中,main函数中的语句((void (far *)())(long)a)();用数组a作为函数指针,该函数指针为far型的。
函数指针a所指向的函数是无返回、无参数的。
因此,我们可以数组a中定义该函数的地址。
((void (far *)())(long)a)()指向的是数组a,若想通过定义数组a和该语句在屏幕中间显示字符c,则数组a中该定义显示字符c的相关机器码。
刚开始我想通过语句printf("c");来获得相关的机器码,但是这相关到c中的printf函数,机器码较为复杂,最终没得到正确的结果。
后来我通过编写汇编代码,在屏幕中间打印字符c,经debug来查看其机器码。
汇编代码如下:
assume cs:code
code segment
start:mov al,'c'
mov ah,02
mov si,0b800h
mov es,si
mov es:[12*160+40*2],ax
mov ax,4c00h
int 21h
code ends
end start
经debug查看,得其机器码:
C程序如下:
char a[200]= {0xb0,0x63,0xb4,0x02,0xbe,0x00,0xb8,0x8e,0xc6,0x26,0xa3, 0xd0,0x07,0xb8,0x00,0x4c,0xcd,0x21}
main()
{
((void (far *)())(long)a)(); }
运行结果:。
微机应用课程设计任务书20 12 -20 13 学年第1学期第16 周-16 周注:1、此表一组一表二份,课程设计小组组长一份;任课教师授课时自带一份备查。
2、课程设计结束后与“课程设计小结”、“学生成绩单”一并交院教务存档。
摘要本次课程设计是通过使用汇编语言来完成,具体实现方法可通过在MASM实验环境下运行,也可以通过在DOS环境下完成。
我们这组做的课程设计是通过编写汇编语言程序,实现字符图形的显示,我们此次做的是显示字符——南昌航空大学欢迎你!。
编写完程序后分析并理解每条程序的意思,并解释主要程序的意思,最后调试出所要求的字符。
通过这次课程设计,我们更加了解了汇编语言的应用,并且能够按要求编写出程序,从而提高了我们的汇编语言知识,更进一步地了解了汇编语言。
一、设计题目字符图形的设计——南昌航空大学欢迎你!二、设计内容用多字符图形显示功能显示图形“南昌航空大学欢迎你!”10个字符。
三、小组分工本次课程设计我们选择的课题是字符图形显示,成员共有6人。
李丽波和廖书强共同主持分析课题要求,写出设计规划,并辅助组员完成设计。
具体分工如下:李丽波:负责主程序的编写与调试以及资料分析.廖书强:负责根据汉字取模编出汉字代码程序。
李乐州:负责汉字的取模部分及部分汉字代码程序编写。
林圣阳:负责流程图的设计部分,确定主程序思路。
伍齐羽:负责课题报告的规范与布局及延时子程序设计。
郭苏昊:负责整体程序最终的调试以及显示结果的修整。
四、设计思路1 、设计总体思路本程序是显示由多个字符组成的图形的程序,需要将多个字符定义在一个字符图形表里。
字符图形表包括每个字符的ASCII码、属性以及在显示图形中的相对位移量(相对位移量是指前一个字符和当前要显示的字符之间的行距和列距)4个参数组成。
字符图形表中的第一个字节“252”是组成图形的字符数,编写程序时需要将每个字符的ASCII码和属性以及显示的位置放入相应的寄存器中,然后发出显示命令,当252个字符都显示出来后,我们就可以看到一个“字”的图形。
北京信息科技大学自动化学院实验报告课程名称微型计算机原理与接口技术实验名称显示程序实验与8259应用编程实验实验仪器 TDN86/88教学实验台专业自动化学院班级/学号自控0801/2008010827学生姓名林明泉实验日期实验地点成绩指导教师北京信息科技大学自动化学院(微机原理)实验报告专业:自动化班级:自控0801 学号:2008010827 姓名:林明泉实验名称显示程序实验与8259应用编程实验实验地点实验楼706 实验时间2010年11月1.实验目的:1.了解INT 10H各功能块的作用及用法。
2.掌握字符方式下PC机显示器显示控制。
3.认识8086系统的中断特性。
4.掌握8259中断控制器的工作原理及其使用方法、应用编程。
2.实验设备:TDN86/88教学实验系统一台,计算机一台3.实验原理及内容:一、显示程序实验显示器I/O功能调用使用说明INT 10入口:AH=00H,AL=01H 功能:清屏入口:AH=01H,AL=数据功能:写AL中的数据到屏幕上入口:AH=06H,DS:BX=字串首地址,且字符串结尾用00H填充功能:显示已字符串直到遇到00H为止。
1、在显示器上显示A-Z 26个英文字母;程序:STACK1 SEGMENT STACKDW 64 (?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK1 START:MOV CX,001AHMOV BL,41HMOV AH,01HA1:MOV AL,BLINT 10HINC BLPUSH CXMOV CX,0FFFFHA2:LOOP A2POP CXLOOP A1INT 03HCODE ENDS END START2、在显示器上显示‘GOOD AFTERNOON’。
要求分别用AH=01H,AH=06H来完成。
a、STACK1 SEGMENT STACKDW 64 (?)STACK1 ENDSDA TA SEGMENTXIAN DB 'GOOD AFTERNOON',00HDA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK1 START:MOV CX,14MOV AX,DATAMOV DS,AXMOV BX,OFFSET XIANMOV AH,01HA1:MOV AL,[BX]INT 10HINC BXPUSH CXMOV CX,0FFFFHA2:LOOP A2POP CXLOOP A1INT 03HCODE ENDSEND STARTb、STACK1 SEGMENT STACKDW 64 (?)STACK1 ENDSDATA SEGMENTXIAN DB 'GOOD AFTERNOON',00HDA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK1 START:MOV AX,DATAMOV DS,AXMOV BX,OFFSET XIANMOV AH,06HINT 10HINT 03HCODE ENDSEND START二、中断特性以及8259应用编程实验系统中的8259芯片寄存器组编址为20H和21H。
一、实验目的1. 了解字符显示微机的基本原理和结构;2. 掌握字符显示微机的编程方法;3. 学会使用字符显示微机进行简单的数据处理和显示。
二、实验原理字符显示微机是一种基于微处理器的字符显示设备,它可以用于显示文本、图形等信息。
字符显示微机主要由以下几个部分组成:1. 微处理器:字符显示微机的核心部分,负责控制和协调各个模块的工作;2. 存储器:包括只读存储器(ROM)和随机存储器(RAM),用于存储程序和数据;3. 输入设备:如键盘、鼠标等,用于输入数据和指令;4. 输出设备:如显示器、打印机等,用于输出结果和显示信息;5. 接口电路:用于连接各个模块,实现数据传输和通信。
字符显示微机的基本工作原理是:微处理器根据程序指令,从存储器中读取数据,进行计算和逻辑判断,然后将结果输出到显示器上显示。
三、实验仪器与设备1. 字符显示微机一台;2. 键盘一个;3. 显示器一个;4. 电源一个。
四、实验步骤1. 启动字符显示微机,进入操作系统界面;2. 编写程序,实现以下功能:(1)定义一个字符数组,用于存储要显示的文本;(2)使用循环语句,逐个字符地在显示器上显示数组中的内容;(3)使用条件语句,实现显示内容的换行;(4)使用延时函数,实现显示内容的暂停效果;3. 编译程序,生成可执行文件;4. 运行程序,观察显示效果。
五、实验结果与分析1. 编写程序:```c#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main() {char text[] = "Hello, world!";int i = 0;while (text[i] != '\0') {printf("%c", text[i]);i++;usleep(200000); // 延时200毫秒}printf("\n");return 0;}```2. 编译程序,生成可执行文件:`gcc -o display_text display_text.c`3. 运行程序,观察显示效果:在显示器上,程序将逐个字符地显示文本“Hello, world!”,每个字符之间有200毫秒的暂停效果。
汇编语言实验报告实验七实验七一.实验目的1.体验并了解DOS界面下色彩显示2.了解并掌握INT10功能BIOS调用显示屏幕控制二.实验原理及要求将实验代码键入计算机中在屏幕中间建立一个20列宽和9高的窗口,然后把键入的内容在这窗口显示出来。
键入的字符将被显示在窗口的最后一行,每当输入20个字符,该行就向上卷动,9行字符键入完成后,顶端行的内容丢失。
观察并记录实验现象,然后更改实验代码将显示字符背景改为蓝色,字符颜色改为红色,并使其闪烁。
三.实验代码原代码:Codes segmentAssume cs:codesMov ah,6;屏幕初始化功能号Mov al,0;全屏幕为空白Mov ch,0 ;左上角行号Mov cl,0 ;右上角列号Mov dh,24 ;右下角行号Mov dl,79 ;右下角列号mov bh,0111b ;卷入行属性Int 10hPoscurse:Mov ah,2 ;置光标位置功能号Mov dh,16 ;行Mov dl,30 ;列Mov bh,0 ;页号Int 10hMov cx,20Getchar:Mov ah,1Int 21hCmp al,'Q'Jz exitLoop getcharMov ah,6 ;屏幕初始化功能号Mov al,1 ;上卷行数Mov ch,8 ;左上角行号Mov cl,30 ;左上角列号Mov dh,16Mov dl,50Mov bh,0111bint 10hJmp poscurseExit:Mov ah,4chInt 21hCodes endsEnd更改后代码:Codes segmentAssume cs:codesMov ah,6 ;屏幕初始化功能号Mov al,0 ;全屏幕为空白Mov ch,0 ;左上角行号Mov cl,0 ;右上角列号Mov dh,24 ;右下角行号Mov dl,79 ;右下角列号Int 10hPoscurse:Mov ah,2 ;置光标位置功能号Mov dh,16 ;行Mov dl,30 ;列Mov bh,0 ;页号Int 10hMov ah,6 ;屏幕初始化功能号Mov al,1 ;上卷行数Mov ch,8 ;左上角行号Mov cl,30 ;左上角列号Mov dh,16Mov dl,50Mov bh,10010100bint 10hMov cx,20Getchar:Mov ah,1Int 21hCmp al,'Q'Jz exitLoop getcharJmp poscurseExit:Mov ah,4chInt 21hCodes endsEnd四.实验过程1.打开DOS操作界面;2.将代码输入到edit环境中并在e:盘中MASM文件夹下保存为1.asm文件;3.在MASM文件夹下用MASM程序编译文件1.asm并在该文件夹中保存为1.obj文件;4.在MASM文件夹下用LINK程序链接文件1.obj并正在该文件夹下保存为1.exe可执行程序;5.在DOS操作界面下输入1.exe观察程序运行结果,并记录。
实验七字符和数据的显示程序1要求:显示信息“输入字符串,回车或空格结束”,回车或空格后显示输入字符串总字节数,数字字符(1--9)及非数字字符数。
2目的:掌握字符和数据的显示方法实验程序CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDATA SEGMENTMESS1 DB'please input the string,press enter or space end$' MESS2 DB'the total of word= $'MESS3 DB'the total of word except number= $'MESS4 DB'the total of number word= $'TOTAL DW?DATA ENDSSTACK SEGMENTSTA DW 32 DUP (?)TOP DW?STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV SP,TOP ;初始化MOV BX,0000H ;计数值清0MOV AH,09HMOV DX,OFFSET MESS1INT 21HCRLFXXX: MOV AH,01HINT 21H ;接收键入字符CMP AL,20HJZ UUU ;是空格键则转UUUCMP AL,0DHJNZ IIICRLF ;是回车键则转UUU JMP UUUIII: CMP AL,30HJB YYYCMP AL,39HJBE VVV ;`0-9`转VVV YYY: INC BX ;计数值加1 VVV: INC TOTALJMP XXXUUU: CRLFMOV AH,09HLEA DX,MESS2 ;显示字符总数 INT 21HMOV AX,TOTALCALL DISPMOV AH,02HMOV DL,'H'INT 21HCRLF ;回车换行MOV AH,09HMOV DX,OFFSET MESS3INT 21H ;显示非数字字符总数MOV AX,BXCALL DISPMOV AH,02HMOV DL,'H'INT 21H ;十六进制数标志CRLFMOV AH,09HLEA DX,MESS4 ;显示数字字符总数INT 21HMOV AX,BXSUB TOTAL,AXMOV AX,TOTALCALL DISPMOV AH,02HMOV DL,'H'INT 21HMOV AX,4C00HINT 21HDISPP PROC NEAR ;显示子程序,显示AL中的数按十六进制数方式MOV BL,AL ;AL中数送BLKKK: MOV DL,BLMOV CL,04ROL DL,CLAND DL,0FHCALL DISPL ;显示字节高位MOV DL,BLAND DL,0FHCALL DISPL ;显示字节低位RETDISPP ENDPDISPL PROC NEARADD DL,30H ;由数值转为参应字符的ASCII码CMP DL,3AHJB DDD ;是0-9转DDDADD DL,27H ;是A-FDDD: MOV AH,02HINT 21H ;显示DL中字符RET ;返回DISPL ENDP ;显示子程序,显示AX中的数按十六进制数方式DISP PROC NEARPUSH BXPUSH CXPUSH DXPUSH AX ;入栈保存MOV AL,AHCALL DISPP ;显示高字节POP AXCALL DISPPPOP DXPOP CXPOP BXRET ;出栈DISP ENDPCODE ENDSEND STARTX。
实验时间:2014年6月4日实验成绩评定:
姓名:黄涛学号:2012311419
实验七屏幕字符显示程序
实验目的:
通过实验掌握下列知识:
1、8086/8088指令: JMP,CMP,LEA,CMPBS。
2、利用DOS功能调用INT21H的2号、8号、9号和0A号功能进行屏幕显示的方法。
3、IBM-PC机的ASCII码表及控制字符。
实验内容及步骤:
一、利用INT 21H 2号功能显示字符:
1、用A命令在100H处键入下列程序:
XOR DL,DL
MOV CX,100
LOP:MOV AH,2
INT 21
INC DL
PUSH CX
MOV CX,8
DELY: PUSH CX
MOV CX,0
J: LOOP J
POP CX
LOOP DELY
POP CX
LOOP LOP
INT 20
2、用G命令运行程序,即在屏幕上依次缓慢的显示256个ASCII字符。
仔细观察每个字符,和IBM-PC ASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同?
3、按CTRL+BREAK退出此程序,若一次不行可多做几次。
二、自编一个程序, 在显示器上显示“How are you ?”,然后读一个字符,但不显示此字符,若读入字符是‘y’,则显示‘ok’。
解:程序如下:
DSEG SEGMENT
DAT1 DB 'HOW ARE YOU?',0DH,0AH,'$'
DAT2 DB 'OK',0DH,0AH,'$'
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG
MOV DS,AX
MOV DX,OFFSET DAT1
MOV AH,9
INT 21H
MOV AH,8
INT 21H
CMP AL,'Y'
JNE NEXT
LEA DX,DAT2
MOV AH,9
INT 21H
NEXT: MOV AH,4CH
INT 21H
CSEG ENDS
END START
程序编译:
程序运行:
1.输入“Y”:
2.输入其他字符:
三、自编一个程序, 屏幕显示“PASS WORD ?”,随后从键盘读入字符串,并比较这个字符串与内部设定的字符串,若两者相同,则显示“ok”,否则不作任何显示。
程序代码:
DSEG SEGMENT
PASS1 DB '1234'
N EQU $-PASS1
DT1 DB 'pass word',0DH,0AH,'$'
PASS2 DB 20
DB ?
DB 20 DUP(?)
DT2 DB 'OK $'
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,ES:DSEG
START:MOV AX,DSEG
MOV DS,AX
MOV ES,AX
LEA DX,DT1
MOV AH,9
INT 21H
LEA DX,PASS2
MOV AH,0AH
INT 21H
LEA SI,PASS1
LEA DI,PASS2
CMP BYTE PTR[DI+1],N
JNE LAST
MOV CX,N
LEA DI,PASS2+2
CLD
REPZ CMPSB
JNZ LAST
DISOK:LEA DX,DT2
MOV AH,9
INT 21H
LAST: MOV AH,4CH
INT 21H
CSEG ENDS
END START
程序编译:程序运行:。