2022年2022年汇编实验三分支循环程序设计 .pdf

上传人:C****o 文档编号:33376164 上传时间:2022-08-10 格式:PDF 页数:25 大小:1.40MB
返回 下载 相关 举报
2022年2022年汇编实验三分支循环程序设计 .pdf_第1页
第1页 / 共25页
2022年2022年汇编实验三分支循环程序设计 .pdf_第2页
第2页 / 共25页
点击查看更多>>
资源描述

《2022年2022年汇编实验三分支循环程序设计 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年汇编实验三分支循环程序设计 .pdf(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、福建农林大学金山学院实验报告系:专业:计算机科学与技术年级: 08 姓名:学号:实验课程:汇编语言实验室号: _ 实验设备号:实验时间:指导教师签字:成绩:实验三分支循环程序设计1实验目的和要求1、学习调试程序,查找逻辑错误;2、学习分支语句的编程和调试;3、学习循环语句的编程和调试。2实验环境实验的硬件环境是:IBMPC机及其兼容机实验的软件环境是:操 作 系 统 : DOS 2.0以 上 ; 调 试 程 序 : DEBUG.COM; 文 本编 程 程 序 :EDIT.EXE 、WPS.EXE;宏汇编程序: MASM.EXE(或 ASM .EXE);连接装配程序:LINK .EXE;交叉引用

2、程序: CREF.EXE (可有可无)。3实验内容及实验数据记录1.有 10 个数,统计正数的个数,存放在变量M 中中。经过汇编后,形成 EXE文件。在 DEBUG 中,先用 G 0 命令执行程序,用D命令查看 M单元的内容,会发现结果不正确。用单步执行命令T0,单步执行程序,查找程序中的逻辑错误,注意每一次循环中AL寄存器中值的变化是否正确。 (AL寄存器中存放正数的个数)DSEG SEGMENT MSG DB 4, -2, -6, 0, 5, 67, 8, -3, 5, 6 M DB ? DSEG ENDS CSEG SEGMENT 名师资料总结 - - -精品资料欢迎下载 - - - -

3、 - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 25 页 - - - - - - - - - ASSUME CS: CSEG, DS: DSEG START: MOV AX, DSEG MOV DS, AX MOV CX, 10 MOV AL, 0 LEA SI, MSG L1: MOV BL, SI CMP BL, 0 JBE NEXT INC AL NEXT: INC SI LOOP L1 MOV M, AL MOV AL, 0 MOV AH, 4CH INT 21H CSEG ENDS END START 2.数据段中是

4、一组无符号数,将最小数存放在M单元中。按上题方法查找一处逻辑错误。DSEG SEGMENT MSG DB 13, 15, 7, 25, 24 M DB ? DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG START: MOV AX, DSEG MOV DS, AX MOV CX, 4 MOV AL, MSG MOV SI, OFFSET MSG+1 L1: CMP AL, SI 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,

5、共 25 页 - - - - - - - - - JB NEXT MOV AL, SI NEXT: LOOP L1 MOV M, AL MOV AL, 0 MOV AH, 4CH INT 21H CSEG ENDS END START 3.编程:在首地址为BUF开始的内存单元中存有10 个字节数,求其中 0 的个数,并将结果存于RESULT 中。4.编程:81iiiBAY,Ai ,Bi 为字节型无符号数,分别存于NUM1 和 NUM2 开始的连续存储单元中,结果存于REST 单元中。4算法描述及实验步骤1)编辑代码,编译连接均可通过,亦能正常运行。 DSEG SEGMENT MSG DB 4,

6、 -2, -6, 0, 5, 67, 8, -3, 5, 6 M DB ? DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG START: MOV AX, DSEG MOV DS, AX MOV CX, 10 MOV AL, 0 LEA SI, MSG L1: MOV BL, SI CMP BL, 0 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 25 页 - - - - - - - - - JBE NEXT INC AL

7、 NEXT: INC SI LOOP L1 MOV M, AL MOV AL, 0 MOV AH, 4CH INT 21H CSEG ENDS END START 查看 list文件得知 M单元偏移量为 000A,如图:g命令运行后, d 命令查看 (d1415:000A) 得知 M中值为 09即是正数有 9个,显然是不正确的如图 2 )同一编辑如下代码进行编译连接运行均正常; DSEG SEGMENT MSG DB 13, 15, 7, 25, 24 M DB ? DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG START: MOV AX,

8、DSEG 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 25 页 - - - - - - - - - MOV DS, AX MOV CX, 4 MOV AL, MSG MOV SI, OFFSET MSG+1 L1: CMP AL, SI JB NEXT MOV AL, SI NEXT: LOOP L1 MOV M, AL MOV AL, 0 MOV AH, 4CH INT 21H CSEG ENDS END START 由指令 MSG DB 13, 15, 7, 25

