汇编语言实验二+++循环与子程序程序设计.docx
《汇编语言实验二+++循环与子程序程序设计.docx》由会员分享,可在线阅读,更多相关《汇编语言实验二+++循环与子程序程序设计.docx(11页珍藏版)》请在冰豆网上搜索。
汇编语言实验二+++循环与子程序程序设计
实验二循环与子程序程序设计
一、实验目的
1)加深对循环结构的理解。
2)掌握循环程序的设计方法。
3)学习子程序的定义和调用方法。
4)掌握子程序、子程序的嵌套、递归子程序的结构。
5)掌握子程序设计、编制及调试。
6)熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
二、实验内容
1)编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。
2)将从3000H内存单元开始的100个字节存储单元全部清0。
3)编制在屏幕上显示九九乘法表的程序。
4)编制在屏幕上显示用*组成的三角形的程序。
5)设有五个字数据存放在以BUF为首地址的内存单元中,要求采用调用多个字数据相加的子程序方法编程,和的低位字放在RESULT单元,和的高位字放在RESULT+2单元,并将结果显示在屏幕上。
6)编写一个递归子程序,计算指数函数Xn的值,其中X,n从键盘输入。
三、源程序
EXAM2-1
DATASEGMENT
BUFDB’S=1+2×3+3×4+4×5+…+N(N+1)+…=’,’$’
RESDW4DUP(0),’$’
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETBUF
MOVAH,09H
INT21H
MOVDX,1
MOVBL,2
NEXT:
MOVAL,BL
INCBL
MULBL
ADDDX,AX
CMPAX,200
JNANEXT
MOVCX,0004H
MOVDI,OFFSETRES
ADDDI,03H
NEXT1:
MOVAX,DX
ANDAX,000FH
CMPAL,0AH
JBNEXT2
ADDAL,07
NEXT2:
ADDAL,30H
MOV[DI],AL
DECDI
PUSHCX
MOVCL,04
SHRDX,CL
POPCX
LOOPNEXT1
MOVDX,OFFSETRES
MOVAH,09H
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
执行程序EXAM2-1·EXE,屏幕上显示结果:
S=1+2×3+3×4+4×5+...+N(N+1)+(045)
EXAM2-2
ORG2000H
2000BF0030MOVDI,3000
2003B164MOVCL,64
2005C60500MOVBYTEPTR[DI],0
200847INCDI
2009FEC9DECCL
200B75F8JNZ2005
200DF4HLT
EXAM2-3
DATASEGMENT
ATADD
B?
2AH,?
3DH,?
?
20H,'$'
ATAD1D
B?
2AH,?
3DH,?
?
0DH,0AH,'$'DATAENDS
STACKSEGMENTSTACK
DB20HDUP(0)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVCL,09H
MOVBL,00H
OKL:
MOVAL,00H
INCBL
OK1:
INCAL
PUSHAX
CMPBL,AL
JZOK
MOVBH,AL
MULBL
MOVDI,OFFSETATAD
CALLOKP
POPAX
JMPOK1
OK:
MOVBH,AL
MULBL
MOVDI,OFFSETATAD1
CALLOKP
POPAX
LOOPOKL
MOVAH,4CH
INT21H
OKPPROC
PUSHAX
PUSHBX
PUSHCX
ADDBX,3030H
MOV[DI],BH
MOV[DI+02H],BL
MOVCX,0AH
MOVDH,00H
OKL2:
CMPAX,CX
JSOK2
ADDCX,0AH
INCDH
JMPOKL2
OK2:
SUBCX,0AH
SUBAX,CX
MOVAH,DH
ADDAX,3030H
MOV[DI+04H],AH
MOV[DI+05H],AL
MOVDX,DI
MOVAH,09H
INT21H
POPCX
POPBX
POPAX
RET
OKPENDP
CODEENDS
ENDSTART
执行程序EXAM2-2·EXE,屏幕上显示结果:
1*1=01
1*2=022*2=04
1*3=032*3=063*3=09
1*4=042*4=083*4=124*4=16
1*5=052*5=103*5=154*5=205*5=25
1*6=062*6=123*6=184*6=245*6=306*6=36
1*7=072*7=143*7=214*7=285*7=356*7=427*7=49
1*8=082*8=163*8=244*8=325*8=406*8=487*8=568*8=64
1*9=092*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81
EXAM2-4
CODESSEGMENT
ASSUMECS:
CODES
START:
XORBX,BX
MOVDL,2AH
MOVCX,9
LOP:
PUSHCX
INCBL
MOVCL,BL
MOVDL,2AH
LOP2:
MOVAH,02H
INT21H
LOOPLOP2
POPCX
MOVDL,0AH
MOVAH,02H
INT21H
MOVDL,0DH
MOVAH,02H
INT21H
CMPBL,9
JZENDPRO
LOOPLOP
ENDPRO:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
执行程序EXAM2-4·EXE,屏幕上显示结果:
*
**
***
****
*****
******
*******
********
*********
EXAM2-5
STACKSEGMENTSTACK
DB1024DUP(0)
STACKENDS
DATASEGMENT
BUFDW0F101H,110DH,52H,100H,456HCOUNT=($-BUF)/2
RESULTDW4DUP(?
),'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACKWDADDPROC
PUSHDI
MOVAX,0
MOVDX,0
MOVDI,OFFSETBUF
NEXT2:
ADDAX,[DI]
JNCNEXT1
INCDX
NEXT1:
ADDDI,2
LOOPNEXT2
POPDI
RET
WDADDENDP
SHOWPROC
PUSHCX
PUSHDI
MOVCX,04H
MOVDI,OFFSETRESULT
MOVBX,AX
ADDDI,07H
BBB:
MOVAX,BX
ANDAX,000FH
CMPAL,0AH
JBQQQ
ADDAL,07H
QQQ:
ADDAL,30H
MOV[DI],AL
DECDI
PUSHCX
MOVCL,04
SHRBX,CL
POPCX
LOOPBBB
MOVCX,0004H
CCC:
MOVAX,DX
ANDAX,000FH
CMPAL,0AH
JBDDD
ADDAL,07H
DDD:
ADDAL,30H
MOV[DI],AL
DECDI
PUSHCX
MOVCL,04H
SHRDX,CL
POPCX
LOOPCCC
POPDI
POPCX
RET
SHOWENDP
BEGIN:
MOVAX,DATA
MOVDS,AX
MOVCX,COUNT
CALLWDADD
CALLSHOW
MOVDX,OFFSETRESULT
MOVAH,09H
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDBEGIN
执行程序EXAM2-5·EXE,屏幕上显示结果:
000107B6