汇编语言数字矩阵显示程序_第1页
汇编语言数字矩阵显示程序_第2页
汇编语言数字矩阵显示程序_第3页
汇编语言数字矩阵显示程序_第4页
汇编语言数字矩阵显示程序_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、石家庄铁道大学信息学院数字矩阵(25分【问题描述】从键盘输入一个整数(110,以该数字为矩阵的大小,把1,2,3,n*n 的数字按照顺时针螺旋的形式填入其中。【函数形式】void f8(【输入】一个整数(110。【输出】数字矩阵。【举例1】输入:3输出:1 2 38 9 47 6 5【举例2】输入:4输出:1 2 3 412 13 14 511 16 15 610 9 8 7源程序为:;woniusuanfa;-huiche macro ;定义换行打印的宏push axmov ah,02hmov dl,0ahint 21hmov dl,0dhint 21hpop axendm;-tab mac

2、ro ;定义tab宏push axmov ah,02hmov dl,09hint 21hpop axendm;-mi macro ;定义打印*号的宏push axmov ah,02hmov dl,2ahint 21hpop axendm;-;*datarea segmentmess1 db 'Please enter a integer !$'mess2 db 'The characters you entered illegally, please re-enter!$' mess3 db 'Print results are as follows :

3、$'mess4 db 'jishu$'mess5 db 'oushu$'arr dw 100 dup(0n dw ? ;要打印的数字个数i dw ? ;要打印的矩形边的个数t db 2q dw 0 ;q表示列h dw 0 ;h表示行j dw 0k dw 0q1 dw 0 ;q表示列h1 dw 0 ;h表示行j1 dw 0k1 dw 0datarea ends;* stack segmentstackdb 100 dup(0stack ends;*code segmentassume cs:code,ds:datarea,ss:stackmain proc

4、 farstart:mov ax,datareamov ds,axsub ax,axmov ah,9mov dx,offset mess1int 21hhuichetab ;打印回车和换行call scanf ;从键盘接受十进制数mov bx,nhuichemov ah,9mov dx,offset mess3int 21h;-mov ax,1 ;计算矩形方框边上数字的个数mov cx,1 ;让输入的数和边个数的平方比较one: mov ax,cxmul c xcmp ax,nja twoje twoinc cxjmp o ne;-two: mov i,cx ;要打印的矩形边的个数mov ax

5、,cxdiv tcmp ah,1 ;边的数字个数为奇数是跳转jz threecmp ah,0jz four ;边的数字个数为偶数时跳转three:call print1 ;调用奇数打印函数call printfjmp f ivefour:call print2 ;调用偶数打印函数call printfjmp f ivefive:mov ah,4chint 21hmain endp;-scanf proc near ;接受十进制数的子程序mov ax,0mov bx,0mov cx,0newchar:mov ah,01hint 21hcmp al,0dhjz exitcmp al,48jl ex

6、it1cmp al,57ja exit1sub ax,30hcbwcmp cx,0jz jinzhiinc cxxchg ax,bxmov cx,10mul c xxchg ax,bxadd bx,axjmp n ewcharjinzhi:inc cxxchg ax,bxjmp n ewcharexit:mov n,bxretexit1:huichemov ah,9mov dx,offset mess2int 21hhuichetabjmp s canfhuichescanf endp;*;-print1 proc near ;奇数打印蜗牛push axpush bxpush cxpush d

7、xmov bx,20mov si,0mov di,0mov dx,0mov ax,1 ;让AX作为起始值,一直累加到所打印的个数mov cx,ipush idec cxmov q,cx ;最外层循环mov h,0pri:cmp i,1 ;je qui2mov j,0;-pri0:cmp j,0 ;j等于0就跳转到pri1je pr1cmp j,1 ;j等于1就跳转到pri2je pr2cmp j,2 ;j等于2就跳转到pri3je pr3cmp j,3 ;j等于3就跳转到pri4je pr4cmp j,4je pr5qui2:jmp q uit1pr1:mov cx,h ;把H的值给Kmov

8、k,cxjmp p ri1pr2:mov cx,h ;把H的值给Kmov k,cxjmp p ri2pr3:mov cx,q ;把Q的值给Kmov k,cxjmp p ri3pr4:mov cx,q ;把Q的值给Kmov k,cxjmp p ri4pr5:jmp p ri5pri1:mov cx,qcmp k,cxje priexit1push bxpush ax ;ax入栈,保存现场mov ax,bxmul h;基址bx乘以20,进去数组的第二行mov bx,axmov ax,k ;変址di乘以K跳到数组下一个单元mul tmov di,axpop axmov arrbx+di,axpop

9、bxinc axinc kjmp p ri1priexit1:jmp p riexitpri2:mov cx,qcmp k,cxje priexit1push bxpush axmov ax,bx ;跳转到第k行mul kmov bx,axmov ax,qmul tmov di,axpop axmov arrbx+di,axpop bxinc axinc kjmp p ri2pri3:mov cx,hcmp k,cxje priexitpush bxpush axmov ax,bxmul qmov bx,axmov ax,kmul tmov di,axpop axmov arrbx+di,ax

10、pop bxinc axdec kjmp p ri3pri4:mov cx,hcmp k,cxje priexitpush bxpush axmov ax,bxmul kmov bx,axmov ax,hmul tmov di,axpop axmov arrbx+di,axpop bxinc axdec kjmp p ri4priexit:inc jcmp j,4je pri5jmp p ri0;- pri5: mov j,0inc h ;h减1dec q ;q减1dec idec ijmp p riquit1:pop i ;最后那个数赋给数组push axmov ax,idec axpush

11、 axdiv tcbwmov dx,axmov ax,bxmul d xmov bx,axmul tdiv tcbwmov di,axpop axmov arrbx+di,ax;-;-pop dxpop cxpop bxpop axretprint1 endp;-print2 proc near ;偶数打印蜗牛push axpush bxpush cxpush dxmov bx,20mov si,0mov di,0mov dx,0mov ax,1 ;让AX作为起始值,一直累加到所打印的个数mov cx,ipush idec cxmov q1,cx ;最外层循环mov h1,0pr:cmp i,

12、1 ;jl q2mov j1,0;-prit0:cmp j1,0 ;j等于0就跳转到pri1je p1cmp j1,1 ;j等于1就跳转到pri2je p2cmp j1,2 ;j等于2就跳转到pri3je p3cmp j1,3 ;j等于3就跳转到pri4je p4cmp j1,4je p5q2:jmp q uit2p1:mov cx,h1 ;把H的值给Kmov k1,cxjmp p rit1p2:mov cx,h1 ;把H的值给Kmov k1,cxjmp p rit2p3:mov cx,q1 ;把Q的值给Kmov k1,cxjmp p rit3p4:mov cx,q1 ;把Q的值给Kmov k

13、1,cxjmp p rit4p5:jmp p rit5prit1:mov cx,q1cmp k1,cxje priexi1push bxpush ax ;ax入栈,保存现场mov ax,bxmul h1 ;基址bx乘以20,进去数组的第二行mov bx,axmov ax,k1 ;変址di乘以K跳到数组下一个单元mul tmov di,axpop axmov arrbx+di,axpop bxinc axinc k1jmp p rit1priexi1:jmp p riexiprit2: mov cx,q1 cmp k1,cx je priexi1 push bx push ax mov ax,b

14、x ;跳转到第 k 行 mul k1 mov bx,ax mov ax,q1 mul t mov di,ax pop ax mov arrbx+di,ax pop bx inc ax inc k1 jmp prit2 prit3: mov cx,h1 cmp k1,cx je priexi push bx push ax mov ax,bx mul q1 mov bx,ax mov ax,k1 mul t mov di,ax pop ax mov arrbx+di,ax pop bx inc ax dec k1 jmp prit3 prit4: mov cx,h1 cmp k1,cx je p

15、riexi push bx push ax mov ax,bx mul k1 mov bx,ax mov ax,h1 mul t mov di,ax pop ax mov arrbx+di,ax pop bx inc ax dec k1 jmp prit4 priexi: inc j1 cmp j1,4 je prit5 jmp prit0 ;-prit5: mov j1,0 inc h1 ;h 减 1 dec q1 ;q 减 1 dec i dec i jmp pr quit2: pop i pop dx pop cx pop bx pop ax ret print2 endp ;-prin

16、tf proc near l dw 0 ;定义行 m dw 0 ;定义列 push ax push bx push cx push dx ;-huiche mov l,0 qu3: mov dx,i ;for 语句(第 L 行为最后一行时结束) cmp l,dx jz qu1 ;打印函数的外部循环 ;-mov m,0 qu4: mov dx,i ;for 语句(第 M 列为最后一行列时结束) cmp m,dx jz qu2 ;-mov bx,20 mov ax,bx mul l mov bx,ax mov ax,m mul t mov di,ax push bx mov dx,arrbx+di

17、 cmp dx,n ja qu5 mov bx,dx tab call printDec ;-inc m pop bx jmp qu4 qu5: tab mi inc m pop bx jmp qu4 qu2: huiche inc l jmp qu3 ;-qu1: pop dx pop cx pop bx pop ax ret printf endp ;-;* ;-printDecproc near;输出一个十进制数,参数:BX ten dw 10 digsdw 0 ;从个位开始,逐位压入堆栈,然后出栈,即可从高位到地位输出 mov digs,0 lable1: mov ax, bx mov dx, 0 ; (d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论