《实验六循环、子程序结构程序设计.ppt》由会员分享,可在线阅读,更多相关《实验六循环、子程序结构程序设计.ppt(9页珍藏版)》请在优知文库上搜索。
1、实验六实验六 循环、子程序结构程序设计循环、子程序结构程序设计 实验目的实验目的 1掌握循环结构程序设计的基本方法。 2掌握循环程序中重复控制指令的使用。 3掌握循环结构程序设计的组成部分和基本结构形式。 4掌握子程序设计的基本方法。 5掌握子程序中调用和返回指令的使用。 6掌握子程序设计时参数传递的几种方法。 实验学时实验学时 2 学时 实验器材实验器材 PC 微机及软件。 实验原理实验原理 1循环结构 (1)循环结构将重复执行循环体中的语句,直到循环条件不成立。 (2)循环结构程序由初始化、循环处理、循环控制和循环结束 4部分组成,循环控制条件有用计数控制循环和用条件控制循环两种方式。 (
2、3)循环结构程序的基本结构形式有“先执行,后判断”和“先判断,后执行”两种。 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 ?
3、 ;存负数个数 zz db ? ;存 零个数 data ends code segment assume cs: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
4、go mov xx,ah;将个数存入存储单元 mov yy,al mov zz,bh mov ah,4ch int 21h 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;反汇编
5、 2CA2:0000 B8A12CMOV AX,2CA1 2CA2:0003 8ED8MOV DS,AX 2CA2:0005 B400MOV 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 00
6、24 2CA2:001C 90NOP 2CA2:001D FEC7INC BH 2CA2:001F EB03JMP 0024 U 2CA2:0021 90 NOP 2CA2:0022 FEC4INC AH 2CA2:0024 46INC SI 2CA2:0025 E2EALOOP 0011 2CA2:0027 88260A00MOV 000A,AH 2CA2:002B A20B00 MOV 000B,AL 2CA2:002E 883E0C00MOV 000C,BH 2CA2:0032 B44CMOV AH,4C 2CA2:0034 CD21INT 21 一 g=0 32 AX=0403 BX=
7、0300 CX=0000 DX=0000 SP=0000 BP=0000 SI=000A DI=0000 DS=2CA1 ES=2C91 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 的单元中。 参考程序如下:
8、(程序名:SY6-2.M) data segment org 0100h var db ?;VAR 存放和值 data ends code segment 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
9、ch,0;入口参数:AH 终值 mov bh,0;出口参数:BH 累加和 go: inc ch add bh,ch; CH:计数器 cmp ah,ch jnz 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-
10、2.EXE 一 U 00 2E 36E6:0000 B80020MOV AX,2000 36E6:0003 8ED8MOV DS,AX 36E6:0005 B403MOV 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
11、88360001MOV 0100,DH 36E6:001E B44CMOV AH,4C 36E6:0020 CD21INT 21 ;以下为子程序 36E6:0022 B500MOV 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
12、SI=0000 DI=0000 DS=2000 ES=36D6 SS=36E6 CS=36E6 IP=000C NV UP EI PL ZR NA PE NC 36E6: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=
13、1FH AX=0500 BX=0F00 CX=052F DX=1F00 SP=0000 BP=0000 SI=0000 DI=0000 DS=2000 ES=36D6 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_命令输入任意数。