当前位置:文档之家› 汇编语言-实验二 循环与子程序程序设计

汇编语言-实验二 循环与子程序程序设计

实验二循环与子程序程序设计一、实验目的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)编写一个递归子程序,计算指数函数X n的值,其中X,n从键盘输入。

三、源程序EXAM2-1DA TA SEGMENTBUF DB’S=1+2×3+3×4+4×5+…+N(N+1)+…=’,’$’RES DW 4 DUP(0),’$’DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DA TAMOV DS,AXMOV DX, OFFSET BUFMOV AH,09HINT 21HMOV DX, 1MOV BL, 2NEXT:MOV AL,BLINC BLMUL BLADD DX,AXCMP AX,200JNA NEXTMOV CX,0004HMOV DI,OFFSET RESADD DI,03HNEXT1:MOV AX, DXAND AX, 000FHCMP AL,0AHJB NEXT2ADD AL,07NEXT2:ADD AL, 30HMOV [DI],ALDEC DIPUSH CXMOV CL,04SHR DX,CLPOP CXLOOP NEXT1MOV DX,OFFSET RESMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START执行程序EXAM2-1·EXE,屏幕上显示结果:S=1+2×3+3×4+4×5+...+N(N+1)+ (045)EXAM2-2ORG 2000H2000 BF0030 MOV DI, 30002003 B164 MOV CL, 642005 C60500 MOV BYTE PTR[DI],02008 47 INC DI2009 FEC9 DEC CL200B 75F8 JNZ 2005200D F4 HLTEXAM2-3DATA SEGMENTA TAD DB ?, 2AH, ?, 3DH, ?, ?, 20H, '$'A TAD1 DB ?, 2AH, ?, 3DH, ?, ?, 0DH, 0AH, '$' DA TA ENDSSTACK SEGMENT STACKDB 20H DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DA TASTART:MOV AX, DA TAMOV DS, AXMOV CL, 09HMOV BL, 00HOKL:MOV AL, 00HINC BLOK1:INC ALPUSH AXCMP BL, ALJZ OKMOV BH, ALMUL BLMOV DI, OFFSET ATADCALL OKPPOP AXJMP OK1OK:MOV BH, ALMUL BLMOV DI, OFFSET ATAD1CALL OKPPOP AXLOOP OKLMOV AH, 4CHINT 21HOKP PROCPUSH AXPUSH BXPUSH CXADD BX, 3030HMOV [DI], BHMOV [DI + 02H], BLMOV CX, 0AHMOV DH, 00HOKL2:CMP AX, CXJS OK2ADD CX, 0AHINC DHJMP OKL2OK2:SUB CX, 0AHSUB AX, CXMOV AH, DHADD AX, 3030HMOV [DI + 04H], AHMOV [DI + 05H], ALMOV DX, DIMOV AH, 09HINT 21HPOP CXPOP BXPOP AXRETOKP ENDPCODE ENDSEND START执行程序EXAM2-2·EXE,屏幕上显示结果:1*1=011*2=02 2*2=041*3=03 2*3=06 3*3=091*4=04 2*4=08 3*4=12 4*4=161*5=05 2*5=10 3*5=15 4*5=20 5*5=251*6=06 2*6=12 3*6=18 4*6=24 5*6=30 6*6=361*7=07 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=491*8=08 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=641*9=09 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81EXAM2-4CODES SEGMENTASSUME CS:CODESSTART:XOR BX,BXMOV DL,2AHMOV CX,9LOP: PUSH CXINC BLMOV CL,BLMOV DL,2AHLOP2: MOV AH,02HINT 21HLOOP LOP2POP CXMOV DL,0AHMOV AH,02HINT 21HMOV DL,0DHMOV AH,02HINT 21HCMP BL,9JZ ENDPROLOOP LOPENDPRO:MOV AH,4CHINT 21HCODES ENDSEND START执行程序EXAM2-4·EXE,屏幕上显示结果:*********************************************EXAM2-5STACK SEGMENT STACKDB 1024 DUP(0)STACK ENDSDA TA SEGMENTBUF DW 0F101H,110DH,52H,100H,456H COUNT =($-BUF)/2RESULT DW 4 DUP(?),'$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK WDADD PROCPUSH DIMOV AX, 0MOV DX, 0MOV DI, OFFSET BUFNEXT2: ADD AX, [DI]JNC NEXT1INC DXNEXT1: ADD DI, 2LOOP NEXT2POP DIRETWDADD ENDPSHOW PROCPUSH CXPUSH DIMOV CX, 04HMOV DI, OFFSET RESULTMOV BX, AXADD DI, 07HBBB: MOV AX, BXAND AX, 000FHCMP AL, 0AHJB QQQADD AL, 07HQQQ: ADD AL, 30HMOV [DI], ALDEC DIPUSH CXMOV CL, 04SHR BX, CLPOP CXLOOP BBBMOV CX, 0004HCCC: MOV AX, DXAND AX, 000FHCMP AL, 0AHJB DDDADD AL, 07HDDD: ADD AL, 30HMOV [DI], ALDEC DIPUSH CXMOV CL, 04HSHR DX, CLPOP CXLOOP CCCPOP DIPOP CXRETSHOW ENDPBEGIN: MOV AX, DATAMOV DS, AXMOV CX, COUNTCALL WDADDCALL SHOWMOV DX, OFFSET RESULTMOV AH, 09HINT 21HMOV AH, 4CHINT 21HCODE ENDSEND BEGIN执行程序EXAM2-5·EXE,屏幕上显示结果:000107B6。

相关主题