微机原理实验之_分支程序、循环程序设计
微机原理与应用综合实验—循环程序设计

94 A2:PUSH AX 95 MOV DL,' ' 96 MOV AH,2 97 INT 21H 98 POP AX 99 ADD AX,BX 100 SHL AX,1 101 RET 102 A3:PUSH AX 103 MOV DL,' ' 104 MOV AH,2 105 INT 21H 106 POP AX 107 SUB AX,BX 108 SHL AX,1 109 RET 110 111 RET 112 CHRAC ENDP 113 MOV AH,4CH 114 INT 21H 115 CODE ENDS 116 END MAIN
45 ;********************************************** 46 INPUTPRO PROC NEAR 47 PUSH CX ;保护现场 48 PUSH AX 49 PUSH BX 50 SHL AX,1 ;得到每一行输入的字符(‘*’、‘ ’)总数 51 MOV CX,0001H 52 LOP:CALL CHRAC 53 INC CX ;CX自加 54 CMP CX,AX 55 JNA LOP;判断相等就换行 56 POP BX 57 POP AX ;恢复现场 58 POP CX 59 RET 60 INPUTPRO ENDP 61 ;********************************************** 62 ;子程序:输入每一个‘*’和‘ ’和0AH(换行字符) 63 ;********************************************** 64 CHRAC PROC NEAR 65 CMP CX,AX 66 JZ A1; 67 MOV DL,'*' 68 69 SHR AX,1 ;满足空格的条件 70 SUB AX,BX 71 CMP CX,AX 72 JNA A2 73 ADD AX,BX 74 ADD AX,BX 75 CMP CX,AX 76 JNB A3 77 78 SUB AX,BX 79 SHL AX,1 80 PUSH AX 81 MOV AH,2 82 INT 21H 83 POP AX 84 RET 85 A1:PUSH AX 86 MOV DL,0DH 87 MOV AH,2 88 INT 21H 89 MOV DL,0AH 90 MOV AH,2 91 INT 21H 92 POP AX 93 RET
微机原理分支程序设计实验

微机原理分支程序设计实验微机原理是计算机科学与技术专业的核心课程之一、在这门课程中,学生需要学习计算机的基本原理和体系结构,并通过实验来巩固所学的知识。
本文将介绍一个关于分支程序设计的微机原理实验。
实验背景:分支程序是计算机中的一种非线性控制结构,它根据条件的不同选择不同的执行路径。
分支程序设计是计算机编程中非常重要的一部分,也是实际应用中经常会遇到的情况之一、通过这个实验,学生将学会如何使用分支结构来解决实际问题。
实验目的:1.了解分支程序设计的基本概念和原理。
2.掌握使用条件语句和循环语句来实现分支程序。
3.通过实际案例分析和编程实践,巩固所学的知识。
实验内容:本实验以学生成绩管理系统为例,通过判断学生的成绩等级来计算总评成绩,并输出等级信息。
分支程序设计的思路如下:1.输入学生的成绩。
2.根据成绩的范围判断学生的等级。
3.根据等级计算总评成绩。
4.根据总评成绩输出相应的等级信息。
实验步骤:1.在开发环境中创建一个新的项目,并新建一个名为“GradeManage”的源文件。
2.在源文件中定义一个成绩变量和一个等级变量,并使用输入函数从键盘读取学生的成绩。
3.使用条件语句根据成绩的范围判断学生的等级,并将等级赋值给等级变量。
4.使用条件语句根据等级计算总评成绩,并将结果赋值给一个总评成绩变量。
5.使用条件语句根据总评成绩输出相应的等级信息。
6.在屏幕上显示输出结果。
7.编译并运行程序,进行测试。
实验总结:通过本实验,我学会了如何设计并实现一个简单的分支程序。
在实验过程中,我深入了解了分支结构的原理和使用方法,并通过编程实践巩固了所学的知识。
分支程序设计在实际应用中非常广泛,掌握这一技能对于计算机科学与技术专业的学生来说非常重要。
在今后的学习和工作中,我将继续探索和学习更多关于分支程序设计和其他相关知识,以提高自己的编程能力。
微机实验分支程序设计

