汇编入门程序,冒泡排序

article/2025/9/18 3:41:44

写了半天发现资料不多,放上来造福一下人类,主要题库的题也好多题解太少

用汇编语言编写程序,要求实现以下功能:

程序执行后,屏幕显示提示信息:“Please Enter The Password:”,等待输入用户的5位密码(含字母和数字)。密码输入后,与程序内设定的密码相比较,如果比较结果正确,显示“Welcome To Scce!”,如果不正确,则显示你的学号和姓名拼音。

请在答题时,按照以下格式填写内容:

1、程序源代码(包含必要的注释信息)

2、程序运行截图

DATA    SEGMENT
INPUT   DB  "Please Enter The Password:",'$'        
PASS    DB  "12345",'$'
OUTPUT  DB  "Welcome To Scce!",'$'  
ERR     DB  "PASSWORD ERROR!",'$'
BUFFER  DB  20          ;预定义20字节的空间DB  0          ;待输入完成后,自动获取输入的字符个数DB  20  DUP(0)
CRLF    DB  0AH,0DH,'$'
DATA    ENDSSTACK   SEGMENT STACKDW  20  DUP(0)  ;在此输入堆栈段代码
STACK   ENDSCODE    SEGMENT
ASSUME  CS:CODE,DS:DATA,SS:STACK
START:MOV AX,DATAMOV DS,AX   LEA DX,INPUT        ;打印提示输入信息INPUTMOV AH,09HINT 21H     LEA DX,BUFFER       ;接收字符串BUFFERMOV AH,0AHINT 21H       MOV AL,BUFFER+1     ;对字符串进行处理ADD AL,2MOV AH,0MOV SI,AXMOV BUFFER[SI],'$'LEA SI,BUFFER+2PUSH    DSPOP ESLEA DI,PASSMOV CX,0MOV CL,BUFFER+1CLDREPE    CMPSBJNZ NOTMATCH       ;不相等跳出,ZF=0   LEA DX,CRLF         ;另取一行             MOV AH,09HINT 21H  LEA DX,OUTPUT       ;打印提示输出信息OUTPUTMOV AH,09HINT 21HJMP NEXTNOTMATCH:LEA DX,CRLF         ;另取一行MOV AH,09HINT 21HLEA DX,ERR        ;打印提示输出信息PASSERRORMOV AH,09HINT 21HNEXT:    MOV AH,4CH          ;返回DOS系统INT 21H
CODE    ENDS
END START

在这里插入图片描述
在这里插入图片描述

用汇编语言编写程序,实现冒泡排序功能。要求,从屏幕输入15个100以内的数,用冒泡法对其从小到大排序,在屏幕上显示每一步排序的过程。排序功能用子程序实现。

请在答题时,按照以下格式填写内容:

1、程序源代码(包含必要的注释信息)

2、程序运行截图
贴一个链接,他的冒泡感觉有点怪我换成书上的了
冒泡参考代码

