实验1.docx
《实验1.docx》由会员分享,可在线阅读,更多相关《实验1.docx(11页珍藏版)》请在冰豆网上搜索。
实验1
成绩
辽宁工程技术大学上机实验报告
课程名称
计算机硬件基础
实验题目
综合程序设计
(二)
院系
软件学院
专业
软件工程
班级
姓名
学号
实验日期
2014.11.11
实验
目的
1.熟练掌握宏汇编程序设计的思想。
2.掌握顺序程序设计的思想及方法。
3.熟练掌握分支程序的结构。
4.掌握分支程序设计的思想、方法及上机调试过程。
实验
准备
1.8086/8088宏汇编指令及伪指令
2.汇编语言程序设计的步骤
(1)分析问题
(2)确定算法
(3)绘制程序框图
(4)分配存储空间和工作单元
(5)编写汇编语言源程序
(6)静态检查
(7)上机调试
实验
进度
本次共有3个练习,完成3个。
实验
内容
实验
内容
(续)
【练习1】编写一个程序,计算表达式(XY-Z)/X的值,其中:
X、Y、Z均为16位带符号数,存放在数据段中,要求将表达式的计算结果存放在数据段中的RESULT起始的单元中。
(1)实现方法
数据段中定义了三个常量,根据题目要求按照顺序对其进行运算
(2)程序代码
DSEGSEGMENT
XDW0010H
YDW0020H
ZDW0030H
RESULTDW?
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
MOVDS,AX
MOVAX,X
IMULY
MOVCX,AX
MOVBX,DX
MOVAX,Z
CWD
SUBCX,AX
SBBBX,DX
IDIVX
MOVRESULT,AX
MOVAH,4CH
int21h
CSEGENDS
ENDSTART
【练习2】设数据区中NUM1、NUM2字节单元中存放的是两个无符号数,试编写程序完成下述功能之一的操作:
(1)如果两个数均为偶数,则两个数分别加1后送入DA1、DA2字节单元中;
(2)如果一个为偶数,一个为奇数,则奇数送入DA1,偶数送入DA2字节单元中;
(1)实现方法
(2)程序代码
DSEGSEGMENT
NUM1DW0010H
NUM2DW0021H
DA1DW?
DA2DW?
DSEGENDS
CSEGSEGMENT
ASSUMEDS:
DSEG,CS:
CSEG
START:
MOVAX,DSEG
MOVDS,AX
MOVAX,NUM1
MOVBL,2
DIVBL
MOVBL,AH
MOVAX,NUM2
MOVDL,2
DIVDL
MOVDL,AH
MOVCH,BL
MOVCL,DL
ADDBL,DL
CMPBL,1
JABB
CMPBL,1
JACC
CMPCH,0
JAAA
MOVAX,NUM2
MOVDA1,AX
MOVAX,NUM1
MOVDA2,AX
JMPxx
AA:
MOVAX,NUM1
MOVDA1,AX
MOVAX,NUM2
MOVDA2,AX
JMPxx
BB:
MOVAX,NUM1
INCAX
MOVDA1,AX
MOVAX,NUM2
INCAX
MOVDA2,AX
JMPxx
CC:
MOVAX,NUM1
MOVDA1,AX
MOVAX,NUM2
MOVDA2,AX
JMPxx
XX:
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
【练习3】
在内存BUFFER单元中存有10个8位数,试编程找出其中的最大值及最
小值,并放在指定的存储单元MAX和MIN中。
(1)实现方法
通过设置两个对照参数max,min,让每个数都和它们比较,每一次比较,较大的值都赋给Max,直到比较完成便可得出最大值,同理可得出最小值
(2)程序代码
DSEGSEGMENT
BUFFERDB01h,02h,03h,70h,81h,06h,07h,08h,09h,11h
MAXDB05H
MINDB90H
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
MOVDS,AX
MOVCX,10
MOVAX,OFFSETBUFFER
MOVSI,AX
J1:
MOVAL,[SI]
CMPAL,MAX
JLJ2
MOVMAX,AL
J2:
CMPAL,MIN
JGJ3
MOVMIN,AL
J3:
INCSI
DECCX
CMPCX,0
JNZJ1
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
实验
分析
实验
分析
(续)
日
【练习1】
(1)该源程序取名2.ASM,通过汇编、连接后生成可执行文件2.EXE,运行该文件显示的内容如下:
(2)调试方法和运行结果
利用U命令观察内容如上,表明DS=1456H;数据XYZ的地址分别为ax=0000,ax=0004h,ax=0006h观察数据段如下:
通过r命令查看各个寄存器的变化
原始状态
逐步运行后寄存器部分状态
运行后的结果
(3)实验问题和解决方案
1.想要查看数据段的数据
解决方案:
可通过u命令查出数据段的首地址,再通过d查看数据
2.不同类型之间的数据之间的运算,需要进行数据类型的转换
解决方案:
可有cwd,cbw进行扩展
【练习2】
(1)该源程序取名i.asm,可生成可执行文件1.exe
运行该文件显示的内容如下
(2)调试方法和运行结果
1.首先通过u指令获得程序的数据段的地址,数据段的基地址为1456h
查看数据段数据
(3)无法找到数据段DS的值,因此无法查看数据段相关数据。
解决方案:
调试i.exe文件后,先用U命令反汇编查看,即可获得相关的段寄存器和其他寄存器的初始值。
编写的程序可能会有逻辑错误。
解决方案:
利用T命令先单步调试,遇到中断命令时改用P命令,
观察各个寄存器的变化是否正确。
【练习3】
(1)该源程序取名o.asm.通过汇编连接可生成可执行文件o.exe
程序运行情况如下
(2)调试方法和运行结果
由u命令获取数据段地址,段基址为1456h
查看数据段,此时定义了10个常数,和05h,90h两个参考值
主要执行过程
满足条件执行交换数据
最后结果
(3)实验问题和解决方案
1.怎么样来设置对比的参照数
解决方案:
参照数的选择要考虑到正数和负数的差别
2.怎么样实现对一串数据的比较
解决方案:
取数据首地址赋给si,由incsi来实现对所有数据的访问,dx控制访问的次数,同时用cmp语句比较数的大小
实验
总结
【实验1】
1.存在的问题
刚开始练习的时候不能很好地理解和运用乘除运算,字扩展相关的默认寄存器,16位之间的运算要注意用不同的运算符
2.实验结论
该实验实现了对数据段已经存在的数进行各种运算,并可以得出可靠的结果
3.收获和体会
掌握了运算时候默认寄存器的应用,和有符号数,无符号数之间的运算差别
4.改进意见:
可通过程序改进实现由屏幕动态录入数据再进行运算
【实验2】
1.存在的问题
还需加强对操作语句,相关寄存器和语句之间调用的掌握
2.实验结论
通过对数据段的数据定义,利用DOS系统功能调用方法实现了判断奇偶数的方法。
3.收获和体会
学会定义数据段的数据和数据缓冲区,学会查看寄存器和存储器,学会了通过单步调试跟踪程序执行过程。
4.改进意见
可用逻辑移动的方法判断奇偶性
【实验3】
1.存在的问题
开始时不知道如何实现对所有数据的逐个访问,对cmp语句影响的寄存器位不能熟练应用
2.实验结论
可通过对目标数据里的数据和参照数进行逐一的比较来实现找出数据中的最大最小值
3.收获和体会
掌握了对通过si,dx实现对数据串的访问和使用cmp进行条件判断
4.改进意见:
无
教师
评语