循环程序设计

题目直接给出:)

一、实验目的: 掌握汇编语言中循环程序的设计与实现,并熟悉数组的使用。熟悉汇编语言 中相应排序算法的实现。  
二、实验内容: 设有两个数组 A 和 B,其数据均为 20 个。编程实现将两个数组中的数据各 自按由小到大的顺序存放。之后,再将既在 A 数组中出现又在 B 数组中出现的 整数按照由大到小的顺序存放于数组 C 中。  
三、实验步骤:  

(1)、分析所要解决的问题,选择合适的循环结构与排序算法。  

(2)、自己画出清晰详细的程序流程图。  

(3)、编写程序,上机调试运行。  
四、实验时间: 共 3 学时。  
五、实验要求: 

(1)、完成实验报告,画出程序流程图。 

(2)、上交程序源代码,要有详细的程序注释。 

(3)、要求在屏幕上输出数组A和B排序前及排序后的内容,以及数组C 的内容。 

(4)、进一步熟悉汇编程序的撰写、汇编、连接、运行和调试的全过程。 

***********************************************************************************************************************

先进行题目分析,步骤共有两个:首先是排序,这里我们选用冒泡排序的算法,由于博客不支持贴图,我们就理解一下就行了,冒泡嘛…………,自古以来流程图都一个样的;其次就是再依次扫描一下A和B两个数组了循环一遍就可以了。

下面我们来具体的代码实现:

首先,定义需要用到的变量:

DATAS SEGMENT
    A DW 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 
    COUNTA EQU ($-A)/2
    B DW 19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
    COUNTB EQU ($-B)/2
    D DW 20 DUP(?)
DATAS ENDS

然后对A和B用冒泡算法排序有(这里给出对A的排序):

    ;A排序************************************************
    MOV CX,COUNTA-1
I10:
	XOR SI,SI
	XOR DI,DI
	
I20:
	MOV AX,A[SI]
	MOV BX,A[SI+2]
	CMP AX,BX
	
	JL  I30
	MOV A[SI],BX
	MOV A[SI+2],AX
	
I30:
	ADD SI,2
	INC DI
	CMP DI,CX
	
	JB  I20
	Loop I10

按照之前的流程,下面扫描一遍A,B,得出C数组:

    MOV AX,COUNTA
    ADD AX,AX
    SUB AX,2
    MOV SI,AX
    MOV AX,COUNTB
    ADD AX,AX
    SUB AX,2
    MOV DI,AX
    XOR BP,BP
I12:
	CMP SI,0
	JNE I22
	CMP DI,0
	JNE I22
	JMP I25
	
I22:
							
	JNE I23
	MOV BX,A[SI]
	MOV D[BP],BX
	ADD BP,2
	SUB SI,2
	SUB DI,2
	JMP I12
	
I23:
	MOV BX,B[DI]
	CMP A[SI],BX
	JG I24
	SUB DI,2
	JMP I12

I24:
	SUB SI,2
	JMP I12

I25:    
    MOV AH,4CH
    INT 21H




这样,我们就得到最终的结果了,现在为止还没有看到排好序的A和B以及新生成的C数组,不用担心,我们可以用前一章的21H中断来输出每一个元素,也可以用debug来看一下内存中的结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值