计算机原理实验二实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二四则运算

一、实验目的

1. 巩固DEBUG及宏汇编的使用。

2. 加深对运算指令的理解。

3. 注意标志寄存器的变化。

二、实验内容

1. 16位二进制加减法运算

1)内容:

在数据区中定义两个16位的二进制数(16位的二进制数在内存中存放时占2个字节,低位字节数据存在较低地址单元;高位字节数据存在高地址单元。这一原

则简称为“低字节在前、高字节在后”)。用8位加减运算指令分别计算这这两个数

的和、差(计算时应先算低字节、后算高字节,计算高字节时还应考虑低字节的进

位),并将结果也存入数据区原始数据的后面。程序结束后返回DOS。

2)思路:

首先在数据段定义两个16位的二进制数。

然后循环两次分别完成低位、高位的加(减法),注意在第一次循环前应该清

空进位标志CF,每次使用带进位的加法(减法)。加完(减完)后将结果送到

内存中去。

3)源程序(重要部分):

a)数据段:

b)核心源码:

4)结果:

338E+0B34=3EC2;338E-0B34=285A

修改数据:

执行结果:

2. 16位压缩BCD码加减运算

1)内容:修改程序实现16位的压缩BCD码的加减运算。

2)思路:

首先在数据段定义两个4位的压缩性BCD码(表面上是四位十六进制数)。

然后循环两次分别完成低两位、高两位的加(减法),注意在第一次循环前应该清空进位标志CF,每次使用带进位的加法(减法),每次加完后用DAA调整(每次减完用DAS调整),然后将结果送到内存中去。

3)源程序(重要部分):

a)数据段:

b)核心源码:

4)结果:

3382+4621=8003;3382-4621=8761

修改数据:

执行结果:

3. 重复累加的方式计算两位BCD码数乘以两位BCD码数的积

1)内容:用重复累加的方法计算两位BCD码数乘以两位BCD码数的积。被乘

数和乘数都用压缩的BCD码形式存放于数据区,各占一单元。乘积顺序存放

在后两个单元中(低位在前,高位在后)。

2)思路:

流程图如下:

A. 首先在数据段定义两个两位的压缩性BCD码(表面上是两位十六进制数)。

B. 用DX来存暂存乘积(累加结果),每次将DL和被乘数BL相加,然后进行十进制调整;在将DH和CF相加,十进制调整;如此共进行CL(看做压缩性BCD码)次即可得到乘积结果。

C. 上述加法和减法由于要进行十进制调整,故要先将被加数移至AL中,然后进行加减和调整,最后再送回原来的寄存器。

D. 最后将DX的内容送存到内存中。

3)源程序(重要部分):

a)数据段:

b)核心源码:

4)结果:

88*99=8712;

修改数据:

执行结果:

4. 用乘法指令计算十进制数乘法2754×3

1)内容:用乘法指令计算十进制数乘法

2754×3。被乘数和乘数都用ASCⅡ码形

式存放在内存中(低位在前),乘积以

ASCⅡ码存入后续单元(低位在前)。由于

此题被乘数是四位而乘数仅一位,可以用

乘数逐次去乘被乘数的每一位(用字节

乘,先低位后高位),然后相加。由于两

个1位数相乘除产生本位积以外还可能

产生进位,这时可以将本位积存入最终结

果单元,而进位还要加到高位积中去。相

乘前要将ASCⅡ码变成十六进制数,运

算后还要进行十进制调整。

2)思路:

流程图如右:

3)源程序(重要部分):

a)数据段:

b)核心源码:

4)结果:

2754*3=8262。

三、实验总结

1. 通过四个实验巩固了DEBUG及宏汇编的使用,更加熟练地应用DEBUG命令。

2. 通过加减乘运算和进制调整加深对运算指令的理解和应用。

3. 掌握了某些简单的汇编语言编程技巧,比如使用AL来进行加减法和十进制调整。

4. 实验中应该注意数据所占内存的大小,应该注意内存分配和数据所占内存的情况,可以使用D命令来查看内存中的数据。

5. 使用T命令可进行单步调试,观察内存中的数据变化和标志位寄存器的状态变化等。

相关文档
最新文档