五角星移动 汇编语言课程设计报告

  • 格式:doc
  • 大小:62.50 KB
  • 文档页数:8

1 目 录 目 录........................................................................................................ 1 正 文........................................................................................................ 2 一、题目的具体功能概述...................................... 错误!未定义书签。 二、软件设计流程及描述........................................................................ 2 三、源程序代码........................................................................................ 5 四、课程设计体会.................................................................................... 8 五、参考文献............................................................................................ 8 2

正 文 一、 题目的具体功能概述 1. 显示提示信息,进入欢迎界面后显示提示信息。 2. 清屏。 3. 按任意键进入主界面,显示操作提示信息。 4. 清屏。 5. 用s键实现左移,e键实现上移,d键实现下移,f键实现右移,q键实现退出。 6. 按下不同的功能键,五角星对应不同方向的移动。

二、软件设计流程及描述 1.软件设计流程步骤

(1).开始 (2).显示提示信息 (3).键盘输入字符 (4).清屏 (5).定五角星初始位置显示位置 (6).画五角星 3

(7).检查按键值 (8).若为q键则退出 (9).不是则判断是否为上 (10).是则调用清除子程序 (11).实现五角星上移 (12).否则转与下比较

同上………. (16).按q键退出。

2.步骤分析 (1).由于后面画五角星和清除五角星反复用到BIOS中断显示中断2号定位光标和9号写点,首先对其进行了宏定义。

(2).用BIOS中断显示中断0号功能,ah=2选择80*25黑白文本方式显示。 (3).用DOS系统功能调用9号输出提示信息1和8号使按任意键进入下一界面。

(4). 用BIOS中断显示中断6号,al=0清屏。 (5). 用DOS系统功能调用9号输出提示信息2和8号使按任意键进入下一界 4

面。 (6). 用BIOS中断显示中断6号,al=0清屏。 (7). 用BIOS中断显示中断2号,把画五角星的起始点光标定于屏幕中间。 (8).用si寄存器存储每一次画五角星起始点的 行列值。 (9).画五角星。把si寄存器偏移地址赋给dx,(用一个si寄存器使为了存放每一次五角星的起始点光标行列值,为后面的五角星清除和移动带来方便),引用宏定义,画出五角星第一个点,然后光标行列值不断变化,依次引用宏定义,画出完整五角星。

(10). 用BIOS中断键盘中断调用0号,从键盘读字符到al中,检查按键值。 (11).比较按键值是否与q键相等,若相等,用jz条件转移指令转到退出。若不等,则与e键(↑)值比较,若不等于,则转到向下移动五角星程序段。若等于,则先调用qing程序段清除五角星子程序,然后行减1,用jmp指令转到write程序段画五角星,实现五角星上移。同理,在后面的下,向左,向右移动的 程序中也做此类的分析操作。

(12).最后在向左移动的程序段中,前面已经判断过不是上,下,右键,而为了防止按下的键也不是左键(而是其他任意键)发生意外情况,则视其操作无效,即五角星不移动,此时就用jnz指令转到write还在本为画五角星,若是s(←)键,则先调用qing程序段清除五角星子程序,然后si减1,即列减1,用jmp指令转到write程序段画五角星,实现五角星左移。

(13).若按键为q,则退出。 5

三、源程序代码

data segment buff1 db 0dh,0ah,0dh,0ah db ' Welcome you to run this programme!' db 0dh,0ah,0ah db '******please press any key to continue******$' ;提示信息1 buff2 db 0dh,0ah,0ah db 'Now attention please!' db 0dh,0ah,0ah db 'press e turn up,press d turn down,press s to left' db 0dh,0ah,0ah db 'press f to right,press q to quit' db 0dh,0ah,0ah db 'Now please press any key to continue$' ;提示信息2 data ends stackes segment db 200 dup(0) stackes ends codes segment assume cs:code,ds:data,ss:stack start: mov ax,data mov ds,ax wr macro zifu ;宏定义写点 mov ah,2 int 10h ;定位光标 mov al,zifu mov cx,1 mov ah,0ah int 10h ;写点 endm tu: mov ah,0 mov al,2 int 10h ;设定屏幕为80*25黑白文本 lea dx,offset buff1 mov ah,9 int 21h ;显示提示信息1

mov ah,8 int 21h ;键盘输入字符 mov ax,0600h mov cx,0 mov dx,184fh 6

int 10h ;清屏 mov ah,0 mov al,2 int 10h lea dx,offset buff2 mov ah,9 int 21h ;显示提示信息2 mov ah,8 int 21h ;键盘输入字符 mov ax,0600h mov cx,0 mov dx,184fh int 10h ;清屏 mov ah,0 mov al,2 int 10h mov si,0a27h ;定初始位置显示位置,用si寄存器存储每个五角星的起始点 write: mov dx,si ;从起始点画五角星 wr 2ah add dh,2 sub dl,3 wr 2ah add dl,3 wr 2ah add dl,3 wr 2ah add dh,2 sub dl,4 wr 2ah add dl,3 wr 2ah ;五角星画完 mov ah,0 int 16h ;检查按键值 cmp al,71h jz exit ;若为q键则退出 cmp al,65h ;是否为上 jnz xia ;否则转与下比较 call qing ;是则调用清除子程序 sub si,0100h jmp write ;实现五角星上移 xia: cmp al,64h ;是否为下 jnz you ; 否则转与右比较 call qing ;是则调用清除子程序 7

add si,0100h jmp write ;实现五角星下移 you: cmp al,66h ;是否为右 jnz zuo ;否则转与左比较 call qing ;是则调用清除子程序 inc si jmp write ;实现五角星右移 zuo: cmp al,73h ;是否为左 jnz write ;否则不移动 call qing ;是则调用清除子程序 dec si jmp write ;实现五角星左移 qing proc mov dx,si ;清除五角星 wr 0 add dh,2 sub dl,3 wr 0 add dl,3 wr 0 add dl,3 wr 0 add dh,2 sub dl,4 wr 0 add dl,3 wr 0 ret qing endp exit: mov ah,4ch int 21h codes ends end start 8

四、课程设计体会 经过此次课设,给我最大的感受,就是第一次亲手编出这么长的代码,而且实现了在此之前看似很难做到的功能,有很大的成就感,让我对汇编语言加深了好感。 但课设之中也让我收获了很多经验。给 我印象最深的就是,在程序中非常容易出小的毛病,而这些小毛病往往浪费大量的时间也很难检查出来,让人烦恼至极。比如,在程序结束的最后一条指令mov ah,4ch ; int 21h中少写了h,写成了int 21,导致程序运行时,屏幕一闪而过,没有运行结果,而且程序也不报错,反复检查也 找不到错误,让人伤透脑筋。还有在代码段刚开始时,忘记写mov ax,data;mov ds,ax导致后面调用清屏和画五角星等程序总是出错。此后让我懂得写程序一定要仔细,要认真写清每一行代码。 另外,在编出中也参考了一些其他资料,从中也 学到了不少编程知识和经验,比如编程要先搭好构架,画出流程图,代码要写出必要的注释等等,感觉此次课设让我受益匪浅,而且,也让我明白了,要想学好一门计算机语言,就必须要多动手编程。

五、参考文献 [1] 王元珍著. IBM-PC宏汇编语言程序设计(第二版).武汉:华中科技大学出版,1996

[2] 刘均著.汇编语言程序设计试验教程. 北京:科学出版社,2006 [3] 李珍香著.汇编语言程序设计案例精编.北京:中国水利水电出版社,2004