微机原理 实验07:循环结构程序设计 您所在的位置:网站首页 实验3循环结构程序设计 微机原理 实验07:循环结构程序设计

微机原理 实验07:循环结构程序设计

2024-05-28 05:55| 来源: 网络整理| 查看: 265

目录

前言:

一、实验目的

二、实验内容

第一题:数据块的移动

代码

程序编译信息截图

程序运行结果截图

第二题:BCD码转换为二进制码

流程图

代码:

程序编译信息截图

程序运行结果截图

三、实验调试过程记录、结果分析及评价

附加题:分支程序:

前言:

对于数据块的移动这个实验在我的上一篇博客已经用串指令方法实现过了,感兴趣的小伙伴可以看一看。

微机原理(emu086):分支结构程序设计――数据块移动_实验06_Leisure_水中鱼的博客_CSDN博客

上一次在编程思想上完善的不是很好:修改数据的入口应该尽可能的少并且集中,在我写的使用串指令完成数据块的移动,如果要用不同的数据进行测试需要满篇幅的找代码修改,修改的点也有好几处,非常low。

就像高级语言中封装的算法应该做到数据无关性,我这次代码将数据修改的入口设置在数据段,代码段做到数据无关系。

一、实验目的

1、学会使用循环指令,掌握循环结构程序设计方法。

2、掌握BCD码到二进制码的转换方法,巩固理解、掌握数据的不同进制的表示方法和在计算机中的存储方式。

二、实验内容 第一题:数据块的移动

将实验06“数据块的移动”中多条数据传送部分,改为使用循环指令实现。(注意:此时指针变化需要另外用指令实现;可不必设置方向标志。)

代码 DATA SEGMENT ;定义数据段 INFO DW 0201H, 0403H, 0605H, 0807H, 0A09H, 0C0BH, 0E0DH, 100FH, 1211H, 1413H NUM DW 0AH ;定义数据数量 SOURCE DW 4010H ;源数据块偏移地址 TARGET DW 4020H ;目标数据块偏移地址 DATA ENDS CODE SEGMENT ;定义代码段 ASSUME CS: CODE, DS: DATA ;将各段内容指定寄存器 START: MOV AX, DATA MOV DS, AX MOV ES, AX ;将数据段DATA的首地址放入DS, ES MOV AX, 0H MOV SI, 0H MOV DI, SOURCE MOV CX, NUM ;存放字数据的数量 REP MOVSW ;4010H到4024H放上数据 MOV CX, NUM ;转移数据次数 MOV SI, SOURCE ;源数据块偏移地址 MOV DI, TARGET ;目的数据块偏移地址 CMP SI, DI ;比较SI和DI比较 JA NEXT ;SI>DI即正向传送 MOV AX, NUM ADD AX, NUM SUB AX, 2H ADD SI, AX ;负向传送指向数据块的最后一条数据 ADD DI, AX ;因为是字数据地址加上数据长度(2*数据数量)-2 MOV AX, -4H ;负向传送偏移地址递减 NEXT: ADD AX, 2H MOVE: MOV BX, [SI] MOV [DI], BX ;将源块数据送入BX,再通过BX送入目的块 ADD DI, AX ADD SI, AX ;指针移动 LOOP MOVE MOV AH, 4CH ;结束本程序运行 INT 21H CODE ENDS ;代码段结束 END START 程序编译信息截图

程序运行结果截图

源数据块:4010H,目标数据块:4020H

源数据块初始化:

转移后:

源数据块:4010H,目标数据块:4020H

转移后:

第二题:BCD码转换为二进制码

内存数据区从4000H单元开始依次存入n个两位十进制数的BCD码。每个数的BCD码占相邻的2个内存单元,其中高地址存高位数。编程将这n个数的BCD码转化为对应的二进制码,存入从4100H开始的n个内存单元。请画出程序设计流程图。

验证:在4000H单元开始分别存入3条数据34、56、78的bcd码进行验证。查看4100H单元开始是否还原出其对应的二进制编码。

提示:一个两位十进制数bcd码转化为二进制码的基本思想是:将十位数数字的bcd码乘以10,再与个位数的bcd码累加,得到和即为该数;该数在计算机中自动按照二进制码存放。

流程图

代码: DATA SEGMENT ;定义数据段 INFO DW 0304H, 0506H, 0708H NUM DW 03H ;定义数据数量 SOURCE DW 4000H ;源数据块偏移地址 TARGET DW 4100H ;目标数据块偏移地址 DATA ENDS CODE SEGMENT ;定义代码段 ASSUME CS: CODE, DS: DATA ;将各段内容指定寄存器 START: MOV AX, DATA MOV DS, AX MOV ES, AX ;将数据段DATA的首地址放入DS, ES MOV AX, 0H MOV SI, 0H MOV DI, SOURCE MOV CX, NUM ;存放字数据的数量 REP MOVSW ;将num个2位十进制数bcd码存入4000H MOV CX, NUM ;转移数据次数 MOV SI, SOURCE ;源数据块偏移地址 MOV DI, TARGET ;目的数据块偏移地址 MOVE: MOV AL, 10 MOV BX, [SI] ;将2位十进制数bcd码送入BH,BL MUL BH ADD BL, AL ;将bcd码转换成二进制码放入BL MOV [DI], BL ;通过BL传入目的数据块 INC DI ADD SI, 02H ;指针移动 LOOP MOVE MOV AH, 4CH ;结束本程序运行 INT 21H CODE ENDS ;代码段结束 END START 程序编译信息截图

程序运行结果截图

4000H存放bcd码:

4100H存放二进制码:

22H=34D, 38H=56D, 4EH=78D

三、实验调试过程记录、结果分析及评价

1.我将数据的入口放在数据段,无需对代码段进行任何修改。

2.第一题负向传送时要指向数据块最后一个数据,不能直接加上数据总长度,应该是加上数据总数-1的长度。

3.循环指令无需设置方向标志,指针移动靠加减实现即可

4.第二题注意字数据(bcd码)指针位移2,字节数据(二进制码)指针位移1

5.注意第二题乘10不是10H,是将34D变成二进制编码存入计算机,如果是10H,就不是原本的数了

附加题:分支程序:

编写程序,计算Y的值,X和Y之间的函数关系式如下,其中X、Y均为字节型变量。

附加题没啥说的,很简单讲讲思路:

        AL存X,BL存Y默认为0。有两重判断:1.X>=0跳转L1,2.X



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有