数字方阵程序.docx
- 文档编号:383687
- 上传时间:2022-10-09
- 格式:DOCX
- 页数:13
- 大小:119.99KB
数字方阵程序.docx
《数字方阵程序.docx》由会员分享,可在线阅读,更多相关《数字方阵程序.docx(13页珍藏版)》请在冰豆网上搜索。
数字方阵程序
微机原理综合实验设计
信控学院
自动化专业
自动0901班
题目数字方阵
姓名高旭光
学号09510135
指导教师王聪陈北辰
2011年11月5日
数字方阵的显示
1.设计任务
将N方个(N=3,4,5)个自然数按螺旋纹路填入N*N方阵,要求程序运行时输入参数N,然后输 出所需的N阶方阵,如N=4时输出显示 :
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
2.实验目的及知识点
进行程序设计方法和技能的基本训练,培养学生独立思考,独立编程的能力,让学生进一步了解微机原理这门课程的内涵,提高学生编程的水平,培养学生的编程兴趣。
在完成实验的过程中学生需要不断地检查,调试程序,然后根据出现的问题进行改进。
本实验用到了汇编语言中的
“比较语句”
“循环语句”
“分支结构”
以及程序的调用,数据的堆栈。
3.程序流程图
3.1主程序流程图
Y
N
3.2子程序S流程图
4.程序源代码及注释
datasegment
buf1db'123894765'
buf2db'12341213145111615610987'
buf3db'12345161718196152425207142322218131211109'
dbufdb14dup()
i1db0dh,0ah,'THISISAFANGZHENPROGRAMM'
db0dh,0ah,'inputqtoexit'
db0dh,0ah,'Pleaseinputanumber(3--5):
','$'
i2db0dh,0ah,'inputerror,pleasereinput!
','$'
ndb0
bdb1
dataends
stacksegment
db100dup()
stackends
codesegment
assumeds:
data,cs:
code,ss:
stack
main:
movax,data
movds,ax
callclear
lop:
leadx,i1
movah,9
int21h
movah,1
int21h
cmpal,'q'
jzquit
leasi,buf1
movn,7
movcl,3
callclear
cmpal,'3'
jzs
leasi,buf2
movn,10
movcl,4
cmpal,'4'
jzs
leasi,buf3
movcl,5
movn,13
cmpal,'5'
jzs
leadx,i2
movah,9
int21h
callclear
jmplop
s:
movbl,n
leadi,dbuf
l:
moval,[si]
mov[di],al
incsi
incdi
decbl
jnel
mov[di],byteptr'$'
movah,2
movdh,b
movdl,0
int10h
leadx,dbuf
movah,9
int21h
incb
loops
jmplop
quit:
movah,4ch
int21h
;***清屏***
clearprocnear
pushax
pushbx
pushcx
pushdx
movah,6
moval,0
movch,0
movcl,0
movdh,24
movdl,79
movbh,7
int10h
popdx
popcx
popbx
popax
ret
clearendp
codeends
endmain
DATASEGMENT
BUF1DB'123894765';n=3时输出的数据
BUF2DB'12341213145111615610987';n=4时输出的数据
BUF3DB'12345161718196152425207142322218131211109'
;n=5时输出的数据
DBUFDB14DUP(?
);用于存放每行输出的数据
I1DB0DH,0AH,'THISISAFANGZHENPROGRAMME';提示语
DB0DH,0AH,'INPUTQTOEXIT'
DB0DH,0AH,'PLEASEINPUTANUMBER(3--5):
','$'
I2DB0DH,0AH,'INPUTERROR,PLEASEREINPUT!
','$'
NDB?
用于控制输出列数(包括空格)
BDB1;用语控制输出地方(即屏幕中的哪一行)
DATAENDS
STACKSEGMENTPARASTACK'STACK';设置堆栈段
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE,SS:
STACK
MAIN:
MOVAX,DATA
MOVDS,AX
CALLCLEAR;调用子程序clear(清屏)
LOP:
MOVB,1;将提示语从第一行输出
LEADX,I1;将I1首地址付给DX
MOVAH,9;调用9号功能,输出DX中的字符串
INT21H
MOVAH,1;调用1号功能,从键盘输入字符
INT21H
CMPAL,'Q';输入字符如果是Q,则退出
JZQUIT
LEASI,BUF1;设置缓冲区指针
MOVN,7;设置每行输出的字符数(包括空格)
MOVCL,3;设置循环次数
CALLCLEAR;清屏
CMPAL,'3';输入的字符如果是3则跳转到S
JZS
LEASI,BUF2
MOVN,10
MOVCL,4
CMPAL,'4';输入的字符如果是4则跳转到S
JZS
LEASI,BUF3
MOVCL,5
MOVN,13
CMPAL,'5';输入的字符如果是5则跳转到S
JZS
MOVAH,2;调用2号功能,设置光标的位置
MOVDH,1
MOVDL,0
INT10H
LEADX,I2;设置提示语字符的首地址指针
MOVAH,9;调用9号功能,将提示语从所设的光标位置输出
INT21H
JMPLOP
S:
MOVBL,N
LEADI,DBUF;设置存放输出数据的缓冲区的地址指针
L:
MOVAL,[SI];以下六句的功能为:
将所要输
MOV[DI],AL;出数据缓冲区数据的前N个字
INCSI;符存到缓冲区DBUF
INCDI
DECBL
JNEL
MOV[DI],BYTEPTR'$';在数据缓冲区DBUF末尾加$
MOVAH,2;调用2号功能设置输出位置MOVDH,B;光标的位置
MOVDL,0
INT10H
LEADX,DBUF;调用9号功能将缓冲区DBUFMOVAH,9;的数据输出
INT21H
INCB
LOOPS
JMPLOP
QUIT:
MOVAH,4CH;退出程序
INT21H
CLEARPROCNEAR;子程序CLEAR的功能为清屏。
PUSHAX;将AX、BX、CX、DX入栈,保存
PUSHBX;里面的数据,
PUSHCX
PUSHDX
MOVAH,6;调用6号功能,以空格充满屏幕
MOVAL,0;达到清屏
MOVCH,0
MOVCL,0
MOVDH,24
MOVDL,79
MOVBH,7
INT10H
MOVAH,02H
MOVDH,0
MOVDL,0
INT10H
POPDX;将DX、CX、BX、AX出栈
POPCX
POPBX
POPAX
RET
CLEARENDP
CODEENDS
ENDMAIN
5.运行结果如下:
运行界面
输入字符不是3、4、5时的界面:
输入3时的结果:
输入4时的运行结果:
输入5时的运行结果:
6、程序调试过程中的收获和体会
经过对汇编语言的学习,对编写基本的汇编语言程序已经基本掌握了,包括用DEBUG进行调试和修改。
这次课程设计中,在对自己编写的这段程序进行调试的时候仍发现了自己在这方面的不足和缺点。
刚开始,将程序输入在编译时就发现了很多语法性错误,比如在堆栈段和数据段的定义上就有一些问题,导致无法进行编译或机器死机。
还有,有时将输入法调错导致编译时报错,等这些简单错误,只要仔细点,应该可以避免。
除了这些错误外,还出现了几个错误,但在同学们的帮助下,再加上自己查找了相关的资料后都得到解决。
在这个调试过程中,我掌握了一些调试的方法,例如,当你改变一段代码后,出现了一个问题,或者一个错误,但这些错误并不在你的意料之中,你就得重新审查这段代码,看它除了会得到你想的结果外,还会跟哪些段产生联系。
这些联系也许就是在自己更改代码时没有注意的,逐步考察到这段代码给整个程序带来的影响,进而就可以逐步更改自己的程序,并进行优化。
指导教师评语:
课程设计成绩:
指导教师签名:
年月日
WelcomeTo
Download!
!
!
欢迎您的下载,资料仅供参考!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 方阵 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)