题目直接给出:)
一、实验目的: 掌握汇编语言中循环程序的设计与实现,并熟悉数组的使用。熟悉汇编语言 中相应排序算法的实现。
二、实验内容: 设有两个数组 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来看一下内存中的结果。