《实验六循环、子程序结构程序设计.ppt》由会员分享,可在线阅读,更多相关《实验六循环、子程序结构程序设计.ppt(9页珍藏版)》请在课桌文档上搜索。
1、实验六 循环、子程序结构程序设计,实验目的 1掌握循环结构程序设计的基本方法。2掌握循环程序中重复控制指令的使用。3掌握循环结构程序设计的组成部分和基本结构形式。4掌握子程序设计的基本方法。5掌握子程序中调用和返回指令的使用。6掌握子程序设计时参数传递的几种方法。实验学时 2 学时 实验器材 PC 微机及软件。实验原理 1循环结构,(1)循环结构将重复执行循环体中的语句,直到循环条件不成立。(2)循环结构程序由初始化、循环处理、循环控制和循环结束 4部分组成,循环控制条件有用计数控制循环和用条件控制循环两种方式。(3)循环结构程序的基本结构形式有“先执行,后判断”和“先判断,后执行”两种。2子
2、程序:子程序又称过程,用过程定义伪指令 PROC/ENDP 进行定义,并集中存放在存储区的特定区域构成子程序库,需要时,用调用指令 CALL调用。子程序执行完毕,应该返回到调用指令的下一条指令继续执行。实验内容与步骤 1在数据段中有如下数据区,2,-3,0,5,-7,0,0,8,6,-9,统计该数据区中正数,0,负数的个数。参考程序如下:(程序名:SY6-1.ASM)data segment var db 2,-3,0,5,-7,0,0,8,6,-9 xx db?;存正数个数 yy db?;存负数个数 zz db?;存 零个数 data ends code segment assume cs:
3、code,ds:data start:mov ax,data,mov ds,ax mov ah,0;AH 存正数个数 mov al,0;AL 存负数个数 mov bh,0;BH 存零个数 mov si,offset var mov cx,xx-var;CX 数据个数 go:cmp byte ptr si,0 jz zero jns plus inc al jmp next zero:inc bh jmp next plus:inc ah next:inc si loop go mov xx,ah;将个数存入存储单元 mov yy,al mov zz,bh mov ah,4ch int 21h
4、code ends end start(1)输入程序并检查无误,经汇编、连接后产生正确的可执行文件 SY6-1.EXE。(2)执行可执行文件,可以看到执行正常,但是没有任何输出,可以使用 DEBUG来调试。,(3)用 DEBUG 的 U CS:0000 查看 MOV AX,XXXX(DATA)语句,即得到数据段段地址 DS=XXXX。(4)用 G 命令执行,10 个数据后存个数,分别为 4,3,3,调试过程如下:C:DEBUG SY6-1.EXE 一 U;反汇编 2CA2:0000 B8A12CMOV AX,2CA1 2CA2:0003 8ED8MOV DS,AX 2CA2:0005 B400
5、MOV AH,00 2CA2:0007 B000MOV AL,00 2CA2:0009 B700MOV BH,00 2CA2:000B BE0000MOV SI,0000 2CA2:000E B90A00MOV CX,000A 2CA2:0011 803C00CMP BYTE PTR SI,002CA2:0014 7407JZ001D 2CA2:0016 790AJNS 0022 2CA2:0018 FEC0INC AL 2CA2:001A EB08JMP 0024 2CA2:001C 90NOP 2CA2:001D FEC7INC BH 2CA2:001F EB03JMP 0024 U 2C
6、A2:0021 90NOP 2CA2:0022 FEC4INC AH 2CA2:0024 46INC SI 2CA2:0025 E2EALOOP 0011 2CA2:0027 88260A00MOV 000A,AH 2CA2:002B A20B00MOV 000B,AL 2CA2:002E 883E0C00MOV 000C,BH 2CA2:0032 B44CMOV AH,4C 2CA2:0034 CD21INT 21 一 g=0 32 AX=0403 BX=0300 CX=0000 DX=0000 SP=0000 BP=0000 SI=000A DI=0000,DS=2CA1 ES=2C91
7、SS=2CA1 CS=2CA2 IP=0032 NV UP EI PL NZ NA PE NC 2CA2:0032 B44CMOV AH,4C 一 d 0000 000f;10 个数据后存个数,分别为 4,3,3 2CA1:0000 02 FD 00 05 F9 00 00 08-06 F7 04 03 03 00 00 00.2编程序求下列和值:S=(123)(1234)(12345)将和值存在数据段偏移量为 0100H 的单元中。参考程序如下:(程序名:SY6-2.M)data segment org 0100h var db?;VAR 存放和值 data ends code segmen
8、t assume cs:code,ds:data start:mov ax,data mov ds,ax mov ah,3;调用求和子程序 call sum mov dh,bh,mov ah,4;调用求和子程序 call sum add dh,bh mov ah,5;调用求和子程序 call sum add dh,bh mov var,dh;和存入VAR mov ah,4ch int 21h sum proc near;求累加和子程序 mov ch,0;入口参数:AH 终值 mov bh,0;出口参数:BH 累加和 go:inc ch add bh,ch;CH:计数器 cmp ah,ch jn
9、z go ret sum endp code ends,end start(1)输入程序并检查无误,经汇编、连接后产生正确的可执行文件 SY6-2.ASM。(2)执行可执行文件,可以看到执行正常,但是没有任何输出,可以使用 DEBUG来调试。(3)用 DEBUG 的 U CS:0000 查看 MOV AX,XXXX(DATA)语句,即得到数据段段地址 DS=XXXX。(4)用 G 命令执行,调试过程如下:C:DEBUG SY6-2.EXE 一 U 00 2E 36E6:0000 B80020MOV AX,2000 36E6:0003 8ED8MOV DS,AX 36E6:0005 B403MO
10、V AH,03 36E6:0007 E81800CALL 0022 36E6:000A 8AF7MOV DH,BH 36E6:000C B404MOV AH,04 36E6:000E E81100CALL 0022 36E6:0011 02F7ADD DH,BH 36E6:0013 B405MOV AH,05 36E6:0015 E80A00CALL 0022 36E6:0018 02F7ADD DH,BH,36E6:001A 88360001MOV 0100,DH 36E6:001E B44CMOV AH,4C 36E6:0020 CD21INT 21;以下为子程序 36E6:0022 B5
11、00MOV CH,00 36E6:0024 B700MOV BH,00 36E6:0026 FEC5INC CH 36E6:0028 02FDADD BH,CH 36E6:002A 3AE5CMP AH,CH 36E6:002C 75F8JNZ 0026 36E6:002E C3RET 一 G=0 C;观察第一次求和,DH=06H AX=0300 BX=0600 CX=032F DX=0600 SP=0000 BP=0000 SI=0000 DI=0000 DS=2000 ES=36D6 SS=36E6 CS=36E6 IP=000C NV UP EI PL ZR NA PE NC 36E6:
12、000C B404MOV AH,04 一 G=0 13;观察第二次求和,DH=10H AX=0400 BX=0A00 CX=042F DX=1000 SP=0000 BP=0000 SI=0000 DI=0000 DS=2000 ES=36D6 SS=36E6 CS=36E6 IP=0013 NV UP EI PL NZ AC PO NC 36E6:0013 B405MOV AH,05 一 G=0 1E;观察第三次求和,,DH=1FH AX=0500 BX=0F00 CX=052F DX=1F00 SP=0000 BP=0000 SI=0000 DI=0000 DS=2000 ES=36D6
13、SS=36E6 CS=36E6 IP=001E NV UP EI PL NZ NA PO NC 36E6:001E B44CMOV AH,4C 一 d 0100 0101;观察存储单元 2000:0100 1F 实验注意事项 1程序的执行可用DEBUG 的G 命令,根据 U命令显示的地址,使用 G 命令执行到具体地址,可以用 G=地址地址地址,也可用T 命令单步跟踪执行。2当循环体中处理部分也是循环结构时,就构成循环套循环的双重循环,依次类推可构成多重循环。实验与思考1编程序计算_S=1+2+3+.+10,并把和放在_BL中。(用_LOOP_指令)2从_3000H_内存单元开始的_100_个字节存储单元全部清0。3总结计数控制循环程序的设计方法。4对内存单元_3000H_开始的_100_个存储单元用_E_命令输入任意数。,