DATAS SEGMENT
SINPUT DB 'welecome and please input the 15 N:$'
SINPUTNUM DB 'please input the number with index number $'
SSHOWNUMDATA DB 'The contents of the array are: $'
SSHOWSORTNUM DB 'The contents of the sorted array are: $'
SSHOWINSORTNUM DB 'The contents IN the sorted array are: $'
BUF1 DB 20HDB  0DB 20H DUP(0)
NUM  DW  ?
N     DW  ?
NUMDATA DW 0FFH DUP(-1);最大容量256       DATAS ENDSSTACKS SEGMENT PARA STACKDW 30H DUP(0)
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATASMOV DS,AXMOV AH,09H      ;显示字符串LEA DX,SINPUT   ;取段内偏移地址INT 21H         ;调用系统dos中断MOV DL,0DH      ;回车换行MOV AH,2        INT 21H         MOV DL,0AH      MOV AH,2        INT 21H    MOV NUM,4H     ;赋值15                    MOV AX,NUM;     ;借用AX将键盘输入的NUM转给NMOV N,AX;;一个循环,实现数组读取MOV CX,N        ;设置循环次数
L1:;这一段显示提示文字MOV AH,09H      ;显示字符串LEA DX,SINPUTNUMINT 21H           MOV BX,N        ;总循环次数SUB BX,CX       ;相减INC BX          ;加一;此时BX为当前循环次数MOV NUM,BX      ;当前数字存进去   CALL SHOWNUM    ;调用显示数字子程序MOV DL,' '      ;传送字符MOV AH,2        ;显示一个字符INT 21H          MOV DL,':'      ;传送字符MOV AH,2        ;显示一个字符INT 21H         MOV AH,0AH      ;键盘输入到缓冲区LEA DX,BUF1     INT 21H         CALL STOI       ;调用输入处理子程序;借用AX将键盘输入的NUM转给NUMDATAMOV BX,N            ;总循环次数SUB BX,CX           ;相减;此时BX为当前循环次数MOV AX,NUM          ;当前数字存进去MOV NUMDATA[BX],AX  ;放进数组中  LOOP L1                 ;循环MOV AH,09H          ;显示原始字符串LEA DX,SSHOWNUMDATAINT 21H             CALL SHOWNUMDATA    ;调用子程序显示数组内容CALL SORTNUM        ;调用冒泡排序算法MOV AH,09H          ;显示字符串,排序后的数组为:LEA DX,SSHOWSORTNUMINT 21H             CALL SHOWNUMDATA    ;调用子程序显示数组内容;程序终止代码MOV AX,0MOV AH,4CHINT 21H;这是一段子程序,用来进行冒泡排序
SORTNUM PROCMOV CX,N        ;设置大循环次数DEC CX          ;总次数减一为外循环次数
OUTLP:MOV DX,CX           ;DX内循环个数MOV BX,OFFSET NUMDATA
INLP:MOV AL,[BX]         ;取前一个元素CMP AL,[BX+1]       ;与后一个元素比较JNA NEXT            ;前一个元素不大于后一个元素,则不进行交换XCHG    AL,[BX+1]   ;否则,进行交换MOV [BX],AL
NEXT:INC BX              ;下一对元素DEC DXJNZ INLP            ;内层循环PUSH    AXPUSH    BXPUSH    CXPUSH    DXMOV AH,09H          ;显示字符串,排序中的数组为:LEA DX,SSHOWINSORTNUMINT 21H                 CALL SHOWNUMDATA    ;调用子程序显示数组内容    POP DXPOP CXPOP BXPOP AXLOOP    OUTLP       ;外循环尾   RET
SORTNUM ENDP    ;这是一段子程序,用来输入数字
STOI PROC;初始化MOV DX,0MOV BX,10MOV SI,2MOV NUM,0MOV AX,0
LOP:MOV AL,BUF1[SI] ;寄存器相对寻址,从缓冲区取一个字符CMP AL,0DH      ;是否是CRJE  FINAL       ;等于就跳转,JNE相反SUB AL,30H      ;减48,从ASCII码转数字CMP NUM,0       ;与0比较,相当于判断初始化JE  DO_DEAL     ;等于就跳转,JNE相反PUSH AX         ;当前数字压入栈中MOV AX,NUM      ;当前数送入运算寄存器中MUL BX          ;隐含寻址,在AX中,相当于NUM乘以10MOV  NUM,AX     ;运算结果存进NUM中  POP AX          ;之前的数据弹出
DO_DEAL:ADD NUM,AX      ;加上之前的数据MOV AX,0        ;清零INC SI          ;自加1JMP LOP         ;跳转,处理下一个
FINAL:MOV DL,0DH      ;回车换行MOV AH,2        INT 21H         MOV DL,0AH      MOV AH,2        INT 21H         
RET                 
STOI ENDP;这是一段子程序,用来显示数字NUM
SHOWNUM PROC;第一位MOV BL,100      ;%先除100MOV AX,NUM      ;送入运算寄存器DIV BL          ;除法,AX隐含寻址ADD AL,30H      ;商转换为ASCII码PUSH AX         ;将余数先压入栈中CMP AL,30H      ;看一看首位是不是0JE BITTWO       ;若是,则不显示直接跳转到下一个MOV DL,AL       ;传送字符MOV AH,2        ;显示一个字符INT 21H         
BITTWO:    POP AX          ;将余数取出;第二位MOV AL,AH       ;送入运算寄存器MOV AH,0        ;高位清零MOV BL,10       ;%再除以10DIV BL          ;除法,AX隐含寻址ADD AL,30H      ;商转换为ASCII码PUSH AX         ;将余数先压入栈中CMP NUM,10      ;看一看数是不是小于10JB BITTTHREE    ;若是,则不显示第二位直接跳转到末位MOV DL,AL       ;传送字符MOV AH,2        ;显示一个字符INT 21H         ;调用系统dos中断
BITTTHREE:POP AX          ;将余数取出;第三位ADD AH,30H      ;余数转换为ASCII码MOV DL,AH       ;传送字符MOV AH,2        ;显示一个字符INT 21H         ;调用系统dos中断RET                 ;子程序退出重置堆栈
SHOWNUM ENDP;这是一段子程序,用来显示数组NUMDATA
SHOWNUMDATA PROCMOV CX,N        ;设置循环次数为数组大小MOV BX,0        ;循环计数
L4:PUSH BX             ;将循环计数存入堆栈MOV AX,NUMDATA[BX]  ;从数组中读取当前数字,一次取一个字,两个字节MOV AH,0            ;高位清零MOV NUM,AX          ;将AX低位数据传送到NUMCALL SHOWNUM        ;调用子程序显示数字MOV DL,','          ;传送字符MOV AH,2            ;显示一个字符INT 21H             POP BX              ;将循环计数从堆栈中取出INC BX              ;计数自加1
LOOP L4                 ;换行MOV DL,0DH          ;CRMOV AH,2            ;显示一个字符INT 21H             MOV DL,0AH          ;LFMOV AH,2            ;显示一个字符INT 21H             
RET                     ;子程序退出重置堆栈
SHOWNUMDATA ENDPCODES ENDSEND START

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/IoAamYEB.shtml