9、, 24 M DB ? 可计算 0005 为 M的的偏移量。如图, g命令运行后, d命令查看 (d1415:0005) 知 M中值为 0DH=13 即最小的数是13,显然不正确。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 25 页 - - - - - - - - - 3)3.1 据题意有如下要求a 定义:首地址 BUF ,结果 RESULT b 数据: 10 个字节数c 实现:查找 0 的个数3.2 分析满足要求满足 a&b有: BUF DB 4, -2, -6,

10、0, 5, 0, 8, -3, 5, 0 RESULT DB ? 实现 c:MOV CX,10 ;控制循环次数MOV AL,0 ;AL用于存放临时个数,清零CMMP: CMP SI,0 ;比较 SI 所指与 0 JNE NEXT ;SI 所指不等 0 跳入 NEXT 标号所指指令INC AL ;SI 所指等于 0,AL加 1 NEXT: INC SI ;指针下一指向下一个即将比较的数LOOP CMMP ;循环比较直至 CX=0 ;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页

11、,共 25 页 - - - - - - - - - 3.3 流程图:3.4 最初程序代码DATA SEGMENT ; 数据段 DATA 开始BUF DB 4,-2,-6,0,5,0,8,-3,5,0;分配字节空间首地址BUF RESULT DB ? ; 存放结果MOV CX,10;CX-10 MOV AL,0;AL-0 CMP SI,0 ZF=0;SI!=0 INC AL;AL+1 JNE NEXT INC SI;SI+1 LOOP CMMP 开始结束Y N 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - -

12、- - - - - 第 7 页,共 25 页 - - - - - - - - - DATA ENDS ; 数据段 DATA 结束CODE SEGMENT ; 代码段 CODE 开始ASSUME DS:DATA,CS:CODE ;DATA,CODE 对应挂钩 DS ,CS START: MOV AX,DATA ; 程序入口MOV DS,AX ; 数据段装入MOV CX,10 ; 初始循环次数MOV AL,0 ;AL 用于存放 0 的个数,初始为0 CMMP: CMP SI,0 ; 当前指针指向的数据与0 比较JNE NEXT ; 所指数据不等于 0 跳至 NEXT 标号处指令INC AL ; 相

13、等则 AL加 1 NEXT: INC SI ;NEXT入口,指针加 1 下移指向下一个数LOOP CMMP ; 进入循环 CMMP,继续比较当前数MOV RESULT,AL ; 将结果传送至 RESULT 中MOV AL,0 ;AL 清零MOV AH,4CH INT 21H ; 调用 dos 返回 dos 界面功能CODE ENDS ; 代码段 CODE 开始END START ; 程序结束4)4.1 据题意有如下要求a 存在两组数据每组 8 个,均为无符号字节数b 每组数据分别以 NUM1 、NUM2 为首地址,结果存放在REST 中c 实现两组数据两两相乘后共8 组数据,最终求总和4.2

14、分析处理满足要求满足 a&b: NUM1 DB 1,2,3,4,5,6,7,8 NUM2 DB 8,7,6,5,4,3,2,1 REST DW ? (由于结果可能很大故而开辟word 空间)实现 c:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 25 页 - - - - - - - - - 首先是进行两两相乘,可以分别用一指针SI,DI 同时自上而下取数进行相乘并将结果临时存放于AX ,其次将下一次 (当前) 结果与 AX中上一次结果相加,通过循环便可达到实现要求c 中

15、的功能,由于第一次结果的存放不再循环之内,可以将其单独列出,这样难免显得程序冗长,拖沓。因此可以优化其,将 AX先初始化为 0,把第一次相乘也列入循环中。问题便可以很好得到解决。如图:1 AX 1*8+AX 8 2 7 3 6 4 5 5 4 ,这里有一个问题就是简单的通过SI 和 DI来进行相乘时忽略了一个问题就是两个操作数不能同时为内存单元的数,因此必须借助于寄存器临时存储其中一个数。而 AL在每一次乘法操作时均被作为隐含操作数而用到因而可直接由AL来存放其中一个数,而存放和的AX这里应由其他寄存器暂代之如BX 。所以优化上图后如下:1 BX AX+BX AX AL*DI 8 2 7 3

16、6 ,4.3 根据以上设想设计流程图: (loop 的错误理解导致了这里循环的控制上有问题,其中的注 (1) 应该放在注 (2) 之后 loop 之前)MOV CX,8;CX-8 开始SI DI AX BX SI DI AL SI CX=8- CX=8- 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 25 页 - - - - - - - - - 注(1) 注(2) 4.4 最初程序代码 ( 错误) MOV AX,0;AX-0 MOV BX,0;BX-0 ADD BX,A

17、X;BX-AX+BX MOV AL,SI;AL-SI MUL DI;AX-DI*AL INC SI INC DI LEA SI,NUM1 LEA DI,NUM2 DEC CX CX=0 N Y 结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 25 页 - - - - - - - - - DATA SEGMENT ; 数据段 DATA 开始NUM1 DB 1,2,3,4,5,6,7,8;第一组数分配字节空间首地址NUM1 NUM2 DB 8,7,6,5,4,3,2,1

