汇编语言数字矩阵显示程序.docx

上传人:b****4 文档编号:5502409 上传时间:2022-12-17 格式:DOCX 页数:14 大小:16.96KB
下载 相关 举报
汇编语言数字矩阵显示程序.docx_第1页
第1页 / 共14页
汇编语言数字矩阵显示程序.docx_第2页
第2页 / 共14页
汇编语言数字矩阵显示程序.docx_第3页
第3页 / 共14页
汇编语言数字矩阵显示程序.docx_第4页
第4页 / 共14页
汇编语言数字矩阵显示程序.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

汇编语言数字矩阵显示程序.docx

《汇编语言数字矩阵显示程序.docx》由会员分享,可在线阅读,更多相关《汇编语言数字矩阵显示程序.docx(14页珍藏版)》请在冰豆网上搜索。

汇编语言数字矩阵显示程序.docx

汇编语言数字矩阵显示程序

石家庄铁道大学信息学院

数字矩阵(25分

【问题描述】

从键盘输入一个整数(1~10,以该数字为矩阵的大小,把1,2,3,……,n*n的数字按照顺时针螺旋的形式填入其中。

【函数形式】

voidf8(

【输入】

一个整数(1~10。

【输出】

数字矩阵。

【举例1】

输入:

3

输出:

123

894

765

【举例2】

输入:

4

输出:

1234

1213145

1116156

10987

源程序为:

;woniusuanfa

;-------------------------------------------------

huichemacro;定义换行打印的宏

pushax

movah,02h

movdl,0ah

int21h

movdl,0dh

int21h

popax

endm

;---------------------------------------------------

tabmacro;定义tab宏

pushax

movah,02h

movdl,09h

int21h

popax

endm

;---------------------------------------------------

mimacro;定义打印*号的宏

pushax

movah,02h

movdl,2ah

int21h

popax

endm

;------------------------------------------------------

;*****************************************

datareasegment

mess1db'Pleaseenterainteger!

$'

mess2db'Thecharactersyouenteredillegally,pleasere-enter!

$'mess3db'Printresultsareasfollows:

$'

mess4db'jishu$'

mess5db'oushu$'

arrdw100dup(0

ndw?

;要打印的数字个数

idw?

;要打印的矩形边的个数

tdb2

qdw0;q表示列

hdw0;h表示行

jdw0

kdw0

q1dw0;q表示列

h1dw0;h表示行

j1dw0

k1dw0

datareaends

;*************************************************stacksegmentstack

db100dup(0

stackends

;*********************************************

codesegment

assumecs:

code,ds:

datarea,ss:

stack

mainprocfar

start:

movax,datarea

movds,ax

subax,ax

movah,9

movdx,offsetmess1

int21h

huiche

tab;打印回车和换行

callscanf;从键盘接受十进制数

movbx,n

huiche

movah,9

movdx,offsetmess3

int21h

;----------------------------------------------------

movax,1;计算矩形方框边上数字的个数

movcx,1;让输入的数和边个数的平方比较one:

movax,cx

mulcx

cmpax,n

jatwo

jetwo

inccx

jmpone

;------------------------------------------------------

two:

movi,cx;要打印的矩形边的个数movax,cx

divt

cmpah,1;边的数字个数为奇数是跳转

jzthree

cmpah,0

jzfour;边的数字个数为偶数时跳转three:

callprint1;调用奇数打印函数

callprintf

jmpfive

four:

callprint2;调用偶数打印函数

callprintf

jmpfive

five:

movah,4ch

int21h

mainendp

;-----------------------------------------------

scanfprocnear;接受十进制数的子程序movax,0

movbx,0

movcx,0

newchar:

movah,01h

int21h

cmpal,0dh

jzexit

cmpal,48

jlexit1

cmpal,57

jaexit1

subax,30h

cbw

cmpcx,0

jzjinzhi

inccx

xchgax,bx

movcx,10

mulcx

xchgax,bx

addbx,ax

jmpnewchar

jinzhi:

inccx

xchgax,bx

jmpnewchar

exit:

movn,bx

ret

exit1:

huiche

movah,9

movdx,offsetmess2

int21h

huiche

tab

jmpscanf

huiche

scanfendp

;*******************************************************

;---------------------------------------------

print1procnear;奇数打印蜗牛

pushax

pushbx

pushcx

pushdx

movbx,20

movsi,0

movdi,0

movdx,0

movax,1;让AX作为起始值,一直累加到所打印的个数

movcx,i

pushi

deccx

movq,cx;最外层循环

movh,0

pri:

cmpi,1;

jequi2

movj,0

;------------------------------------------------------------

pri0:

cmpj,0;j等于0就跳转到pri1

jepr1

cmpj,1;j等于1就跳转到pri2

jepr2

cmpj,2;j等于2就跳转到pri3

jepr3

cmpj,3;j等于3就跳转到pri4

jepr4

cmpj,4

jepr5

qui2:

jmpquit1

pr1:

movcx,h;把H的值给K

movk,cx

jmppri1

pr2:

movcx,h;把H的值给K

movk,cx

jmppri2

pr3:

movcx,q;把Q的值给K

movk,cx

jmppri3

pr4:

movcx,q;把Q的值给K

movk,cx

jmppri4

pr5:

jmppri5

pri1:

movcx,q

cmpk,cx

jepriexit1

pushbx

pushax;ax入栈,保存现场

movax,bx

mulh;基址bx乘以20,进去数组的第二行

movbx,ax

movax,k;変址di乘以K跳到数组下一个单元

mult

movdi,ax

popax

movarr[bx+di],ax

popbx

incax

inck

jmppri1

priexit1:

jmppriexit

pri2:

movcx,q

cmpk,cx

jepriexit1

pushbx

pushax

movax,bx;跳转到第k行

mulk

movbx,ax

movax,q

mult

movdi,ax

popax

movarr[bx+di],ax

popbx

incax

inck

jmppri2

pri3:

movcx,h

cmpk,cx

jepriexit

pushbx

pushax

movax,bx

mulq

movbx,ax

movax,k

mult

movdi,ax

popax

movarr[bx+di],ax

popbx

incax

deck

jmppri3

pri4:

movcx,h

cmpk,cx

jepriexit

pushbx

pushax

movax,bx

mulk

movbx,ax

movax,h

mult

movdi,ax

popax

movarr[bx+di],ax

popbx

incax

deck

jmppri4

priexit:

incj

cmpj,4

jepri5

jmppri0

;-------------------------------------------------------------------pri5:

movj,0

inch;h减1

decq;q减1

deci

deci

jmppri

quit1:

popi;最后那个数赋给数组

pushax

movax,i

decax

pushax

divt

cbw

movdx,ax

movax,bx

muldx

movbx,ax

mult

divt

cbw

movdi,ax

popax

movarr[bx+di],ax

;---------------------------------------------------------------------

;------------------------------------------------------------------------

popdx

popcx

popbx

popax

ret

print1endp

;----------------------------------------------

print2procnear;偶数打印蜗牛

pushax

pushbx

pushcx

pushdx

movbx,20

movsi,0

movdi,0

movdx,0

movax,1;让AX作为起始值,一直累加到所打印的个数

movcx,i

pushi

deccx

movq1,cx;最外层循环

movh1,0

pr:

cmpi,1;

jlq2

movj1,0

;------------------------------------------------------------

prit0:

cmpj1,0;j等于0就跳转到pri1

jep1

cmpj1,1;j等于1就跳转到pri2

jep2

cmpj1,2;j等于2就跳转到pri3

jep3

cmpj1,3;j等于3就跳转到pri4

jep4

cmpj1,4

jep5

q2:

jmpquit2

p1:

movcx,h1;把H的值给K

movk1,cx

jmpprit1

p2:

movcx,h1;把H的值给K

movk1,cx

jmpprit2

p3:

movcx,q1;把Q的值给K

movk1,cx

jmpprit3

p4:

movcx,q1;把Q的值给K

movk1,cx

jmpprit4

p5:

jmpprit5

prit1:

movcx,q1

cmpk1,cx

jepriexi1

pushbx

pushax;ax入栈,保存现场

movax,bx

mulh1;基址bx乘以20,进去数组的第二行

movbx,ax

movax,k1;変址di乘以K跳到数组下一个单元mult

movdi,ax

popax

movarr[bx+di],ax

popbx

incax

inck1

jmpprit1

priexi1:

jmppriexi

prit2:

movcx,q1cmpk1,cxjepriexi1pushbxpushaxmovax,bx;跳转到第k行mulk1movbx,axmovax,q1multmovdi,axpopaxmovarr[bx+di],axpopbxincaxinck1jmpprit2prit3:

movcx,h1cmpk1,cxjepriexipushbxpushaxmovax,bxmulq1movbx,axmovax,k1multmovdi,axpopaxmovarr[bx+di],axpopbxincaxdeck1jmpprit3prit4:

movcx,h1cmpk1,cxjepriexipushbx

pushaxmovax,bxmulk1movbx,axmovax,h1multmovdi,axpopaxmovarr[bx+di],axpopbxincaxdeck1jmpprit4priexi:

incj1cmpj1,4jeprit5jmpprit0;------------------------------------------------------------------prit5:

movj1,0inch1;h减1decq1;q减1decidecijmpprquit2:

popipopdxpopcxpopbxpopaxretprint2endp;-----------------------------------------------------------------------printfprocnearldw0;定义行mdw0;定义列pushaxpushbxpushcxpushdx;----------------------------------------huichemovl,0qu3:

movdx,i;for语句(第L行为最后一行时结束)

cmpl,dxjzqu1;打印函数的外部循环;--------------------------------------------movm,0qu4:

movdx,i;for语句(第M列为最后一行列时结束)cmpm,dxjzqu2;---------------------------------------------movbx,20movax,bxmullmovbx,axmovax,mmultmovdi,axpushbxmovdx,arr[bx+di]cmpdx,njaqu5movbx,dxtabcallprintDec;------------------------------------------------------incmpopbxjmpqu4qu5:

tabmiincmpopbxjmpqu4qu2:

huicheincljmpqu3;----------------------------------qu1:

popdxpopcxpopbxpopaxret

printfendp;-----------------------------------------------------------------------;***********************************************************;----------------------------------------------------printDecprocnear;输出一个十进制数,参数:

BXtendw10digsdw0;从个位开始,逐位压入堆栈,然后出栈,即可从高位到地位输出movdigs,0lable1:

movax,bxmovdx,0;(dx,ax为被除数divten;除以10,余数为最低位,保存在dx中cmpdx,bxjzlable2;bx%10==bx,只剩下一位了,可以直接压栈incdigspushdxmovbx,axjmplable1lable2:

incdigspushbxmovcx,digsnext:

popaxmovdx,axadddl,30hmovah,2int21hloopnextretprintDecendp;--------------------------------------------------;*****************************************codeendsendstart

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1