微机实验分支程序设计微机实验是计算机科学与技术专业学生的重要实践环节,其中分支程序设计是程序设计中的一项基础技能。
分支程序设计指的是在程序中根据条件判断,执行不同的代码路径。
这种设计可以使得程序更加灵活,能够根据不同的输入或状态做出相应的反应。
一、分支程序设计概述分支程序设计通常涉及到条件语句的使用,如`if`、`switch`等。
在微机实验中,分支程序设计的应用非常广泛,包括但不限于数据处理、用户交互、错误处理等方面。
二、分支程序设计的基本结构1. 条件判断:程序首先需要对某个条件进行判断,这个条件可以是一个变量的值、用户输入或者程序的状态等。
2. 执行路径:根据条件判断的结果,程序将选择执行不同的代码块。
在`if`语句中,通常会有两个执行路径:条件为真时执行的代码块和条件为假时执行的代码块。
3. 嵌套分支:在复杂的程序设计中,分支可以嵌套使用,即在一个分支的内部再进行条件判断和分支选择。
三、分支程序设计的应用场景1. 用户输入验证:在用户输入数据后,程序需要验证输入的有效性,根据验证结果执行不同的操作。
2. 错误处理:当程序运行过程中出现错误时,通过分支程序设计可以对错误进行分类处理。
3. 功能选择:在具有多个功能的程序中,用户可以通过选择来决定执行哪个功能。
四、分支程序设计的实现以C语言为例,分支程序设计的基本实现如下:```c#include <stdio.h>int main() {int choice;printf("请输入一个数字(1-5):");scanf("%d", &choice);if (choice == 1) {printf("你选择了选项1。
\n");} else if (choice == 2) {printf("你选择了选项2。
\n");} else if (choice == 3) {printf("你选择了选项3。
实验四分支和循环程序设计实验(精)

实验四分支和循环程序设计实验一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言分支程序基本指令的使用方法;3.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法;4.了解汇编语言循环程序设计的基本流程;5.熟悉汇编语言循环基本指令的使用方法;6.掌握利用汇编语言的循环指令完成循环程序设计方法。
二、软硬件环境1、硬件环境:计算机系统 windows;2、软件环境:装有 MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识在实际应用中,经常根据一些条件来选择一条分支执行。
汇编语言的条件判断主要是通过状态寄存器中的状态位、无符号数相减或有符号相减而导致的结果来进行。
1.无条件转移指令 JMP无条件转移指令 JMP是使程序无条件转移至目标处,又分为段内转移、段间转移。
2.条件转移指令 JXX条件转移指令可分为三大类:1).简单条件转移指令指令。
根据单个标志位的状态判断转移条件。
标志位指令转移条件意义CFJC CF=1 有进位/借位JNC CF=0 无进位/借位ZFJE/JZ ZF=1 相等/等于 0JNE/JNZ ZF=0 不相等/不等于 0SFJS SF=1 是负数JNS SF=0 是正数OFJO OF=1 有溢出JNO OF=0 无溢出PFJP/JPE PF=1 有偶数个 1JNP/JPO PF=0 有奇数个 12).无符号数条件转移指令。
假设在条件转移指令前使用比较指令,比较两个无符号数A,B,指令进行的的操作是 A-B,其转移指令如下:指令转移条件意义JA/JNBE CF=0 AND ZF=0 A>BJAE/JNB CF=0 OR ZF=1 A>=BJB/JNAE CF=1 AND ZF=0 A<BJBE/JNA CF=1 OR ZF=1 A<=B3).带符号数条件转移指令。
指令转移条件意义JG/JNLE SF=OF AND ZF=0 A>BJGE/JNL SF=OF OR ZF=1 A>=BJL/JNGE SF OF AND ZF=0 A<BJLE/JNG SF OF OR ZF=1 A<=B四、实验内容与步骤1、判断方程 AX2+BX+C=0是否有实根。
分支与循环程序设计实验报告

实验名称分支与循环程序设计实验指导教师罗志祥专业班级光电1406姓名段昳晖学号U2014*****联系电话137********一、任务要求1.设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写完整程序。
264X当XYX/2当10X64X当X102.利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。
P3.0为低电平时开始计时,为高电平时停止计时。
设计1s延时子程序(延时误差小于10us,晶振频率12MHz)。
二、设计思路1.设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写完整程序。
264X当XYX当X/21064X当X10将外部单元1000H中的X,通过分支判断,分别执行不同的语句,三条语句分别为标记为L1、L2、L3,先比较X与64的大小关系,再判断X与10的大小关系,主要利用比较转移指令CJNE,以及执行CJNE指令后的进位位CY,进一步比较大小,分别跳转至对应语句。
将结果存于外部单元的1001H以及1002H。
1专业资料整理2.利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。
P3.0为低电平时开始计时,为高电平时停止计时。
设计1s延时子程序(延时误差小于10us,晶振频率12MHz)。
主程序设计三层循环,分别对应时、分、秒,最内层安放一秒延时程序。
利用R0、R1、R2计数,R3保存分钟数、R4保存小时数,最内层循环60次,中循环循环1次,中循环60 秒,外循环循环1次,外循环循环24次,清零。
其中对端口显示的秒数、分钟数、时间数,进行二进制修正。
利用循环来设计延时程序,合理计算语句长度,以及循环次数。
程序运行时修正P3.0的值,可以实现暂停计数和继续的功能。
微机原理实验之 - 分支程序循环程序设计

微机原理实验之 - 分支程序、循环程序设计实验三分支程序、循环程序设计实验一、实验目的1.掌握分支程序的结构。
2.掌握分支程序的设计、调试方法。
3.加深对循环结构的理解。
4.掌握循环结构程序设计的方法以及调试方法。
二、实验设备PC机一台,TD-PITE实验装置一套。
三、实验内容:设计一数据块间的搬移程序。
设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(称为目的数据块)。
源数据块和目的数据块在存储中可能有三种情况,如图1所示。
图3-1 源数据块与目的数据块在存储中的位置情况对于两个数据块分离的情况,如图3-1(a),数据的传送从数据块的首地址开始,或从数据块的末地址开始均可。
但是对于有重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭到破坏,可有如下结论:当源数据块首地址<目的块首地址时,从数据块末地址开始传送数据,如图3-1(b)所示。
当源数据块首地址>目的块首地址时,从数据块首地址开始传送数据,如图3-1(c)所示。
参考流程:如图3-2所示。
图3-2 程序流程图实验程序STACK SEGMENT STACK DW 64 DUP(?) STACK ENDSCODE SEGMENTASSUME CS:CODESTART: MOV CX, 0010H MOV SI, 3100HMOV DI, 3200H CMP SI, DI JA A2 ADD SI, CX ADD DI, CX DEC SI DEC DI MOV AL, [SI] MOV [DI], AL DEC SIA1:DEC DI DEC CX JNE A1 JMP A3MOV AL, [SI] MOV [DI], AL INC SI INC DI DEC CX JNE A2 JMP A3 ENDS END STARTA2:A3: CODE实验步骤1. 按流程图编写实验程序,经编译、链接无误后装入系统;2. 用E命令在以SI为起始地址的单元中填入16个数;3. 运行程序,然后再停止运行;4. 通过D命令查看DI为起始地址的单元中的数据是否与SI单元中数据相同;5. 通过改变SI、DI的值,观察在三种不同的数据块情况下程序的运行情况,并验证程序的功能。
微机原理与汇编语言实验循环程序设计实验

微机原理与汇编语言实验报告姓名x x x学号xxxxxx 专业班级计科x班课程名称微机原理与汇编语言实验日期2014.10.22实验名称循环程序设计实验成绩一、实验目的1、掌握循环程序的设计方法。
2、掌握比较指令、转移指令和循环指令的使用方法。
3、进一步掌握调试工具的使用方法。
二、实验内容1、实验原理(1)键盘输入的十进制数如368在计算机中是以33H,36H,38H形式存放的,如何将它们转换为一个二进制数101110000B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题(2)累加结果为一个16位的二进制数,为了显示结果,必需把它们转换为十进制数2、实验步骤(1)流程图(2)实验源码.model small.stack ;定义堆栈段.data ;定义数据段inf1 db "Please input a number(1-627):$"inf2 db 0ah, 0dh, "1+2+......+$"ibuf db 7, 0, 6 dup(0)obuf db 6 dup(0).codestart: mov ax, @datamov ds, axmov dx, offset inf1;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax 中mov ah, 09hint 21hmov dx, offset ibufmov ah, 0Ahint 21hmov cl, ibuf+1mov ch, 0mov si, offset ibuf+2mov ax, 0loop1: mov dx, 10mul dxand byte ptr [si], 0Fhadd al, [si] 从键盘输入一个十进制数,并将其转换为二进制数,存放在AX中开始结束素、、(CX)-1=0累加循环次数送CX(MOV CX,AX)AX清0(AX中存放累加和)BX送1(BX存放每次循环累加的数,每循环一次,BX值加1)ADD AX,BXINC BX累加和(在AX中)转换为十进制数并显示YNadc ah, 0inc siloop loop1mov cx, ax ;计算1+2+3+...+nmov ax, 0mov bx, 1loop2: add ax, bxinc bxloop loop2mov di, offset obuf+6 ;将ax中的二进制数转换为十进制数并以ascii的形式存于obufmov byte ptr [di], '$'mov bx, 10loop3: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop3dec dimov [di], '='mov dx, offset inf2 ;结果输出mov ah, 09hint 21hmov cl, ibuf+1 ;显示nmov ch, 0mov si, offset ibuf+2loop4: mov dl, [si]add dl, 30hinc simov ah, 02hint 21hloop loop4mov dx, dimov ah, 09hint 21hmov ax, 4c00hint 21hend start实验习题1源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式).stack ;定义堆栈段.data ;定义数据段inf1 db 0ah, 0dh, "1+2+......+$"obuf1 db 6 dup(0)obuf2 db 7 dup(0) ;除了六位数字外还要有一个=号.codestart: mov ax, @datamov ds, axmov dx, offset inf1 ;输出 1+2+......+mov ah, 09hint 21hmov ax, 0 ;计算1+2+3+...+nmov bx, 1loop1: add ax, bxinc bxcmp ax, 60000jbe loop1push ax ;将最终结果备份入栈push bx ;将n备份pop cxmov di, offset obuf1+5;将cx二进制数转换为十进制数并以ascii的形式存于obuf1mov byte ptr [di], '$'mov ax, cxmov bx, 10loop2: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop2mov dx, di ;输出nmov ah, 09hint 21hpop axmov di, offset obuf2+6;将ax中的二进制数转换为十进制数并以ascii的形式存于obuf2mov byte ptr [di], '$'mov bx, 10loop3: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop3dec dimov [di], '='mov dx, di ;=输出结果mov ah, 09hint 21hmov ax, 4c00hint 21hend start实验习题2源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式).stack ;定义堆栈段.data ;定义数据段inf1 db 'Please input six num:', 0ah, 0dh, '$'inf2 db 'sum:$'obuf0 db 0ah, 0dh, '$'ibuf db 5, 0, 4 dup(0)obuf db 6 dup(0).codestart: mov ax, @datamov ds, axmov dx, offset inf1 ;输出提示信息mov ah, 09hint 21hmov bx, 6 ;设置外层循环次数loop1: mov dx, offset ibufmov ah, 0Ahint 21hmov cl, ibuf+1 ;设置内层循环次数mov ch, 0mov si, offset ibuf+2mov ax, 0loop2: mov dx, 10 ;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax中 mul dxand byte ptr[si], 0Fhadd al, [si]adc ah, 0inc siloop loop2push ax ;将结果入栈保存mov dx, offset obuf0 ;回车换行mov ah, 09hint 21hdec bxcmp bx, 0jnz loop1mov cx, 6mov ax, 0loop3: pop bxadd ax, bxloop loop3mov di, offset obuf+5;将ax中的二进制数转换为十进制数并以ascii的形式存于obuf mov byte ptr [di], '$'mov bx, 10loop4: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop4mov dx, offset inf2 ;输出提示信息mov ah, 09hint 21hmov dx, dimov ah, 09hint 21hmov ax, 4c00hint 21hend start实验习题3源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式) .stack ;定义堆栈段.data ;定义数据段inf db "Please input a num(0-65535):$"inf2 db 0ah, 0dh, "The num of 1:$"ibuf db 6, 0, 5 dup(0)obuf db 6 dup(0).codestart: mov ax, @datamov ds, axmov es, axmov ah, 09h ;输出提示信息Please input a num:mov dx, offset infint 21hmov ah, 0Ah ;接收一个无符号十进制整数(小于65536)mov dx, offset ibufint 21hmov ax, 0mov cl, ibuf+1;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax中mov ch, 0mov si, offset ibuf+2loop1: mov dx, 10mul dxand byte ptr[si], 0Fhadd al, [si]adc ah, 0inc siloop loop1mov bx, 0loop2: shr ax, 1adc bx, 0cmp ax, 0jnz loop2mov ax, bxmov di, offset obuf+5;将ax中的二进制数转换为十进制数并以ascii的形式存于obufmov byte ptr [di], '$'mov bx, 10loop3: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop3mov ah, 09h ;输出提示信息The num of 1:mov dx, offset inf2int 21hmov ah, 09h ;将统计结果在屏幕上显示出来mov dx, diint 21hmov ax, 4c00hint 21hend start实验习题4源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式).stack ;定义堆栈段.data ;定义数据段N equ 5ibuf db 4, 0, 3 dup(0)inf1 db 'Please input N num(0-255):', 0ah, 0dh, '$'inf2 db 'Sort:', 0ah, 0dh, '$'buf db N dup(0)obuf2 db 4 dup(0)obuf db 0ah, 0dh, '$'.codestart: mov ax, @datamov ds, axmov dx, offset inf1 ;输出提示信息mov ah, 09hint 21hmov di, offset bufmov bx, N ;设置外层循环次数loop1: mov dx, offset ibufmov ah, 0Ahint 21hmov cl, ibuf+1 ;设置内层循环次数mov ch, 0mov si, offset ibuf+2mov ax, 0loop2: mov dx, 10 ;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax中 mul dxand byte ptr[si], 0Fhadd al, [si]inc siloop loop2mov [di], alinc dimov dx, offset obuf ;回车换行mov ah, 09hint 21hdec bxcmp bx, 0jnz loop1mov bx, N-1 ;比较大小mov cx, bxmov dx, bxmov di, offset bufloop3: mov si, dimov al, [di]inc siloop4: cmp [si], aljbe loop5mov al, [si]mov ah, [di]mov [si], ahmov [di], alloop5: inc siloop loop4dec dxmov cx, dxinc didec bxcmp bx, 0jne loop3mov dx, offset inf2 ;输出提示信息mov ah, 09hint 21h;结果输出mov cx, Nmov si, offset bufloop6: mov di, offset obuf2+3;将buf中的二进制数转换为十进制数并以ascii的形式存于obuf2,并输出 mov byte ptr [di], '$'mov bx, 10mov al, [si]mov ah, 0loop7: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop7mov dx, dimov ah, 09hint 21hmov dx, offset obufmov ah, 09hint 21hinc siloop loop6mov ax, 4c00hint 21hend start3、实验结果(1)实验结果(2)实验习题1程序流程图:(3)实验习题2(4)实验习题3(5)实验习题4三、实验总结1)通过本次实验我掌握循环程序的设计方法,掌握比较指令、转移指令和循环指令的使用方法,进一步掌握了调试工具的使用方法。
最新微机原理实验之_分支程序、循环程序设计

实验三分支程序、循环程序设计实验一、实验目的1.掌握分支程序的结构。
2.掌握分支程序的设计、调试方法。
3.加深对循环结构的理解。
4.掌握循环结构程序设计的方法以及调试方法。
二、实验设备PC机一台,TD-PITE实验装置一套。
三、实验内容:设计一数据块间的搬移程序。
设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(称为目的数据块)。
源数据块和目的数据块在存储中可能有三种情况,如图1所示。
图3-1 源数据块与目的数据块在存储中的位置情况对于两个数据块分离的情况,如图3-1(a),数据的传送从数据块的首地址开始,或从数据块的末地址开始均可。
但是对于有重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭到破坏,可有如下结论:当源数据块首地址<目的块首地址时,从数据块末地址开始传送数据,如图3-1(b)所示。
当源数据块首地址>目的块首地址时,从数据块首地址开始传送数据,如图3-1(c)所示。
参考流程:如图3-2所示。
图3-2 程序流程图实验程序STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODESTART: MOV CX, 0010HMOV SI, 3100HMOV DI, 3200HCMP SI, DIJA A2ADD SI, CXADD DI, CXDEC SIDEC DIA1: MOV AL, [SI]MOV [DI], ALDEC SIDEC DIDEC CXJNE A1JMP A3A2: MOV AL, [SI]MOV [DI], ALINC SIINC DIDEC CXJNE A2A3: JMP A3CODE ENDSEND START实验步骤1. 按流程图编写实验程序,经编译、链接无误后装入系统;2. 用E命令在以SI为起始地址的单元中填入16个数;3. 运行程序,然后再停止运行;4. 通过D命令查看DI为起始地址的单元中的数据是否与SI单元中数据相同;5. 通过改变SI、DI的值,观察在三种不同的数据块情况下程序的运行情况,并验证程序的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三分支程序、循环程序设计实验
一、实验目的
1.掌握分支程序的结构。
2.掌握分支程序的设计、调试方法。
3.加深对循环结构的理解。
4.掌握循环结构程序设计的方法以及调试方法。
二、实验设备
PC机一台,TD-PITE实验装置一套。
三、实验内容:
设计一数据块间的搬移程序。
设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(称为目的数据块)。
源数据块和目的数据块在存储中可能有三种情况,如图1所示。
图3-1 源数据块与目的数据块在存储中的位置情况
对于两个数据块分离的情况,如图3-1(a),数据的传送从数据块的首地址开始,或从数据块的末地址开始均可。
但是对于有重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭到破坏,可有如下结论:
当源数据块首地址<目的块首地址时,从数据块末地址开始传送数据,如图3-1(b)所示。
当源数据块首地址>目的块首地址时,从数据块首地址开始传送数据,如图3-1(c)所示。
参考流程:如图3-2所示。
图3-2 程序流程图
实验程序
STACK SEGMENT STACK
DW 64 DUP() STACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV CX, 0010H
MOV SI, 3100H
MOV DI, 3200H
CMP SI, DI
JA A2
ADD SI, CX
ADD DI, CX
DEC SI
DEC DI
A1: MOV AL, [SI]
MOV [DI], AL
DEC SI
DEC DI
DEC CX
JNE A1
JMP A3
A2: MOV AL, [SI]
MOV [DI], AL
INC SI
INC DI
DEC CX
A3: JMP A3
CODE ENDS
END START
实验步骤
1. 按流程图编写实验程序,经编译、链接无误后装入系统;
2. 用E命令在以SI为起始地址的单元中填入16个数;
3. 运行程序,然后再停止运行;
4. 通过D命令查看DI为起始地址的单元中的数据是否与SI单元中数据相同;
5. 通过改变SI、DI的值,观察在三种不同的数据块情况下程序的运行情况,并验证程序的功能。
2. 计算S=1+2×3+3×4+4×5+…+N(N+1),直到N(N+1)项大于200为止。
编写实验程序,计算上式的结果,参考流程图如图3-3所示。
图3-3 程序流程图
实验程序
STACK SEGMENT STACK
DW 64 DUP()
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,0001H
MOV BL,02H
A1: MOV AL,BL
INC BL
MUL BL
ADD DX,AX ;结果存于DX中
CMP AX,00C8H ;判断N(N+1)与200的大小
A2: JMP A2
CODE ENDS
END START
实验步骤
(1)编写实验程序,编译、链接无误后装入系统;
(2)运行程序,然后再停止程序运行;
(3)运算结果存储在寄存器DX中,查看结果是否正确;
(4)可以改变N(N+1)的条件来验证程序功能是否正确,但要注意,结果若大于FFFFH将产生数据溢出。
2. 求某数据区内负数的个数
设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。
为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得到区内所包含负数的个数。
实验程序流程图如图3-4所示。
图3-4 程序流程图
实验程序
STACK SEGMENT STACK
DW 64 DUP()
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DI, 3000H ;数据区首地址
MOV CL, [DI] ;取数据个数
XOR CH, CH
MOV BL, CH
INC DI ;指向第一个数据
A1: MOV AL, [DI]
TEST AL, 80H ;检查数据首位是否为1
JE A2
INC BL ;负数个数加1
A2: INC DI
LOOP A1
MOV [DI], BL ;保存结果
A3: JMP A3
CODE ENDS
END START
实验步骤
(1)按实验流程编写实验程序;
(2)编译、链接无误后装入系统;
(3)键入E3000,输入数据如下:
3000=06 (数据个数)
3001=12
3002=88
3003=82
3004=90
3005=22
3006=33
(4)先运行程序,然后停止程序运行;
(5)查看3007内存单元或寄存器BL中的内容,结果应为03;(6)可以进行反复测试来验证程序的正确性。