首页 > 编程语言 >微机原理循环程序设计实验

微机原理循环程序设计实验

时间:2024-08-01 21:24:57浏览次数:12  
标签:CODE DI BL 程序 MOV 微机 循环 SSTACK 程序设计

  • 实验目的

1.能够认知循环指令和循环结构。

2.能够设计循环程序,并运行调试。

3.培养严谨、求真的科学作风。 

  • 实验内容

  1. 计算 S=1+2×3+3×4+4×5+…+N(N+1),直到 N(N+1)项大于 200 为止。编写实验程序,计算上式的结果。

  2.  求某数据区内负数的个数设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中凡是符号位为 1 的数据的个数累加起来,即得到区内所包含负数的个数。

  • 实验步骤  

  • 1.(1)根据实验内容1画出流程图,如下图所示: 

  •     

  • (2)根据流程图编写实验程序,编译、链接无误后装入系统。 (3)运行程序,待程序运行停止。(4)运算结果存储在寄存器 DX 中,查看结果是否正确。(5)可以改变 N(N+1)的 条件来验证程序功能是否正确,但要注意,结果若大于 0FFFFH 将产生数据溢出。

  • 2.(1)根据实验内容2画出流程图,如下图所示:

  •  

  • (2)按实验流程编写实验程序。(3)编译、链接无误后装入系统。(4)键入 E3000,输入数据如下:3000=06(数据个数);3001=12;3002=88;3003=82;3004=90;3005=22;3006=33。(5)先运行程序,待程序运行停止。(6)查看 3007 内存单元或寄存器 BL 中的内容,结果应为 03。 (7)可以进行反复测试来验证程序的正确性。                                       

  • 实验程序

  • ;任务1程序:
    SSTACK	SEGMENT STACK
    		DW 64 DUP(?)
    SSTACK	ENDS
    CODE	SEGMENT
    		ASSUME CS:CODE,SS:SSTACK
    
    START:	MOV DX,0001H
            MOV BX,0002H
    
    A1:     MOV AL,BL
            INC BL
            MUL BL
            ADD DX,AX
            CMP AX,00C8H
            JNA A1
    
            MOV AX,4C00H
            INT 21H
    CODE	ENDS
    		END START
    ;任务2程序:
    SSTACK	SEGMENT STACK
    		DW 64 DUP(?)
    SSTACK	ENDS
    CODE	SEGMENT
    		ASSUME CS:CODE,SS:SSTACK
    
    START:XOR AX,AX
    MOV DI,3000H                            ;数据区首地址
          MOV CL,[DI]                             ;数据个数
          MOV CH,00H                              ;CH置0
          MOV BL,00H                              ;BL置0
          INC DI                                  ;DI增1
    A1:
          MOV AL,[DI]
          TEST AL,80H                             ;数据首位=1?
          JZ A2
    INC BL
    
    A2:  INC DI
         LOOP A1   
          
         MOV [DI],BL                               ;保存结果 
         MOV AX,4C00H
         INT 21H
    CODE ENDS
         END START
  • 实验结果

  • 1.(4)运算结果存储在寄存器 DX 中,查看结果是否正确。

    由程序运行结果可知,DX的结果为045FH,转化为十进制为1119,根据数学知识,当N(N+1)不大于200,此时N =BL-2,此时S=1+2×3+3×4+4×5+…+13×14+14×15=1119,验证结果正确。                                         

  • 1.(5)可以改变 N(N+1)的条件来验证程序功能是否正确,但要注意,结果若大于 0FFFFH 将产生数据溢出。

    使N(N+1)不大于0C78H,此时N=BL-2=56,56×57=0C78H,根据S=1+2×3+3×4+4×5+…+N(N+1)=                                                                 

  • 与程序运行结果中DX一致,所以程序功能正确。                                                                        

  • 2(6)查看 3007 内存单元或寄存器 BL 中的内容,结果应为 03。 

    程序运行结果BX为CC03H,即BL为03,根据二进制有符号数的表示方法可知负数分别为88,82,90。结果正确。                                                                                                              

思考题

1.分析 N(N+1)累加程序中,N 能取的最大值是多少?

DX结果若大于 0FFFFH 将产生数据溢出。所以让DX最高位无进位即可,程序见上实验程序——思考题1程序,实验结果如下图,N的最大值=BL-2-1=3BH-2-1= 56。当N=56时,DX=FDF9H,CF=0; 当N=57时,DX=0B57H,CF=1,溢出。所以N的最大值是56。

;思考题1程序:
SSTACK	SEGMENT STACK
		DW 64 DUP(?)
SSTACK	ENDS
CODE	SEGMENT
		ASSUME CS:CODE,SS:SSTACK 

START:	MOV DX,0001H
        MOV BX,0002H

A1:     MOV AL,BL
        INC BL
        MUL BL
        ADD DX,AX
JNC A1

MOV AX,4C00H
INT 21H
CODE	ENDS
		END START

 

2. 求某数据区内负数个数程序中,如果同时要统计正数和零的个数,程序应如何修改,试编程验证

数据区除了负数就是正数和零,所以可以在判断负数的步骤加个储存正数和零的分支程序,流程图如下,程序见四实验程序——思考题2程序,

 

;思考题2程序:
SSTACK	SEGMENT STACK
		DW 64 DUP(?)
SSTACK	ENDS
CODE	SEGMENT
		ASSUME CS:CODE,SS:SSTACK

START: XOR AX,AX
       XOR SI,AX                              ;SI置0
       XOR BH,BH
