汇编-排序实验

一、实习目的

掌握用汇编语言编写程序的思路和方法。

二、实习内容

从首地址为1000H开始存放10个数,要求设计程序将这些数由小到大排序,排序后的数仍放在原地址处。

三、代码

data segment
   count   db  10;
   array   db  12,34,56,21,234,54,45,58,96,14;
   msgOne  db  'The source array number is:','$'
   msgTwo  db  0ah,0dh,'The sorted array number is:','$'
   c10     db  10;
data ends

myStack segment stack
           db  100 dup(?)
myStack ends

code segment
  assume DS:data,CS:code
start:
  mov ax,data;
  mov DS,ax;

  lea dx,msgOne;          输出排序前的数组
  mov ah,09h;
  int 21h;
  mov ch,0;
  mov cl,count;
  mov bx,0;
outPutSource:
  mov ah,0;
  mov al,array[bx];
  call printNum;

  mov dl,' '
  mov ah,02h;
  int 21h;

  inc bx;
  loop outPutSource

  lea si,array;        设置参数,调用排序函数
  mov ch,0;
  mov cl,count;
  call mySort;

  lea dx,msgTwo;        输出排序后的数组
  mov ah,09h;
  int 21h;
  mov ch,0;
  mov cl,count;
  mov bx,0;
outPutSortedArray:
  mov ah,0;
  mov al,array[bx];
  call printNum;

  mov dl,' '
  mov ah,02h;
  int 21h;

  inc bx;
  loop outPutSortedArray

  mov ax,4c00h;
  int 21h;

mySort proc;         数组排序,si中存放数组偏移地址,cx中存放数组元素个数  push ax;
  push cx;
  dec cx;
  mov ax,0;
loopOne:
  push cx;
  push si;

    loopTwo:
      mov al,byte ptr[si];
      cmp al,byte ptr[si + 1];
      jbe next;

      xchg al,[si + 1];
      xchg al,[si];

    next:
      inc si;
    loop loopTwo

  pop si;
  pop cx;
  loop loopOne

  pop cx;
  pop ax;
  ret

printNum proc;       将al中存放的数字以十进制形式输出
  push ax;
  push dx;
  push cx;

  mov cx,0;
tranToChar:
  mov ah,0;
  cmp al,0;
  jz  outTranToChar;

  div c10;
  mov dl,ah;
  mov dh,0;
  push dx;

  inc cx;
  jmp  tranToChar;

outTranToChar:
  cmp cx,0;
  jz exit_printNum

print:
  pop dx;
  add dx,30h;
  mov ah,02h;
  int 21h;
  loop print

exit_printNum:
  pop cx;
  pop dx;
  pop ax;
  ret;

code ends
end start

四、运行结果



时间: 2024-10-08 22:14:46

汇编-排序实验的相关文章

汇编设计实验1

实验1 查看CPU的内存,用机器指令和汇编指令编程 用到的debug功能有: R命令查看,改变CPU寄存器的内容 D命令查看内存中的内容 E命令改写内存中的内容 U命令将内存中的机器指令翻译成汇编指令 T命令执行一条机器指令 A命令以汇编指令的格式在内存中写入一条机器指令 1.首先下载Dosbox和debug.exe,并配置文件. 2.进入dosbox环境,查看配置是否正确 3.运行命令 R命令查看CPU寄存器的内容 R命令改变CPU寄存器的内容 D命令查看内存中的内容 E命令改写内存中的内容

汇编设计 实验1

实验1 查看CPU的内存,用机器指令和汇编指令编程 用到的debug功能有: R:命令查看,改变CPU寄存器的内容 D:命令查看内存中的内容 E:命令改写内存中的内容 U:命令将内存中的机器指令翻译成汇编指令 T:命令执行一条机器指令 A:命令以汇编指令的格式在内存中写入一条机器指令 1.首先下载DOSBOX 按照老师提供博客的方法进行安装和配置 2.运行命令 R 寄存器查看及修改 D 查看内存 E 改写内存中内容 U 翻译指令 3.实验任务1:使用Debug,将下面的程序段写入内存,逐条执行,

AOV拓扑排序实验总结-1

实验数据:1.实验输入数据在input.txt文件中2.对于n是指有顶点n个,数据的结束标志是一行0 0. 实验目的:获取优秀的AOV排序算法模板 数据结构安排:1.队列:负责记录入度为0且没有排序的AOV顶点2.邻接表结点:邻接表结点采用自定义的复合结构,保存顶点信息.边表头指针.3.邻接表边表:采取链表的形式存储数据4.邻接表的数据类型是相同的,只是在概念上使得结点独特的保存了当前起始顶点5.按照vertex的编号独立的使用一个数组indegree保存入度,一定程度的节省了空间 实验内容:1

4.2矩阵排序实验

#include <stdio.h> #define M 4 /****----------------------------------------------*****/ //函数名: BubblesSort(int list[], int n) //参数: (传入)int list[],待排序数组 // (传入)int n,数组长度 //功能: 使用冒泡排序对书序进行排序 /****----------------------------------------------*****/

汇编小实验1

进入DEBUG后,首先用命令R查看当前DS内容,记录此值,假设为X.在DEBUG下汇编.调试完成下列功能的程序. 1):将内容F000:2000H起30H个字数据传送到内存X:1000H开始处 这里是把一个单元的数据复制到另外的单元,而且是连续的数据,所以肯定要用到循环,由于这两个DS内容的不同,所以再进行复制的时候,要对ds进行复制操作,具体的看如下的代码. 1 MOV CX,30 2 MOV SI,2000 3 MOV DI,1000 4 AGAIN:MOV BX,F000 5 MOV DS

多关键字排序实验

一.实习目的 了解多关键字的使用范围:编写程序实现对汽车牌照的排序. 二.实验原理 了解多关键字的使用范围,并实现对牌照按多关键字排序后的快速查找. [问题描述] 为加快速度需先对数据记录按关键字排序,在汽车数据模型中,汽车是关键字,而且是具有结构特点的一类关键字.因为汽车牌照是汉字,字母和数字混编的,例如:AD7328.这种记录集合是一个适于利用多关键字进行排序的典型例子. [基本任务] (1)利用链式基数排序方法实现排序. (2)在排序的基础上,利用二分查找的思想,实现对汽车记录按关键字的查

生成一个整型数组,以便各种排序实验使用

上机环境:操作系统windows10,开发环境vs2017 生成一组10个随机数并写入文件 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<time.h> void genarray(int a[],int *b) { time_t t; int mynum; FILE *fp = fopen("E:\\myarray.txt", "

【数据结构】排序番外篇 堆,堆排序与其前身选择排序

堆 优先队列:特殊的"队列",取出元素的顺序是依照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序 堆是优先队列的完全二叉树表示. 堆的两个特性: ①结构性:用数组表示的完全二叉树 ②有序性:任意结点的关键字是其子树所有结点的最大值,叫最大堆(或最小值,叫最小堆)(注意从根结点到任意结点路径上结点序列的有序性) 下面举一个最大堆的例子. /** 最大堆的操作 */ typedef struct HeapStruct *MaxHeap; struct HeapStruct { E

实验--反汇编一个简单的C程序(李鹏举)

  攥写人:李鹏举  学号:20132201 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ) 实验部分(以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同) 使用gcc –S –o main.s main.c -m32命令编译成汇编代码. 代码如下: int g(int x) { return x + 8; } int f(i