当前位置:文档之家› 福建农林大学_汇编实验三_分支循环程序设计详解

福建农林大学_汇编实验三_分支循环程序设计详解

福建农林大学计算机与信息学院实验报告
系:计算机专业:计算机科学与技术年级:2014
姓名学号:实验室号__ 计算机号
实验时间:2016-10-29指导教师签字:刘庆连成绩:
实验三分支循环程序设计
1.实验目的
(1)学习调试程序,查找逻辑错误;
(2)学习分支语句的编程和调试;
(3)学习循环语句的编程和调试。

2.实验内容
1)有10个数,统计正数的个数,存放在变量M中中。

经过汇编后,形成EXE文件。

在DEBUG中,先用G=0命令执行程序,用D命令查看M单元的内容,会发现结果不正确。

用单步执行命令T=0,单步执行程序,查找程序中的逻辑错误,注意每一次循环中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
MOV 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, AL
MOV AL, 0
MOV AH, 4CH
INT 21H
CSEG ENDS
END START
3)编程:在首地址为BUF开始的内存单元中存有10个字节数,求其中0的个数,并将结果存于RESULT中。

4)编程:∑
-
=*
=
8
1
i
i i
B A
Y,Ai,Bi为字节型无符号数,分别存于NUM1和NUM2开始的连续存储单元中,结果存于REST单元中。

4.算法描述及实验步骤
实验一:输入题目代码->保存->运行->调试->观察结果(在Masm for windows在完成)
实验二: 根据代码实现功能从MSG中输入五个数,AL取第一个数,SI取第二个数,比较AL,SI所取到的数的大小,若AL<SI,SI取第三个数,再和AL比较;若AL>SI,AL=[SI]; 将AL的内容输出,则得出输出五个数中的最小数,步骤同实验一
实验三:依题可编写如下代码指令
实验四:依题可编写如下代码指令
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, 5, 6 0的个数是1,实验结果与预期一致
【实验四】结果如下图
分析:Ai:10,45和Bi:8,2的∑
-
=*
=
8
1
i
i i
B A
Y结果是10*8+45*2=170转化为16进制是AA,有上图可知实验结果和预期一致!
7. 总结
通过此次实验,能够通过简单调试查找出错误,分步执行发现逻辑错误并改正,掌握并理解了分支语句的运用和循环语句的使用,纸上得来终觉浅,绝知此事要躬行,多多手动敲代码才能理解并掌握汇编的实质!!
附录:
【实验三代码】
DSEG SEGMENT
BUF DB4, -2, -6, 0, 5, 67, 8, -3, 5, 6
RESULT 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, 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 ENDS
CODE 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 PTR[DI]
ADD BX,AX
INC SI
INC DI
LOOP L1
MOV REST,BX
MOV AH,4CH
INT 21H
CODE ENDS END START。

相关主题