实验报告范例
东 北 大 学
计算机硬件技术基础实验报告
专业班级: XXX 姓名: XXX 学号: XXXX
实验题目: 顺序程序设计 日期: 2000.09.13
实验目的:
1) 掌握顺序程序设计方法;
2) 学习数据传送及算术和逻辑运算指令的用法;
3) 熟悉在PC机上建立、汇编、连接、调试和运行8086汇编语言程序的过程。
实验内容:
设X和Y均为8位无符号数,写一个求表达式Z=X+Y值的程序。
实验步骤:
1、输入源程序如下:
DSEG SEGMENT;数据段
X DB 12H
Y DB 34H
Z DB ?
DSEG ENDS
CSEG SEGMENT;代码段
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG;段寄存器初值
MOV DS,AX
MOV AL,X
ADD AL,Y;求x+y和
MOV Z,AL;保存
MOV AH,4CH
INT 21H;程序结束退出
CSEG ENDS
END START
2、保存源文件,执行masm汇编源程序,生成obj目标文件,结果无错误。
3、执行link连接程序,生成exe可执行文件,结果无错误。
4、执行debug调试程序,使用t参数单步执行程序,在AL寄存器中得到计算结果46H,结果正确,执行r参数命令察看Z所在的地址单元中的数据为0002字节单元中存放46H。
思考题:本程序没有考虑进位的情况。如果考虑可能产生的进位,应如何修改程序?
答:如果考虑进位情况,应该定义Z为DW类型,在程序中执行完ADD AL,Y后,执行ADC指令。
扩展题:设X和Y均为三字节无符号数,编制程序求其和,并将结果放置在Z开始的存储单元。
因为X和Y都是三字节的无符号数,所以要给Z定义三个字节的存储空间。具体程序如下:
DSEG SEGMENT;数据段
X DB 12H,34H,56H
Y DB 34H,56H,78H
Z DB 3 DUP(?)
DSEG ENDS
CSEG SEGMENT;代码段
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG;段寄存器初值
MOV DS,AX
MOV AL,X
ADD AL,Y;求x+y和
MOV Z,AL;保存
MOV AL,X+1
ADC AL,Y+1;求x+y和
MOV Z+1,AL;保存
MOV AL,X+2
ADC AL,Y+2;求x+y和
MOV Z+2,AL;保存
MOV AH,4CH
INT 21H;程序结束退出
CSEG ENDS
执行debug调试程序,执行d参数命令,在Z对应的存储单元中得到计算结果468ACEH,结果正确。
作业题目[程序2] 编制程序,将字节变量BVAR中的压缩BCD数转换成二进制数,并存入原变量中。
在编写程序前,首先要确定转换算法。第一步,取压缩BCD数的十位;第二步,计算十位数乘以10;第三步,取个位数相加。
程序清单如下所示。
DSEG SEGMENT
BVAR DB 99H
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START: MOVAX,DSEG
MOVDS,AX
MOVAL,BVAR
MOVCL,4
SHR AL,CL ;取高4位
MOV AH,10
MUL AH ;乘10
AND BVAR,0FH ;取低4位
ADD BVAR,AL ;相加
MOV AH,4CH
INT 21H
CSEG ENDS
END START
思考题:
程序中求个位数乘以10采用乘法指令MUL实现,而用移位指令也可以实现,请问该如何修改程序?
扩展题:这个程序还有另外一个编制算法,即首先将压缩BCD数转换成非压缩BCD数,然后通过BCD码调整指令将其直接转换成二进制数。请问应该使用哪一个调整指令?试编制程序。
邮箱:[email protected]
展开阅读全文