相关文章

汇编语言实现冒泡排序

文章目录 题目简述思路代码总结 题目简述 给定10个数,使用汇编语言,实现10个数的冒泡排序,使之成为升序 思路 本题中,我们需要使用条件转移指令,比较指令(CMP),交换指令&#xff…

微机原理实现冒泡排序

微机原理实现冒泡排序 废话不说先放题目 实验目的 1) 学会从键盘中读取输入,并将其ASCII码进行转化。 2) 利用所学的冒泡排序对数组进行输出 3)学会使用中断程序进行字符的输出。 实验所用仪器及使用方法 Windows emu8086仿…

MIPS实现冒泡排序

程序目标 从键盘输入10个无符号字数并从大到小进行排序,排序结果在屏幕上显示出来。 准备工作 编程的入门级知识:循环、冒泡排序、内存和堆栈的概念MIPS语法:程序基本结构汇编语言:不同寄存器作用、数据存储、系统调用编辑器&a…

c语言数组实现冒泡排序

数组实现冒泡排序 什么是冒泡拍排序用数组实现总结 什么是冒泡拍排序 首先,需要了解一下什么是冒泡排序,定义:冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个…

汇编实现排序——冒泡排序

冒泡排序算法的运作如下:(从后往前) 1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。…

冒泡排序与qsort排序

先来比较两者的优缺点&#xff1a; 冒泡排序qsort排序优简单&#xff0c;稳定效率高&#xff0c;适用性广劣适用性差&#xff0c;速度慢较为复杂 一、冒泡排序&#xff1a; 底层思路&#xff1a; 如此循环9轮得到 知道了思路就可以写代码了 #include<stdio.h> void bubbl…

易语言冒泡排序

冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排序完成。这个算…

实现冒泡排序函数

#1 冒泡排序思想 假设我们现在又是个乱序的数字&#xff0c;10 2 3 4 1 6 8 5 9 7&#xff0c;要对这十个数字进行升序排序&#xff08;越往右数字越大&#xff09;&#xff0c;我们可以这样子做&#xff1a; 取出最左边的数字&#xff08;10&#xff09;&#xff0c;然后依次…

用汇编实现冒泡排序

对应的C语言代码如下&#xff1a; int number[6]{12,3,2,5,6,7}; for(int i0;i<6;i) {for(int j0;j<6;j) {if(a[i]<a[j]) {int tempa[i];a[i]a[j];a[j]temp;}} } 汇编代码&#xff08;从大到小排列&#xff09;&#xff1a; DATA SEGMENTBUF DB 12,3,2,5,6,7 …

