版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、题目一:动画程序设计 本题目重点考查 bios 中断调用中显示器控制的子程序调用。主要包括:显示器显示 方式设置,背景颜色和前景颜色设置及写像素点等。 设计要求: 1)以滚动方式输出小车动态行驶图形。 2)小车在公路上动态行驶,从屏幕左侧驶向屏幕右侧。在到达屏幕右侧后,公路 下降一段距离并改变颜色,然后小车继续由左向右行驶。 3)当下降到屏幕底部时,再返回到屏幕顶部重复上述过程。 4)直到有键按下,程序运行结束。 题目二:音乐程序设计 通过该题目的设计过程掌握 pc 及内部接口电路 8255、8253 的应用方法、bios 中断 调用。以及 8253。8255 芯片的初始化编程和音乐程序的设计
2、方法。 设计要求: 1)利用系统内部的发声电路,产生音频声音。 2)选择一首歌曲,对其进行编程。 3)运行程序后能够反复演奏这首歌曲。 题目三:电子时钟程序设计 通过该题目的设计过程,熟悉和掌握主机内的 82538254-2 的计数器的应用,掌握 汇编语言编程,时、分、秒在屏幕上显示的方法。熟悉和掌握主机内中断控制器 8259a 的使用方法。熟悉借用原有电路,重新设置定时器、编写中断服务程序的方法。 设计要求: 1)利用 pc 系列微机现有的硬件和软件资源编写时钟程序,在 crt 屏幕上显示 xx(时):xx(分):xx(秒),并且每秒钟更新一次显示。 2)程序从按下任意键开始显示数据区中存放
3、的时间值。 3)运行中按下空格键则停止运行返回 dos。 题目四:画图程序设计 通过该题目的设计过程,熟悉和掌握通过 bios int 10h 调用,将屏幕的工作方式设 置为图形方式。确定好坐标,用写像素子程序画出线段,实现绘图。 设计要求: 1)利用汇编语言在图形形式下的编程方法设计一个图形。 2)通过 crt 显示一个图形,图形不能过于简单。 题目五:简单计算器程序设计 通过该题目的设计过程,熟悉和掌握 bios 调用,利中 int 16h 调用完成清屏、设置 显示方式、设置窗口等操作。掌握 int 21h dos 系统功能调用,从键盘输入接收十进制 操作数和运算符,由程序完成字符到二进制
4、数的转换,并存储。掌握根据运算符完成运 算,由程序在屏幕上显示运算结果等方法。 设计要求 1) 设计一个简单的计算器程序。 2)在屏幕上显示一个小窗口,将光标定位在窗口内。 3)通过运行程序,在窗口内输入一个表达式(单项运算)。 4)根据表达式计算运算结果,并在表达式的后面显示一个“=”和运算结果。 题目六:歌手大奖赛计分程序设计 通过该题目的设计过程,熟练掌握汇编语言程序设计与调试方法。熟练掌握 ascii 码转换成 bcd 码及码制转换程序设计方法。熟练掌握数值运算的程序时间和调试方法。 熟练掌握 dos 功能调用 设计要求: 1)根据歌手大奖赛的要求,设计一个计算平均分的程序。 2)每位
5、歌手的分数通过键盘输入。 3)评委人数共 10 人,去掉最高分和最低分后,求平均值。 4)屏幕显示每位评委的打分和最后得分。 题目七:字符串动画显示程序设计 通过该题目的设计过程,学习字符串的动画显示,左移位、右移位显示的编程方法。 熟练掌握宏指令的使用方法,熟练掌握汇编语言程序设计与调试方法。 设计要求: 1)动态的显示一个字符串应用程序的标题栏。 2)采用左、右移位的显示方法,动态的显示一个字符串。 动画程序设计动画程序设计 一、设计要求:一、设计要求: 1. 以滚动方式输出小车动态行驶图形。 2. 小车在公路上动态行驶,从屏幕左侧驶向屏幕右侧。在到达屏幕右侧后,公路下降一 段距离并改变颜
6、色,然后小车继续由左向右行驶。 3. 当下降到屏幕底部时,再返回到屏幕顶部重复上述过程。 4. 直到有键按下,程序运行结束。 二、设计思路:二、设计思路: 本题目重点考查 bios 中断调用中显示器控制的子程序调用。主要包括: 1. 显示器显示方式设置。 2. 背景颜色和前景颜色设置。 3. 写像素点等。 三、参考程序三、参考程序 data segment line dw 10 ;定义行变量 color db 0 ;定义公路颜色 colorl db 0 ;定义 小车颜色 corlun dw 2 ;定义列变量 countl dw 0 count2 dw 0 count3 dw 0 car-8 d
7、b 00000011b,11100000b ; 车体模型 db 00000010b,01010000b db 00000110b,01011000b db 01111111b,11111110b db 11111111b,11111111b db 11111011b,11101lllb db 00001010b,00101000b db 00000100b,00010000b data ends code segment assume cs:code,ds:data start:mov ax,data mov ds,ax mov dx,80 mov ah,0fh int 01h ll:mov
8、al,color ; 设置公路颜色 inc al cmp al,3 jbe tt sub al,3 tt:mov color,al ; 设置小车颜色 cmp al,l jz tt3 inc al cmp al,3 jz tt2 tt3:inc al tt2:mov colorl,al mov ax,line ;计算机行坐标 add ax,10 cmp ax,180 jbe ttl sub ax,180 ttl:mov line,ak ; 设置显示方式(320x200) mov ax,0004h int 10h mov ah,0bh mov bh,1 ;选择 1 号调色板 mov bl,0 in
9、t 10h mov ah,0ch ; 写像素 mov dx,line add dx,8 ;计算公路坐标 mov cx,0 mov al,color ;设置公路颜色 repet:mov bx,3 push ax int 10h ; 画公路 pop ax inc cx cmp cx,319 jnz repet ;未到屏幕最右转 mov ah,0ch add dx,line ;设置行坐标 mov cx,corlum ; 设置列坐标 mov si,offset car-8 ;取车模首地址 mov countl,8 ; 8 行 retry1:mov count2,2 ;每行 2 字节 retry2:mo
10、v count3,8 ; 每字节 8 位 retry3:rol byte ptrsi,1 mov al,0 ;此位为 0,置背景颜色 jnc next mov al,color1 ;此位为 1,置背景颜色 next:push ax push cx int 10h ;画个点 pop cx pop ax inc cx ; 列加 1 dec count3 jnz rktry3 ;未画完 8 个点转 inc si ;取下一个字节的车模信息 dec count2 ; jnz retry2 ;车模信息未完转 inc dx mov cx,corlum dec countl jnz retry1 ;未画完 8
11、 行转 mov count1,320+10 ;设置移动总次数 mov cx,corlum add cx,15 ;取小车最右点的列坐标送 cx repetl:push cx mov count2,16 土 1 ;小车横向有 16 个点,外加 1 个空白点 repet2:mov dx,line mov count3,8 ;车模向右移动 1 个像素位 repet3:mov ah,0dh int 10h ;读当前点 mov ah,0ch push cx inc cx int 10h ;写当前右边的点 pop cx inc dx ;行坐标加 1 dec count3 jnz repet3 ;车模向右移动
12、 1 个像素位未完转 dec cx ;修改列坐标 dec count2 jnz repet2 ;小车移动 1 个车体位未完转 pop cx inc cx ;修改列坐标 mov ah,1 int 16h jnz exit ;有键按下,转退出 dec countl jnz repetl jmp ll ;无键按下,继续执行 exit: mov ah,0 ;恢复文本显示方式 mov al,2 int 10h mov ah,4ch int 21h code ends end start 四、课题设计要求: 1.读懂题目的设计思路,编程方法。 2.画出设计题目的程序框图。 3.根据课题的要求重新编写程序并
13、调试通过 4. 写出设计报告,打印程序清单,并加以注释释。 音乐程序设计音乐程序设计 一、设计要求:一、设计要求: 1. 利用系统内部的发声电路,产生声音。 2. 选择一首歌曲,对其进行编程。 3. 运行程序后能够反复演奏这首歌曲。 二、二、pc 机发声系统机发声系统 1.发声系统: pc 机发声系统电路结构如图 3-1 所示。 8253/8254 2 号计数器,口地址=42h f=1.193182mhz 8255 b 口 口地址=61h 图 3-1 pc 机发声系统电路框图 上图给出了 pc 机的发声系统,其核心部件为系统定时器的 2 号计数器。系统初始化 时,2 号计数器的工作方式为”方波
14、发声器” ,计数初值(533h)为二进制数,初值的写 入顺序为先低 8 位,后高 8 位。用户在使用系统资源时,没有必要对 2 号计数器重新设 定工作方式,只需要改变计数初值,就可以得到不同频率的方波输出。clk2 的输入频率 为 1.193182 兆赫,门控信号 gate2,以及扬声器输入受系统 8255 芯片的 pb0、pb1 端 控制。显然,执行一下的 open 子程序可以接通扬声器,执行 close 子程序可以关闭扬 声器。 openproc;接通扬声器子程序 pushax inal,61h oral,00000011b;pb0、pb1=11b out61h,al popax ret
15、pb0 pb1 clk2 gate2 out2 滤波、驱动 openendp closeproc;关闭扬声器子程序 pushax inal,61h andal,11111100b;pb0、pb1=00b out61h,al popax ret closeendp 2. 演奏单音符 每一种曲调中,各个音符均有不同的频率。对 2 号计数器,只有设置不同的计数初 值,即可输出不同的频率,从而发出不同的音调。计数初值的计算公式如下: 计数初值=1.193182 兆赫/输出频率 1.193182 兆赫转换成 16 进制数应为 1234deh。因此在接通扬声器的前提下,执行下 列程序段即可发出与输出频率对
16、应的音调。 movdx,0012h movax,34deh movcx,频率值 divcx out42h,al moval,ah out42h,al 如何控制每一个音调的演奏时间呢?在 at 机上最简便的方法是调用 int 15h 的 86h 号子程序: movah,86h movcx,timeh movdx,timel int15h 其中,timeh、timel 为延时时间的高、低 16 位二进制数,单位微秒。 三、音乐程序设计思路:三、音乐程序设计思路: 1. 首先在数据段设计频率表和时间表。将音符对应的频率值依次写入频率表中。各 音符的演唱时间依次写入时间表。频率和时间表的表项要一一对应
17、,不能错位。频率表 最后一项为 0 值,做为重复演唱的标志。 2. 时间表的内容有两种设置方法。 时间表中设置每一音符演唱的绝对时间。这种方法程序直观,但是开发速度慢, 程序调试比较困难,特别是一首不熟悉的歌曲,对那些缺少音乐细胞的人来说,很难把 握演唱的节奏,初期很难确定每个音符的演唱时间,因此调试十分困难。 时间表中设置每个音符演唱的”单位时间” 单位时间n=演唱时间 友友 谊谊 地地 久久 天天 长长 1=f 2/4 苏格兰民歌 5 11 1 3 21 2 3 11 3 5 6 66 1. 怎 能 忘 记 旧 日 朋 友,心 中 能 不 怀 想, 旧 2. 我 们 曾 经 终 日 游 荡
18、,在 故乡的 青 山 上, 我 5 3 3 1 21 2 3 16 6 5 1 6 53 3 1 日 朋 友 岂 能 相 忘,友 谊 地 久 天 长; 友 谊 万 门 也 曾 历 尽 苦 辛,到 处 奔 波 流 浪; 21 2 6 53 3 5 6 1 53 3 1 21 2 3 岁, 友 谊 万 岁!举 杯 痛 饮,同 声 歌 颂 友 16 6 5 1 : 谊地 久 天 长。 四、音符频率表四、音符频率表(单位:赫兹) 音符 音调 1 2 3 4 5 6 7 a b c d e f g 221 248 131 147 165 175 196 248 278 147 165 185 196 2
19、21 278 312 165 185 208 221 248 249 330 175 196 221 234 262 330 371 196 221 248 262 294 371 416 221 248 278 294 330 416 467 248 278 312 330 371 音符 音调 1234567 a b c d e f g 441 495 262 294 330 350 393 495 556 294 330 371 393 441 556 624 330 371 416 441 495 589 661 350 393 441 467 525 661 742 393 441 4
20、95 525 589 742 833 441 495 556 589 661 833 935 495 556 624 661 742 音符 音调 1 2 3 4 5 6 7 a b c 882 990 525 990 1112 589 1112 1248 661 1178 1322 700 1322 1484 786 1484 1665 882 1665 1869 990 d e f g 589 661 700 786 661 742 786 882 742 833 882 990 786 882 935 1049 882 990 1049 1178 990 1112 1178 1322 11
21、12 1248 1322 1484 其中,n 为调试参数,用 equ 伪指令定义,初值先行估算,调试时再修改。 如何确定音符演唱的单位时间呢? 我们知道,音符的演唱时间分为:一拍,半拍,四分之一拍,八分之一拍等。假定 一拍的单位时间为 8,那么半拍的单位时间即为 4,四分之一时间的单位时间为 2。 如果时间表中设置单位时间,只需对程序稍加修改,就可以使每一遍演唱的速度 不同,极有趣味性。 此外,对于连续演唱的相同音符,其频率值可做适当修改,以达到最佳效果。 本程序的时间表,设置音符演唱的单位时间。 五、程序清单:五、程序清单: ;filename:musicasm data segment t
22、abf dw -,262,350,352,350,441,393,350,393,441 dw 350,352,441,525,589,588,594,525,441 dw440,350,393,350,393,441,350,294,293,262 dw 350,589,525,441,440,350,393,350,393,589 dw525,441,440,525,589,700,525,441,440,350 dw393,350,393,441,350,294,292,262,350,0 tablt db4,4,6,2,4,4,6,2,4,4 db6,2,4,4,12,1,3,6,2
23、db4,4,6,2,4,4,6,2,4,4 db12,4,6,2,4,4,6,2,4,4 db6,2,4,4,12,4,6,2,4,4 db6,2,4,4,6,2,4,4,16 n1equ1000 n2equ150 dataends codesegment assume cs:code,ds:data beg: movas,data mov ds,ax open: inal,61h oral,00000011b out61h,al ;接通扬声器 aga:movsi,offset tabf movdi,offset tabt last: cmpword ptr si,0 ;唱完一遍? jeaga
24、 ;是 movdx,12h movax,34deh divword ptr si ;频率转换成计数初值 out 42h,al ;低 8 位送 2 号计数器 moval,ah out 42h,al ;高 8 位送 2 号计数器 addsi,2 calldelay ;延时 mov ah,1 int16h ;有否键入 jzlast ;否 close:inal,61h and al,11111100b out61h,al ;关闭扬声器 movah,4ch int21h ; delay proc ;延时程序 movax,n1 movdh,0 movdl,di muldx ;ax=单位时间n1 movdx
25、,n2 muldx ;dx、ax=演唱时间(微秒) movcx,dx movah,86h int15h adddi,1 ret delay endp codeends endbeg 电子时钟时钟程序设计 一、设计要求:一、设计要求: 1.利用 pc 系列微机现有的硬件和软件资源编写时钟程序,在 crt 屏幕上显示 xx(时):xx(分):xx(秒),并且每秒钟更新一次显示。 2.程序从按下任意键开始显示数据区中存放的时间值。 3.运行中按下空格键则停止运行返回 dos。 二、设计思路:二、设计思路: 利用主机内的 82538254-2 的计数器 0 产生 10ms 对称方波输出,该输出送至 i
26、rq0 使 8259a 每 10ms 产生一次中断,100 次中断后秒量+1,然后调整时、分、秒并显示在屏 幕上。 1ibmpcxt 系统板上使用了一片 8253-5,其地址 4043h,其中 0 通道工作于 方式 3,每 55ms 向中断控制器 8259a 的 irq。端发一次中断请求。此定时中断的用途之 一系统报时。现在借用原有电路,重新设置定时器、编写中断服务程序来做硬件时钟实 验,为此程序开始应首先保护原系统的 08h 中断的中断矢量(中断服务程序入口地址), 以便程序退出时恢复原系统的设置。保护原系统 08h 中断矢量可用 dos 35h 功能调用读 出加以适当保存,也可以用以下指令
27、,将中断矢量压入堆栈保存。 cli ;关中断 cld ;df0 mov ax,0000h mov ds,ax ; ds:si 指向 08h 中断矢量在中断矢量表中的位置 mov si,0020h lodsw mov bx,ax ;bx原中断服务程序入口偏移地址 lodsw ;ax原中断服务程序入口的段地址 push ax ;压栈保护 push bx 2将现中断服务程序入口地址填入中断矢量表中除了可用 dos 25h 功能调用外也 可使用以下指令。 mov ax,0000h mov es,ax movdi,0020h ;es:di 指向 08h 中断矢量在中断矢量表中的存放位置。 movax,o
28、ffset timer stosw ;写入中断服务程序的偏移地址 mov ax,seg timer stosw ;写入中断服务程序的段地址 3. 借用系统用的 08h 中断还应注意保护原 8259a 的中断屏蔽寄存器内容。读或写 8259a 的奇地址可以得到和改写 imr 寄存器的内容。执行 inal,21h push ax 两条指令可以得到 imr 的值并压入堆栈保护。执行 mov al,0fch out 21h,al 两条指令又可以重写 1mr,使之只开放时钟和键盘的中断。 在程序退出前又应恢复原 imr 值。用 pop ax out 21h,al 指令可以将原压入堆栈保护的 imr 值重
29、新写入中断屏蔽寄存器。 4中断服务程序的编写 中断服务程序主要完成秒、分、时的调整并重写入数据区中。中断服务程序中所用 寄存器如与主程序有冲突,应该在中断服务程序一开始用压栈指令保护主程序中寄存器 内容,中断返回前用出栈指令恢复其内容。注意,先压入的寄存器应该后弹出。最后在 中断返回前还应向 8259a 发中断结束命令,使 8259a 内的在服务寄存器中的相应位(bit) 复位; mov al,20h out 20h,al 5有关字符输入的 dos 功能调用。 (1) 等待键盘输入并显示(dos 1 号功能调用) 调用格式:mov ah,01h int 21h 功能:计算机等待键盘输入一个字符
30、,若有字符输入,则送屏幕显示。在等待期间, 检查”ctrl+break 或 ctrl 十 c 键。若是,皿终止键盘等待,退出本调用。 入口:无 出口:al 是键盘输入的字符的 ascii 码。 (2) 等待键盘输入但不显示(dos 7 号功能调用) 调用格式:mov ah,07h int 21h 功能:等待标准输入设备输入一个字符,但不送屏幕显示。本调用不检查 ctrl+break 和 ctrl+c 键。 入口;无 出口:al 是输入字符的 ascii 码。 (3) dos 8 号功能调用 本调用与 07h 调用类同,只是检查 ctrl+break 和 ctrl 十 c 键。 (4) 直接控制
31、台输入输出(dos 6 号功能调用) 调用格式:mov dl,x mov ah,06h int 21h 功能;从控制台(或键盘)输入或向屏幕输出字符。本调用可输入输出定向。 输入方式(xffh(255) 当 x 取 ffh 时,读键盘,但不等待键盘操作。调用后若零标志 zf=0,则 al 是键入 的字符的 asch 码。若 zf=1,则无键盘输入,且 al 被置 0。 输出方式(xffh) 当 x 取非 ffh 时,输出字符,其中 dl 是要输出字符的 asc码。 注释:本调用不理睬 ctrl+break 或 ctrl+c 键。 在程序运行过程中,检测是否按下空格键,按下空格键则停止运行返回
32、dos,不按 空格键则继续显示时间,可以采用 6 号调用的输入方式来实现: mov dl,0ffh mov ah,06h int 21h jzdisp ;无键按下转显示 disp cmp al,20h ;有键按下,是空格键吗? jz exit ;是空格键,退出 disp:mov dx,offsettenh ;不是,显示时间 mov ah,09h int 21h 三、参考程序三、参考程序: ;pcclkasm 8253 10ms interrupt page 60,78 stack segment para stack “stack” db 256dup(0) stack ends data s
33、egment para public “data” count db 100 tenh db “2” hour db”3” tenm db”5” minute db”9” db “:” tens db”5” second db”0” ,0dh, ”$” data ends code segment para public”code” start proc far assume cs:code push ds mov ax,0 push ax mov ah,01h ;等待键按下,al=字符的 asch 码 int 21h cli cld mov ax,0000h mov ds,ax mov si
34、,0020h ;ds:si 指向 08h 中断向量 lodsw ;取 08 中断入口的偏移地址 mov bx,ax lodsw ;取 08 中断入口段地址 push ax ;压栈保护 push bx mov ax,data ;建立数据段的可寻址性 mov ds,ax assume ds:data mov ax,0000h mov es,ax mov di,0020h ;es:ds 指向 08 中断向量存放地址 mov ax,offset timer stosw ;写入偏移地址 mov ax,cs stosw ;写入段地址 mov al,00110110b;8253 初始化,0 通道,3 方式,
35、hex out 43h,al mov ax,11932 ;初值:11932 out 40h,al mov al,ah out 40h,al in al,2lh ;读 8259 的中段屏蔽寄存器 imr push ax ;压栈保护 mov al,0fch out 21h,al ;写 imr,只允许定时器和键盘中断 sti forever: mov dl,0ffh ;有键按下吗? mov ah,06h int 21h jz disp ;无键按下则转显示 disp cmp al,20h ;是空格键吗? jz exit ;是则退出 disp: mov dx,offsettenh ;不是则显示时间 mo
36、v ah,09h int 21h mov al,second ;取秒单元值 waitcha:cmp al,second ;改变否? jz waitcha ;没变则等待, jmp forever ;变则转 forever exit: cli ;有空格键按下退出 cld pop ax out 21h,al ;恢复 imr mov al,36h ;8253 初始化,55ms out 43h,al mov al,0 out 40h,al out 40h,al mov ax,0 ;恢复 08h 中断中断向量 mov es,ax mov di,48 pop ax stosw pop ax stosw st
37、i ret timer proc far push ax dec count jnz l2 ;不到 1 秒 l2 mov count,100 ;到 1 秒,重置 count,并修改时间 inc second cmp second, ”9” jle timext mov second, ”0” inc tens cmp tens, ”6” jl timext mov tens, ”0” inc minute cmp minute, ”9” jle timext mov minute”0” inc tenm cmp tenm, ”6” jl timext mov tenm, ”0” jmp l3
38、l2: jmp timext l3: mov al,hour and al,0fh mov ah,tenh and ah,0fh mov cl,4 rol ah,cl or al,ah add al,1 daa cmp al,24 jl l1 mov tenh, ,0, mov hour, ,0, jmp timext l1:mov ah,al and al,0fh or al,30h mov hour,al mov cl,4 ror ah,cl and ah,0fh or ah,30h mov tenh,ah timext:mov al,20h out 20h,al ;发中断结束命令 pop
39、 ax iret timer endp start endp code ends end start 四、题目设计要求同前(略) 画图程序设计画图程序设计 一、设计要求:一、设计要求: 利用汇编语言在图形形式下的编程方法显示一个等腰三角形。 二、编程思路二、编程思路 1. 对于图形程序设计,首先应通过 bios int 10h 调用,将屏幕的工作方式设置为 图形方式。 2 . 然后选择还是的 int 10h 功能调用实现绘图。 3. 本题绘制三角形,只要用写像素子程序画出三条直线,就可画出三角形。关键是 要确定好三条线的坐标。 三、三、 参考程序参考程序 data segment mess d
40、b “triangle” ,0dh,0ah cn equ $mess messl db “(0,0)” ,0ah,0dh, ”$” mess2 db “(0,100)” ,0ah,0dh, ”$” mess3 db “(100,0)” ,0ah,0dh, ”$” f al db ? data ends code segment assume cs:code,ds:data start:mov ax,data mov ds,ax ;程序初始化 mov ah,0fh int 10h ;取当前显示方式 mov byte ptr f al,al ; 保存当前显示方式 mov ah,0 mov al,4
41、 int 10h ;设置新的显示方式(模式 4) mov dx,60 mov cx,100 donel:mov ah,0ch mov al,02h int 10h ;画三角形的一条边 inc cx inc dx cmp dx,140 jnz donel mov dx,140 mov cx,180 done2:mov ah,0ch mov al,2 int 10h ;画三角形的另一条边 dec cx cmp cx,99 jnz done2 mov dx,60 mov cx,100 done3:mov ah,0ch mov al,02h int 10h ;画三角形的第三条边 inc dx cmp
42、dx,140 jnz done3 mov ah,02h mov dh,19 mov dl,13 int 10h mov di,offset mess mov cx,cn lop:mov ah,0eh mov al,di inc di mov bl,3 int 10h loop lop ; 显示”triangle” mov dh,17 mov dl,7 mov bk,offset mess1 call disp mov dh,7 mov dl,5 mov bx,offset mess2 call disp mov dh,17 mov dl,23 mov bx,offset mess3 call
43、disp lopl:mov ah,06h mov dl,0ffh int 21h ;是否有键按下? jnz over jmp lopl over:mov ah,0 mov al,f al int 10h ;恢复原显示模式 mov ah,4ch int 2lh ; 返回 dos disp proc near mov ah,02h int 10h mov ah,09h mov dx,bk int 21h ;显示坐标值 ret code ends end start 四、课题设计要求同前(略) 简单计算器程序设计简单计算器程序设计 一、设计要求一、设计要求 1. 设计一个简单的计算器程序。 2. 具
44、体要求:在屏幕上显示一个小窗口,将光标定位在窗口内。在窗口内输入一个 表达式(单项运算)。程序根据表达式计算运算结果,并在表达式的后面显示一个”=“和 运算结果。 二、题目分析二、题目分析 1. 本题目的重点和难点包括以下几个方面; 利用 bios 调用中 int 16h 调用中的子程序完成清屏、设置显示方式、设置窗口等 操作。 利用 int21hdos 系统功能调用中的键盘输入接收十进制操作数和运算符,由程序 完成由字符转换为二进制数,并存储起来。 根据运算符完成运算,由程序在屏幕上显示运算结果。 2. 十进制数转换为二进制数过程如下; 1)将 bx 清 0。 2)从键盘接收一个按键的 as
45、cii 送 al 中,并判断是否为 0 到 9 之间的字符, 若不是转退出。 3)否则将 al 中内容减 30h,转换为相应数字的二进制数,并扩展到 ax 中, 然后将 bx 中内容乘以 10 后,再加上 ax 中的内容。 4)转 2)继续执行。 因此程序退出后,bx 中的内容即为所输入十进制数的二进制值。 例如;首先将 bx 清 0 后,先输入数字”5” ,则(从)=35h,属于 0 到 9 之间的数字,减 30h 后,(al)=05h,扩展后,(ax)=0005h,bx 乘以 10 后,加上 ax 中的内容,(bx) =0005h。 然后再输入数字”3” ,则(al)=33h,属于 0 到
46、 9 之间的数字,减 30h 后,(al) =03h,扩展后,(ax)=0003h,(bx)乘以 10 后,加上 ax 中的内容,(bx)=0035h,为十 进制数”53”的二进制值。 十进制数的显示过程如下(被显示的数据9999): (1)将被显示的内容送入 bx 中。 (2)bx 除以 1000,余数送 bx 中,商在 al 中,范围为 09。 (3)显示从中的内容。 (4)(bx)除以 100,余数送 bx 中,商在 al 中,范围为 090 (5)显示从中的内容。 以此类推,直到分离出个位数字为止。 在这里有一个特殊问题需要讨论:例如”53”这个十进制数,除以 1000 和除以 100
47、 的 商都为 0,不应显示。为了能够实现高位的”0”不显示,程序中设置一个标志 m, 初始值 设置为 1。若 m=1 且商为 0,则这个 0 不显示:若 m=l 且商不为 0,则说明这 是第一个非 0 数字,开始显示,并将 m 设置为 0;若 m=0,则商值都显示。如果结果本 身就是 0,则个位的 0 显示。 三、参考程序三、参考程序 下面给出一个参考程序,能完成以上功能。 具体功能界面如下: * * * * * * * * * * * * 由”*”组成一个窗口,光标在窗口内闪烁,等待用户输入表达式。 data segment x dw ? y dw ? m db ? mess db “,0a
48、h,0dh, ”$” data ends code segment assume cs:code,ds:data start:mov ax,data mov ds,ax ;程序初始化 call cur ;调程序完成屏幕初始化并显示边框 pos curse: mov ah,02h mov dh,9 mov dl,44 mov bh,0 int 10h ;光标定位在 9 行 44 列 mov dx,offset mess mov ah,09h int 21h ;显示字符串 mov ah,02h mov dh,8 mov dl,30 mov bh,0 int 10h ;光标定位在 8 行 30 列
49、mov ah,06h mov al,1 mov ch,5 mov cl,30 mov dh,8 mov dl,50 mov bh,7 int 10h ;屏幕上卷 mov al,1 mov m,al call add-to ;调 add-to 子程序,完成表达式输入 cmp al,5lh ;输入”q” ,结束程序 jz exit1 jmp pos curse exi1:mov ah,4ch int 21h ;子程序名:add to ;功能:完成键盘输入并转换 ;入口参数:无 ;出口参数:(al)=输入非数字字符的 ascii 码 add to proc near call char ;调子程序
50、char,完成第一个运算数转换 mov x,bx ;第一个数送 x 单元中 cmp al,2dh jz minu ;运算符=“-” ,转 minu,执行减法 cmp al,2ah jz mul ;运算符=“*” ,转 mul,执行乘法 cmp al,2fh jz div ;运算符=“” ,转 div 执行除法 cmp al,51h jz exits ; (al)=“q” ,转 exit8 call char ;否则调子程序 char,输入第二个数 call cr ;调子程序 cr,显示”=“ mov y,bx add bx,k ;执行加法运算,结果送 bx 中 jmp t0 ;转 t0 min
51、u:call char ;调子程序 char,输入第二个数 call cr ;调子程序 cr,显示”=“ mov y,bx: ;第二个数送 y 单元 mov bx,k cmp bx,y ;被减数减数,转 t jl t- sub bx,y ;否则完成 x 减 y,结果送 bx 中 jmp t0 ;转 t0,显示运算结果 mul-:call char ;调子程序 char,输入第二个数 call cr ;调子程序 cr,显示”=“ mov y,bx ;第二个数送 y 单元 mov ax,x mul y ;完成 x*y mov bx,ax ;结果送 bx 中 jmp t0 ;转 t0,显示运算结果
52、div-:call char ;调子程序 char,输入第二个数 call cr ;调子程序 cr,显示”=“ mov y,bx ;第二个数送 y 单元 mov dx,0 mov ax,x div y ;完成 xy mov bx,ax ;结果送 bx 中 jmp t0 ;转 t0,显示运算结果 t-:mov dl,2dh mov ah,02h int 21h ;显示”-” mov bx,y sub bx,x ;完成 y-x,结果送 bx 中 t0:call bin ;调 bin,显示运算结果 exit8:ret ;子程序名:cr- :功能:显示一个”=“ ;入口参数: (al)中为输入按键的
53、ascii ;出口参数无 cr- proc near cmp al,0dh jnz esc- ; (al)=0dh,转 esc mov ah,02h mov dh,8 mov dl,46 mov bh,0 int 10h ;光标定位在 8 行 46 列,显示一个”=“ mov dl,3dh mov ah,02h int 21h esc-:ret cr- endp ;子程序名,char ;子程序功能:接收键盘输入的十进制数,转换为二进制 ;入口参数:无 ;出口参数:(bx)中存放转换的二进制结果,(al)存放输入的非十进制数码的 ascii 码 char proc near mov bx,0 。
54、 newchar:mov ah,01h int 21h ;通过键盘,输入一个十进制数码 cmp al,30h jl exit cmp al,39h jg exit ;输入字符不在”o9”之间,转结束 sub al,30h ;否则减 30h,将 ascii 转换为二进制数 cbw ;扩展至 ax 中 xchg ak,bx mov cx,10d mul cx xchg ax,bx add bx,ak ;完成(bx)x10+ax,结果送 bx 中 jmp newchar ;转 newchar exit:ret char endp ;子程序名:bin ;子程序功能:将 bx 中的数据以十进制显示在屏幕
55、上 ;入口参数:(bx)=被显示数据 ;出口参数:无 bin proc near mov cx, 10000 call dec div mov cx, 1000 call dec- div mov cx,100 call dec-div mov cx,10 call dec div mov cx,1 call dec- div1 ret bin endp ;子程序名:dec-div ;子程序功能:bx 中内容除以 cx 中内容,显示 al 中的结果 ;入口参数:(bx)=被除数,(cx)=除数 ;出口参数, (bx)=余数 dec-div proc near mov ax,bx ;被除数送 a
56、x 中 mov dx,0 ;扩展至 dx、ax 中 div cx ;除以 cx 中的内容 mov bx,dx ; 余数送 bx 中 cmp m,0 ; jz to1 ;标志变量 m=0,转 t01 cmp al,0 ; 否则 al=0, 转 to2 jz to2 to1:mov dl,al add dl,30h mov ah,02h int 21h ;显示 al 中的内容 mov al,0 mov m,al ;标志变量送 0 to2:ret dec- div endp ;一一一一一一一一一一一一一一一一一一一一一一一一一一 dec-div1 proc near mov ax,bx mov dx
57、,0 div cx mov bx,dk mov dl,al add dl,30h mov ah,02h int 21h ret dec-div1 endp bin endp add to endp ;一一一一一一一一一一一一一一一一一一一一 cur proc near mov ah,6 mov al,0 mov ch,0 mov cl,0 mov dh,24 mov dl,79 mov bh,7 int 10h ;屏幕初始化 mov ah,2 mov bh,0 mov dh,4 mov dl,25 int 10h ;光标定位在 4 行 25 列 mov ah,9 mov al, ”*” mov
58、 bh,0 mov bl,9 mov cx,30 int 10h ;显示行”*” ;* mov ah,2 mov bh,0 mov dh,10 mov dl,25 int 10h ;光标定位在 10 行 25 列 mov ah,9 mov al, ”*” mov bh,0 mov bl,9 mov cx,30 int 10h ;显示 1 行”*” ;* mov dh,4 call a call a call a call a call a call a ;调子程序,显示左边框:”*” ;* mov dh,4 call b call b call b call b call b call b ;
59、调子程序,显示右边框”*” ret cur endp ;* a proc near mov ah,2 mov bh,0 inc dh mov dl,25 int 10h mov ah,9 mov al, ”*” mov bh,0 mov bl,9 mov cx,1 int 10h ret a endp ;* b proc near mov ah,2 mov bh,0 inc dh mov dl,54 int 10h mov ah,9 mov al, ”*” mov bh,0 mov bl,9 mov cx,1 int 10h ret b endp code ends end start 四、课
60、题设计要求同前(略) 歌手大奖赛计分程序设计歌手大奖赛计分程序设计 一、设计要求:一、设计要求: 根据歌手大奖赛的要求,设计一个计算平均分的程序。 1.每位歌手的分数通过键盘输入。 2.评委人数共 10 人,去掉最高分和最低分后,求平均值。 3.屏幕显示每位评委的打分和最后得分。 二、二、 设计思路及编程步骤设计思路及编程步骤: 1.显示提示语句:”输入分值,并用空格分隔” 。 (参考人机会话程序) 2.接受键入的分数,并存入显示缓冲区 disp:。 (参考人机会话程序) 3.显示键入的数据。 (参考人机会话程序) 4.将键入的 ascii 码转换成 bcd 码,并存入数据区 bcsf:(参考
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 科技研发实验室的预算规划及执行
- 小学数学课堂管理技巧与策略研究
- 现代办公楼内学生餐厅的设计与实践
- 网络营销团队的业绩提升与策略调整的视觉汇报
- 2025年食堂工作人员聘用及食品安全风险评估合同
- 二零二五年度儿童餐饮店品牌加盟合同范本
- 2025年度美容美发行业技术交流与合作合同
- 时间管理-提升孩子学习效率的秘诀
- 科技助力提升季节性儿童钙质摄入效率
- 技术驱动下的创意设计发展
- 中国储备粮管理集团有限公司兰州分公司招聘笔试真题2024
- 第1课 隋朝统一与灭亡 课件(26张)2024-2025学年部编版七年级历史下册
- 【历史】唐朝建立与“贞观之治”课件-2024-2025学年统编版七年级历史下册
- 产业园区招商合作协议书
- 2024年广东省公务员录用考试《行测》真题及答案解析
- 2024公路工程施工安全风险辨识与管控实施指南
- 新疆2024年新疆和田师范专科学校招聘70人笔试历年典型考题及考点附答案解析
- 【正版授权】 ISO 15978:2002 EN Open end blind rivets with break pull mandrel and countersunk head - AIA/St
- 2024时事政治考试题库(基础题)
- 2024山西文旅投资集团招聘117人公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
- 《社区康复》课件-第七章 脑瘫患儿的社区康复实践
评论
0/150
提交评论