1、福建农林大学汇编实验三分支循环程序设计详解福建农林大学计算机与信息学院实验报告系: 计算机 专业: 计算机科学与技术 年级: 2014 姓名 学号: 实验室号_ 计算机号 实验时间:2016-10-29指导教师签字: 刘庆连 成绩: 实验三 分支循环程序设计 1.实验目的 (1)学习调试程序,查找逻辑错误; (2)学习分支语句的编程和调试; (3)学习循环语句的编程和调试。 2.实验内容 1)有10个数,统计正数的个数,存放在变量M中中。经过汇编后,形成EXE文件。在DEBUG中,先用G0命令执行程序,用D命令查看M单元的内容,会发现结果不正确。用单步执行命令T0,单步执行程序,查找程序中的逻
2、辑错误,注意每一次循环中AL寄存器中值的变化是否正确?(AL寄存器中存放正数的个数) DSEG SEGMENT MSG DB 4, -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 JBE NEXT INC AL NEXT: INC SI LOOP L1 MOV M, AL MOV AL, 0 MO
3、V AH, 4CH INT 21H CSEG ENDS END START 2)数据段中是一组无符号数,将最小数存放在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 JB NEXT MOV AL, SI NEXT: LOOP L1 MOV M
4、, AL MOV AL, 0 MOV AH, 4CH INT 21H CSEG ENDS END START 3)编程:在首地址为BUF开始的内存单元中存有10个字节数,求其中0的个数,并将结果存于RESULT中。 4)编程:,Ai,Bi为字节型无符号数,分别存于NUM1和NUM2开始的连续存储单元中,结果存于REST单元中。4算法描述及实验步骤实验一:输入题目代码-保存-运行-调试-观察结果(在Masm for windows在完成)实验二: 根据代码实现功能从MSG中输入五个数,AL取第一个数,SI取第二个数,比较AL,SI所取到的数的大小,若ALSI,AL=SI; 将AL的内容输出,则得
5、出输出五个数中的最小数,步骤同实验一实验三:依题可编写如下代码指令实验四:依题可编写如下代码指令5调试过程无6. 实验结果【实验一】分步执行结果如下分析:当将第二个数-2放入放入BL的时候发现数值是FE,转化为十进制数是254,并非是-2的十六进制,原因是JBE命令是用于无符号数的,指令说明如下,要实现有符号数的比较要使用JLE指令 JBE指令说明 JLE指令说明 【实验二】分步执行结果如下分析:进入死循环,原因是两个数比较后,SI没有加1,一直停留在13和15的比较中,修改加入INC SI即可,如下图【实验三】执行结果如下分析,BUL中4, -2, -6, 0, 5, 67, 8, -3,
6、5, 6 0的个数是1,实验结果与预期一致【实验四】结果如下图分析:Ai:10,45和Bi:8,2的结果是 10*8+45*2=170转化为16进制是AA,有上图可知实验结果和预期一致!7. 总结通过此次实验,能够通过简单调试查找出错误,分步执行发现逻辑错误并改正,掌握并理解了分支语句的运用和循环语句的使用,纸上得来终觉浅,绝知此事要躬行,多多手动敲代码才能理解并掌握汇编的实质!附录:【实验三代码】DSEG SEGMENT BUF DB 4, -2, -6, 0, 5, 67, 8, -3, 5, 6 RESULT DB ? DSEG ENDS CSEG SEGMENT ASSUME CS:
7、CSEG, DS: DSEG START: MOV AX, DSEG MOV DS, AX MOV CX, 10 MOV AL, 0 LEA SI, BUF L1: MOV BL, SI CMP BL, 0 JNE NEXT INC AL NEXT: INC SI LOOP L1 MOV RESULT, AL MOV AL, 0 MOV AH, 4CH INT 21H CSEG ENDS END START【实验四代码】DATA SEGMENT NUM1 DB 10,45 NUM2 DB 8,2 REST DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI,NUM1 LEA DI,NUM2 MOV CX,10 MOV BX,0 L1: MOV AL,SI MUL BYTE PTRDI ADD BX,AX INC SI INC DI LOOP L1 MOV REST,BX MOV AH,4CH INT 21HCODE ENDSEND START
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1