18、;第二组数分配字节空间首地址NUM2 REST DW ? ; 存放结果DATA ENDS ; 数据段 DATA 结束CODE SEGMENT ; 代码段 CODE 开始ASSUME DS:DATA,CS:CODE ;DATA,CODE 对应挂钩 DS ,CS START: MOV AX,DATA ; 程序入口MOV DS,AX ; 数据段装入 MOV AX,0 ;AX 清零MOV BX,0 ;BX 清零LEA SI,NUM1 ; 将 NUM1 首地址传送给 SI LEA DI,NUM2 ; 将 NUM2 首地址传送给 DI NEXT: ADD BX,AX ;BX0,AL加 1 名师资料总结 -

19、 - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 25 页 - - - - - - - - - NEXT: INC SI;NEXT 入口, si指针下移指向即将比较的数LOOP L1 ; 循环跳至标号 L1 所指指令直至 CX=0 MOV M,AL;将结果传送给 M MOV AL,0;AL 清零MOV AH,4CH;调用 DOS 返回 dos 界面功能INT 21H CSEG ENDS; 代码段结束END START ; 程序结束2)重复部分注释略,同上DSEG SEGMENT MSG

20、DB 13,15,7,25,24 M DB ? DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG MOV DS,AX MOV CX,4 ; 初始 CX值为 LOOP 循环次数 4 MOV AL,MSG; 将数据段第一个数传送给AL MOV SI,OFFSET MSG+1; 初始指针指向数据段第二个数L1: CMP AL,SI;比较 AL与指针 SI 所指内存单元数据JB NEXT; 当 AL小于SI 所指内存单元数据跳至NEXT 标号处指令MOV AL,SI;当 AL大于SI 所指内存单元数据改变AL值为SI 所指

21、NEXT: INC SI;指针下移LOOP L1; 循环跳至 L1标号处指令直至CX为 0 MOV M,AL MOV AL,0 MOV AH,4CH INT 21H 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 25 页 - - - - - - - - - CSEG ENDS END START 3) 最终代码DATA SEGMENT ; 数据段 DATA 开始BUF DB 4,-2,-6,0,5,0,8,-3,5,0;分配字节空间首地址BUF RESULT DB ?

22、 ; 存放结果DATA ENDS ; 数据段 DATA 结束CODE SEGMENT ; 代码段 CODE 开始ASSUME DS:DATA,CS:CODE ;DATA,CODE 对应挂钩 DS ,CS START: MOV AX,DATA ; 程序入口MOV DS,AX ; 数据段装入MOV CX,10 ; 初始循环次数MOV AL,0 ;AL 用于存放 0 的个数,初始为0 CMMP: CMP BYTE PTR SI,0;当前指针指向的数据与0 比较JNE NEXT ; 所指数据不等于 0 跳至 NEXT 标号处指令INC AL ; 相等则 AL加 1 NEXT: INC SI ;NEXT

23、入口,指针加 1 下移指向下一个数LOOP CMMP ; 进入循环 CMMP,继续比较当前数MOV RESULT,AL ; 将结果传送至 RESULT 中MOV AL,0 ;AL 清零MOV AH,4CH INT 21H ; 调用 dos 返回 dos 界面功能CODE ENDS ; 代码段 CODE 开始END START ; 程序结束4)最终正确代码DATA SEGMENT ; 数据段 DATA 开始NUM1 DB 1,2,3,4,5,6,7,8;第一组数分配字节空间首地址NUM1 NUM2 DB 8,7,6,5,4,3,2,1;第二组数分配字节空间首地址NUM2 REST DW ? ;

24、存放结果名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 25 页 - - - - - - - - - DATA ENDS ; 数据段 DATA 结束CODE SEGMENT ; 代码段 CODE 开始ASSUME DS:DATA,CS:CODE ;DATA,CODE 对应 DS ,CS START: MOV AX,DATA ; 程序入口MOV DS,AX ; 数据段装入MOV CX,8 ; 初始化循环次数为8 MOV AX,0 ;AX 清零MOV BX,0 ;BX 清零

25、LEA SI,NUM1 ; 将 NUM1 首地址传送给 SI LEA DI,NUM2 ; 将 NUM2 首地址传送给 DI NEXT: MOV AL,SI ; 将SI 所指单元数据传送给AL MUL BYTE PTR DI ;DI所指与 AL相乘结果存入 AX ADD BX,AX ;BXAX+BX INC SI ; 指针 SI 下移,指向 NUM1 下一个数INC DI ; 指针 DI 下移,指向 NUM2 下一个数LOOP NEXT ; 循环跳至 NEXT 标号处直至 CX自减至 0 MOV REST,BX ; 将结果传送给 REST MOV AH,4CH INT 21H ; 调用 dos 返回 dos 界面功能CODE ENDS ; 代码段 CODE 开始END START ; 程序结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 25 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