实验六 循环、子程序结构程序设计
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
36E6:001A 88360001 36E6:001E B44C 36E6:0020 CD21 CH,00 36E6:0024 B700 36E6:0026 FEC5 36E6:0028 02FD 36E6:002A 3AE5
MOV [0100],DH MOV
MOV AH,4C INT 21 ;以下为子程序 36E6:0022 B500 MOV BH,00 INC CH ADD BH,CH CMP AH,CH
DS=2CA1 ES=2C91 SS=2CA1 CS=2CA2 IP=0032 NV UP EI PL NZ NA PE NC 2CA2:0032 B44C MOV 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=(1+2+3)+(1+2+3+4)+(1+2+ 3+4+5) 将和值存在数据段偏移量为 0100H 的单元中。 参考程序如下:(程序名: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
36E6:002C 75F8 JNZ 0026 36E6:002E C3 RET 一 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:000C B404 MOV 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 B405 MOV AH,05 一 G=0 1E ;观察第三次求和,
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 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 code ends end start (1)输入程序并检查无误,经汇编、连接后产生正确的可执行文 件 SY6-1.EXE。 (2)执行可执行文件,可以看到执行正常,但是没有任何输出, 可以使用 DEBUG来调试。 jmp next
int 21h
┌─ sum proc near
;入口参数:AH 终值 ;出口参数:BH 累加和 ; CH:计数器
│ go: inc ch add bh,ch cmp ah,ch jnz go code ends
│ ret └─ sum endp
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 B80020 MOV AX,2000 36E6:0003 8ED8 MOV DS,AX 36E6:0005 B403 MOV AH,03 36E6:0007 E81800 CALL 0022 36E6:000A 8AF7 MOV DH,BH 36E6:000C B404 MOV AH,04 36E6:000E E81100 CALL 0022 36E6:0011 02F7 ADD DH,BH 36E6:0013 B405 MOV AH,05 36E6:0015 E80A00 CALL 0022 36E6:0018 02F7 ADD DH,BH
循环、 实验六 循环、子程序结构程序设计
实验目的 1.掌握循环结构程序设计的基本方法。 2.掌握循环程序中重复控制指令的使用。 3.掌握循环结构程序设计的组成部分和基本结构形式。 4.掌握子程序设计的基本方法。 5.掌握子程序中调用和返回指令的使用。 6.掌握子程序设计时参数传递的几种方法。 实验学时 2 学时 实验器材 PC 微机及软件。 实验原理 1.循环结构
DH=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 B44C MOV 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_命令输入任意数。
┌ mov ah,4 │ call sum └ add dh,bh ┌ mov ah,5 │ call sum └ add dh,bh mov var,dh │ │ │ │ │ mov ch,0 mov bh,0
;调用求和子程序
;调用求和子程序
;和存入VAR mov ah,4ch ;求累加和子程序
(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 B8A12C MOV AX,2CA1 2CA2:0003 8ED8 MOV DS,AX 2CA2:0005 B400 MOV AH,00 2CA2:0007 B000 MOV AL,00 2CA2:0009 B700 MOV BH,00 2CA2:000B BE0000 MOV SI,0000 2CA2:000E B90A00 MOV CX,000A 2CA2:0011 803C00 CMP BYTE PTR [SI],00 2CA2:0014 7407 JZ 001D 2CA2:0016 790A JNS 0022 2CA2:0018 FEC0 INC AL 2CA2:001A EB08 JMP 0024 2CA2:001C 90 NOP 2CA2:001D FEC7 INC BH 2CA2:001F EB03 JMP 0024 ―U 2CA2:0021 90 NOP 2CA2:0022 FEC4 INC AH 2CA2:0024 46 INC SI 2CA2:0025 E2EA LOOP 0011 2CA2:0027 88260A00 MOV [000A],AH 2CA2:002B A20B00 MOV [000B],AL 2CA2:002E 883E0C00 MOV [000C],BH 2CA2:0032 B44C MOV AH,4C 2CA2:0034 CD21 INT 21 一 g=0 32 AX=0403 BX=0300 CX=0000 DX=0000 SP=0000 BP=0000 SI=000A DI=0000
(1)循环结构将重复执行循环体中的语句,直到循环条件不成立。 (2)循环结构程序由初始化、循环处理、循环控制和循环结束 4部 分组成,循环控制条件有用计数控制循环和用条件控制循环两种方 式。 (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 ? ;存负数个数 zz db ? ;存 零个数 data ends code segment assume cs:code,ds:data start: mov ax,data
Hale Waihona Puke