c语言冒泡排序while循环,冒泡排序算法,C语言冒泡排序算法详解

冒泡排序是最简单的排序方法&#xff0c;理解起来容易。虽然它的计算步骤比较多&#xff0c;不是最快的&#xff0c;但它是最基本的&#xff0c;初学者一定要掌握。 冒泡排序的原理是&#xff1a;从左到右&#xff0c;相邻元素进行比较。每次比较一轮&#xff0c;就会找到序列中…

冒泡排序与qsort函数详解

提及到排序&#xff0c;冒泡排序算是一个很基础的排序了。那么冒泡排序到底是什么呢&#xff1f;冒泡排序在什么情况下使用呢&#xff1f;qsort函数又是什么呢&#xff1f;接下来我给大家通过举例来详细解释一下。 引入 这里给大家一个题目&#xff0c;大家可以简单思考一下&am…

模仿qsort功能实现一个冒泡排序

目录 1.简单介绍qsort 2.模仿qsort实现冒泡排序 qsort函数原型 void qsort (void* base, size_t num, size_t size,int (*compar)(const void*,const void*)); 一些解释: 1.base:指向要排序数组的第一个对象 类型为void* 2.num:base所指向数组的元素总数…

字符串的冒泡排序

字符串的冒泡排序 本题要求使用冒泡排序法对任意给定的N个字符串按从小到大排序&#xff0c;输出扫描完第K&#xff08;K<N&#xff09;遍后的中间结果序列。 输入格式&#xff1a; 输入在第1行中给出N和K&#xff08;1≤K<N≤100&#xff09;&#xff0c;此后N行&…

冒泡排序(C语言)

文章目录 1. 冒泡排序如何实现1.1 冒泡排序函数的错误设计1.2 数组名是什么&#xff1f;1.3 冒泡排序函数的正确设计 1. 冒泡排序如何实现 往往我们在写代码的时候&#xff0c;会将数组作为参数传个函数&#xff0c;比如&#xff1a;我要实现一个冒泡排序&#xff08;这里要讲算…

模仿qsort实现一个冒泡排序的通用算法

&#x1f4a5;qsort函数介绍&#x1f4a5;冒泡排序介绍&#x1f4a5;什么是冒泡排序的通用算法&#x1f4a5;模仿qsort的一个冒泡排序的通用算法&#x1f4a5;结语 &#x1f525;qsort函数介绍 在一些编程题中经常需要你按照某个指标按照从小到大或从大到小输出一些数据&#x…

c语言冒泡排序数组指针,c语言冒泡排序,指针,数组

冒泡排序算法的运作如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面…

汇编——实现冒泡排序+讲解

题目描述&代码 有一个首地址为A的N字数组&#xff0c;编写程序采用冒泡排序使该数组中的数按照从大到小的次序整序。 数据存储在A的数组中&#xff08;即内存中&#xff09;&#xff0c;我们需要利用冒泡排序实现从大到小排序。 ;description data SEGMENT USE16a dw …

实现一个通用的冒泡排序 - C语言

一、前言 在对一组数组进行排序是&#xff0c;我们经常用到冒泡排序&#xff0c;它是一种较简单的排序算法。 冒泡排序的原理如下&#xff1a; 比较相邻的两个元素。如果第一个比第二个大&#xff0c;就交换它们两个。对每一对相邻元素做同样的工作&#xff0c;从开始第一对到…

第三次项目需求文档

北京理工大学大学疫苗接种系统 文章目录 一.UML图1.用例图2.类图3.活动图4.顺序图 二.需求规格说明文档1.需求和功能说明1.1.获取的功能需求.2.功能划分1.2.1.登录界面1.2.2.预约服务1.2.3.接种查询 2.工作量展示2.1.需求获取2.1.1.项目前景和范围2.1.2.涉众分析2.1.4.面谈 2.…

项目文档编写规范

此文件是 项目文档编写规范 的 readme 编写范例&#xff0c;点击 我要改进 即可查看其 Markdown 内容。 项目概述 产品名称&#xff1a;LaraBBS 项目代号&#xff1a;larabbs 官方地址&#xff1a; https://learnku.com/laravel/t/6592 LaraBBS 是一个简洁的论坛应用…