MOV DI,3000H                            ;数据区首地址
      MOV CL,[DI]                             ;数据个数
      MOV CH,00H                              ;CH置0
      MOV BL,00H                              ;BL置0
      INC DI                                  ;DI增1
A1:
      MOV AL,[DI]
      TEST AL,80H                             ;数据首位=1?
      JZ A2
INC BL
JMP A4
A2:  CMP AL,00H
     JZ A3
     INC SI
     JMP A4
A3:  INC BH
A4:  INC DI
     LOOP A1   
      
     MOV [DI],BL                               ;保存结果 
     MOV [DI],SI
     MOV [DI],BH
     MOV AX,4C00H
     INT 21H
CODE ENDS
     END START

 实验结果如下图,SI为0003H,BH 为00H,BL为03H,所以正数的个数为3,零的个数为0,负数个数为3.

 

  • 实验心得

    通过本次循环程序设计实验中,在进行程序编写之前一定要先画流程图,根据流程图进行程序编写可以更好梳理编码逻辑和找出错误,寄存器储存结果若大于 0FFFFH 将产生数据溢出。循环程序设计有3个组成部分(1)循环初始部分——为循环的开始准备必要的条件,如循环次数、循环体需要的数值等(2)循环体部分——也就是重复执行的代码,其中要包括对循环条件等的修改程序段(3)循环控制部分——判断循环条件是否成立,才决定是否循环。

标签:CODE,DI,BL,程序,MOV,微机,循环,SSTACK,程序设计
From: https://blog.csdn.net/qq_62665087/article/details/140755158

相关文章

  • 选择语句加循环语句题目练习
    选择语句+循环语句作业一、填空题Java中有两种类型的选择结构的控制语句,分别是if语句和switch。在JavaJDK1.7之前,switch只能支持byte、short、char、int或者其对应的封装类以及Enum类型。在JDK1.7中又加入了String类型。for循环的语法格式是for(表达......
  • 事件循环-
    事件循环(EventLoop)是JavaScript运行时(例如浏览器或Node.js)的一种机制,用于处理异步编程。它允许非阻塞操作,即使在某些任务需要等待(如网络请求或定时器),JavaScript也可以继续执行其他代码。事件循环的基本概念调用栈(CallStack):JavaScript是一门单线程语言,这意味着它一次只能......
  • 循环结构
    循环结构for循环:格式:for(初始化表达式;条件表达式;更新表达式){//循环体}使用:适合于已知循环次数的情况。while循环:格式:while(条件表达式){//循环体}使用:适合于循环次数未知,但需要在循环开始前检查条件的情况。do-while循环:......
  • 校园闲置物品交易小程序设计与实现/校园二手物品交易网站/计算机毕业项目/课程设计
    摘  要近年来,随着网络产业的飞速发展,人们的日常生活和工作方式也随之发生变化。许多学校正在把常规的工作方式与因特网相融合,借助因特网的力量来提升管理者的工作能力。当前很多校园闲置物品交易流程都有很多的不便性,所以针对校园闲置物品交易的实际情况,提出可以针对校园闲......
  • TypeError:ufunc 的循环不支持 dict 类型的参数 0,该类型没有可调用的 sqrt 方法
    我遇到了一个错误:psi_out_norm.append(np.sqrt(sorted_probs))TypeError:loopofufuncdoesnotsupportargument0oftypedictwhichhasnocallablesqrtmethod不知道如何解决此错误。下面是我正在处理的代码:num_qubits=2sorted_probs={'00':0.182613164......
  • C语言——循环语句
            C语言是结构化的程序设计语言,这里的结构是指:顺序结构、循环结构、选择结构。在C语言中,有三种循环语句,下文将一一介绍如何在C语言编程时使用。1.while语句        while语句的语法形式如下:1while(表达式);2{    语句;    }   ......
  • JAVA程序设计——二维小游戏制作
    二维小游戏制作一、课题内容和要求1.课题内容:(1)学生需要针对游戏类应用软件(如数独,扫雷,飞机大战,贪食蛇,青蛙过河等,鼓励自己设计开发游戏)的开发,使用互联网信息检索工具,查找和学习游戏类软件开发相关理论,分析和研究开放源代码;选择合适的JAVA开发工具完成软件项目的创建,代码编写......
  • ADS环境下的ARM汇编程序设计实验报告
    ADS环境下的ARM汇编程序    一、实验目的1.了解ARM汇编语言的基本框架,学会使用ARM的汇编语言编程。2.熟悉ADS1.2下进行汇编语言程序设计的基本流程;3.了解AXD中调试功能。二、实验环境硬件:PC机软件:ADS1.2三、实验任务与步骤实验任务1、在ADS中新建工程,并设置......
  • 【每日一题 | 数据结构】循环队列
    题目题型讲解核心:所有的循环队列的题,都使用“圆盘法”,即画图来解决。而不要死记公式!!循环队列即将队列空间想象为一个环形的空间,当front或rear位于线性表的最后一个元素时,再加1会回到第一个元素,如图所示:因此,基于这个特性,我们就可以用取模法来计算队列的最大长度等问题......
  • 在Python中,为什么这个负浮点数能够通过非负while循环测试条件?
    在Python中工作收集用户输入输入需要非负在程序的另一部分成功使用了While条件但现在不明白为什么这个捕获有效输入的测试失败了。print("Howmanygramsofxyzarerequired?")xyz_string=input()xyz=int(float(xyz_string))whilex......