将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
本程序设计主要要求用汇编语言实现数字方阵的创建。
程序提示用户输入任一数字n,系统接收该数字,并返回一个n阶数字方阵。要求将n2个自然数按螺旋纹路填入这个n阶方阵(顺时针,由外向内)。本程序设计中,系统提示输入一个3-9的数字,根据输入的数字显示方阵,如输入4,输出
要实现该功能要求,需要显示提示字符串,接受用户输入,调用中断[2],按要求显示方阵。
具体要求:
(1)输出提示输入,接受在一定范围内的指定数字(本程序为3到9之间),否则重新输入,如果是ESC键,则推出程序
(2)对接受的数字进行运算,将n2个自然数按螺旋纹路填入n阶方阵并显示该方阵。

2.2.2 子程序工作流程
SHOW循环显示子程序:

程序设计分析
算法实现并不是件简单的事情。高级语言可以设置二维数组实现,不必考虑其位数,输出也仅是一个元素值。而用汇编则遇到定位鼠标,才是显示,根据程序要求,想要达到程序要求,必须对鼠标位置做精确定位[3]。汇编一次只能输出一个字符,对于二位十进制数据时,必须作出处理分别输出[5]。如果对于一位二进制数不做处理,输出时的样子非常难看。处理方案是:当输出一位十进制数时,在十位位置填充空格,显示效果良好[1]。根据课题的要求,主要完成一下几方面的设计:
1.显示提示输入,提示输入 ,并保证输入大于3小于9,否则重新输入
2.编写子程序,用算法实现每次形如矩形的输出,直至输出完毕
3.在输出时,如果是两位十进制数,使用设计子程序分别输出个位,十位值,若是一位十进制数,十位填充空格,输出。
3 主要代码实现
3.1 主模块代码
主模块主要完成的功能有:在屏幕显示提示字符串、准备接收用户输入的字符,若为Esc键,则推出程序;若为数字字符,则将其转换成数字,并判断数字是否在规定范围内,然后根据数字大小调用相应子模块,显示方阵。该模块主要使用了进栈、出栈,基本加减运算,赋值运算,比较运算以及流程跳转控制。
- PUSH CS
- POP DS
- MOV AX,3
- INT 10H ;BIOS中断,置文本显示模式
-
- MOV AX,0B800H
- MOV ES,AX ;定位显存
-
- MOV DX,OFFSET MSG
- MOV AH,9
- INT 21H ;提示
-
- T0: MOV AH,0
- INT 16H ;接收数据
-
- CMP AL,1BH ;Esc键结束程序 esc(ascii=1Bh)
- JZ QUIT
-
- CMP AL,'3' ;数据校验,保证输入3<al<9
- JB T0
- CMP AL,'9'
- JA T0
-
- MOV AH,0EH ;在Teletype模式下显示字符
- INT 10H ;显示有效数
-
- SUB AL,30H ;得到十进制数字
- PUSH AX
- MUL AL ;al*al
- MOV SI,AX ;保存矩阵最大数到si中
- POP AX
- CBW ;chang byte to word
- MOV BP,1 ;第一个元素值
- MOV DI,3*80*2
- NEXT:
- MOV CNT1,AX ;输入数据保存到cnt1
- DEC AX ;n-1
- MOV CNT2,AX
- MOV CNT3,AX
- DEC AX ;(n-1)-1
- MOV CNT4,AX
- ADD DI,3*2
- CALL SHOW ;输出矩阵
- MOV AX,CNT1
- SUB AX,2
- SUB DI,3*2
- CMP BP,SI
- JBE NEXT ;bp<si,则继续执行
- MOV AH,0
- INT 16H ;等待
- JNZ START
- QUIT:
- MOV AX,4C00H
- INT 21H
-
- 3.2 显示方阵模块代码
- 显示方阵模块主要用于控制数字及其显示位置[4],以达到题目要求的数字按照螺旋纹路填入n阶方阵中。该模块主要运用了赋值运算,循环控制,比较运算及流程控制。
- SHOW: ;显示方阵
- MOV CX,CNT1 ;right 向右赋值
- M1: CALL CRT
- INC BP ;下一个元素数值
- LOOP M1
- MOV CX,CNT2 ;down 向下赋值
- JCXZ P2 ;cx=0,则转p2处
- M2: ADD DI,(80-3)*2
- CALL CRT
- INC BP
- LOOP M2
- MOV CX,CNT3 ;left 向左赋值
- JCXZ P2
- M3: SUB DI,6*2 ;下一个元素位置
- CALL CRT
- INC BP
- LOOP M3
- MOV CX,CNT4 ;up 向上赋值
- JCXZ P2
- M4: SUB DI,(80+3)*2
- CALL CRT
- INC BP
- LOOP M4
- P2: RET
-
- 3.3 显示控制模块代码
- 控制模块主要用于控制数字的显示方式,若为一位数,则显示个位,并补充空格;若为两位数,则分别显示十位和个位,以达到数字的正确显示。主要进行了数字的修正和各位数字的分离。
- CRT:
- MOV AX,BP
- AAM ;调整指令
- OR AX,3030H
- XCHG AH,AL ;交换ah和al
- CMP AL,'0'
- JNZ P1
- MOV AL,20H
- P1: STOSB ;显示十位
- INC DI
- MOV AL,AH
- STOSB ;显示个位
- INC DI
- MOV AL,20H
- STOSB ;显示空格
- INC DI
- RET
复制代码
运行结果分析
经过上诉分析和模块设计,编写出完整的程序代码。经过不断的调试和修改得到最终程序设计。该程序能正常运行,并完成规定的功能。现将运行结果截图如下: 程序开始运行:
图4.1 输入3,运行结果如下:
图4.2 键入9,运行结果如下:
图4.3
全部资料51hei下载地址: |