微机原理软件实验指导书(2)

1970-01-01 08:00

地址(H) 助记符 注释

2000 MOV DX,[3500];取二进制数

2004 MOV SI,3515; 目标首址在3510 2007 DEC SI 2008 MOV AX,DX 200A MOV DX,0000 200D MOV CX,000A

2010 DIV CX; ; 除10 2012 XCHG AX,DX 2014 ADD AL,30 2016 MOV [SI],AL 2018 CMP DX,0000 201B JNE 2007

201D CMP SI,3510 ; 填余下高位为0 2021 JZ 202A; 2023 DEC SI 2024 MOV AL,30 2026 MOV [SI],AL 2028 JMP 201D 202A INT 3

图1-3

4、 十六进制数转换为ASCII码

1) 程序及其流程

经过CPU处理后的十六进制数存放在起始地址为3500H的内存单元中,把它们转换成ASCII码之后,再分别存入起始地址为350AH的内存单元中。

从表2-1中可知,十六进制数加30H即可得到0H——9H的ASCII码,而要得到AH——FH的ASCII码,则需再加7H。程序流程图及参考程序如图1-4所示。

2)实验步骤 (1) 输入程序并检查无误。 (2) 在3500——3501H单元中存入四位十六进制数203B,即 E3500↙,并输入3B,20。 (3) G=2000↙,运行以上程序 (4) D350A↙,显示结果为:

0000:350A 42 33 30 32 CC? 输入数据与结果ASCII码对应顺序相反。 (5) 反复试几组数。考查程序的正确性。

6

地址(H) 助记符 注释 2000 MOV CX,0004 2003 MOV DI,3500 2006 MOV DX,[DI] 2008 MOV AX,DX

200A AND AX,000F ;取低四位值

200D CMP AL,0A; ; 判是否“0”-“9” 200F JB 2013 ; 是“0”-“9”转2013 2011 ADD AL,07; 是“A”-“F”,加7 2013 ADD AL,30; 转换为ASCII码 2015 MOV [DI+0A],AL 2018 INC DI

2019 PUSH CX ;保护循环计数器内容 201A MOV CL,04; 移位次数送CL 201C SHR DX,CL 201E POP CX 201F LOOP 2008 2021 INT 3

4 BCD码转换为二进制数

1) 程序及其流程

设四个二位十进制数的BCD码存放在起始地址为3500H,的单元中,转换出的二进制数码存入起始地址为3510H的内存单元中,程序流程图及参考程序如图1-5所示。

地址(H) 助记符 注释 2000 MOV CX,0004 2003 MOV DI,3500 2006 MOV AL,[DI]

2008 ADD AL,AL ;乘2 200A MOV BL,AL

200C ADD AL,AL ;乘2 200E ADD AL,AL ;乘2 2010 ADD AL,BL ;乘10 2012 INC DI 2013 MOV AH,00

2015 ADD AL,[DI]; BCD码十位与个位加

2017 MOV [DI+0F],AX;存结果 7

图1-4

1-5

图201A INC DI 201B LOOP 2006 201D INT 3

2)实验步骤

(1) 输入程序并检查无误。

(2) 在3500——3507单元中存入四个十进制数(12,34,56,78)的BCD码,即E3500↙ 输

入01,02,03,04,05,06,07,08。

(3) G=2000↙,运行以上程序。

(4) D3510↙,显示结果为3510 0C 00 22 00 38 00 4E 00 (5) 反复试几组数,考查程序的正确性。

四、思考题

1、 图1-1程序,将一个五位十进制数转换为二进制数(十六位)时,这个十进制数最小可为多少,

最大又可为多少?为什么?

2、 将一个十六位二进制数转换为ASCII码十进制数时,如何确定D1的值?

3、 在十六进制数转换为ASCII码时,存转换结果后,为什么要把DX向右移四次?

4、 自编ASCII码→十六进制、十进制小数→二进制、二进制→BCD码的程序,并调试运行。

8

实验二 程序设计和PC机上程序调试操作实验

一、 实验目的

1.掌握常用程序设计的基本技巧和方法。

2.学会和熟悉使用MASM汇编程序和LINK连接程序。 3.掌握使用PC机上编程和调试程序的方法。

二、 实验设备

PC机一台,装有DOS基本系统和MASM宏汇编软件

三、 实验内容及步骤

(一)按要求编写程序并在DEBUG下建立、汇编和调试程序

1、

四字节二进制数的加法

1)程序设计要求

两个字的被加数存放于3500H-3503H单元, 加数存于3504H-3507H单元 (存放格式为高位存高地址单元,低位存低地址单元),两数之和(如不超过四字节)存放于3508H-350BH单元。 2)实验步骤

(1)编写程序。

(2)在DEBUG下输入程序并检查(程序可存放于2000H-8000H单元)。 (3)在3500H-3507H单元中存入被加数014527和加数146758。 (4)运行程序后,检查3508H-350BH单元中内容。

(5)反复选择几组被加数和加数,检查结果,验证程序正确性。

2、数据块的搬移

1)程序设计思想和要求

将内存中一数据区中数据(源数据块)传送到另一数据区(目的数据块)。

源数据块和目的数据块区在内存中的位置有两种情况:两区重叠和不重叠,如下图所示。 对于两个数据块不重叠的情况,数据的传送可从数据块的首址开始,也可从数据块的末址开始;对于两个数据块重叠的情况,则要加以分析,否则重叠部分会因搬移而遭破坏。处理方法可以是:在源数据块首址>目的数据块首址时,从数据块的首址开始传送,在数据块首址<目的数据块首址时,从数据块的末址开始传送。

若源数据块首址存放于SI 中,目的数据块首址存放于DI 中,块字节数存放于CX中。要求设计的程序能够实现不同情况下的数据块传送。

9

源数 据块

目的数 据块

源 数 据 块 数 据 块

目的

2)实验步骤

(1)编写程序。

(2)在DEBUG下键入程序并检查(程序可存放于2000H-8000H单元)。

(3)确定源数据块和目的数据块区不重叠时的首址,确定数据块个数为16个。并在源数据区送入任意16个数据。

(4)运行程序后,检查目的数据区的内容。

(5)确定源数据块和目的数据块区重叠时, 源区首址>目的区首址时的首址, 以及数据块个数为16个,并在源数据区送入任意16个数据。运行程序后,检查目的数据区的内容。

(6)确定源数据块和目的数据块区重叠时, 源区首址<目的区首址时的首址, 以及数据块个数为16个,并在源数据区送入任意16个数据。运行程序后,检查目的数据区的内容。

3、无序数据块的递增排序

1)程序设计思想和要求

在首址为3000H 的数据区中存放着一组无符号数, 数据的长度存于3500H单元内,要求用冒泡法对该区中的数据按递增次序排列。

冒泡法的基本思想是从最后一个数(或从第一个数)开始,依次把相邻两个数比较,即第N个数与第N-1个数比较?,若大则交换,否则不交换,直到N个数都比较完为止。此时,其中最小数排在最前列。然后将剩下的N-1个数再按前述方法进行,找到N-1个数中最小的数。以后重复进行,直到全部按序排列。 2)实验步骤

(1)编写程序。

(2)在DEBUG下键入程序并检查(程序可存放于2000H-8000H单元,只要不与数据区重叠即可)。

(3)确定数据个数并输入3500H单元中,在首址为3500H的数据区中存入任意无符号数。 (4)运行程序并检查运行结果。

(6)反复修改数据个数和数据区中的数,运行程序、观察结果,验证程序的正确性。

10


微机原理软件实验指导书(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:环保应急预案最终1次修改

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: