⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sort.asm

📁 这是用汇编写的一个排序算法,我个人认为前面的排序算法和数据输入存储方法很好!共享一下
💻 ASM
字号:


;========================================================
;子程序名:SORT.ASM
;功能:从键盘输入一个数组,将其保存,并将其排序,最后输出
;========================================================


MLENGTH EQU 50
N EQU 10
DATA SEGMENT
 STRING DB 'Please input the arry which you want to sort:',0DH,0AH,'$'
 BUFFER DB MLENGTH ;调用0A号功能的缓冲区
        DB ? ;实际长度
        DB 4 DUP(?)
 BUFF DB MLENGTH DUP(?),'$';保存输入的数组
 TABLE DB 0,1,10,100
 STR DB 0DH,0AH,'The arry after sorting is:',0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
 ASSUME CS:CODE,DS:DATA
START:
 MOV AX,DATA
 MOV DS,AX
 MOV DX,OFFSET STRING
 MOV AH,09H
 INT 21H

;====================================================
;以下是关于输入的代码
;====================================================

 MOV DI,OFFSET BUFF
 MOV CL,10;设置循环计数标志
 XOR CH,CH
NEXT:
 PUSH CX
 MOV SI,OFFSET BUFFER+2;存放字符的缓冲区首地址
 MOV DX,OFFSET BUFFER;输出提示信息
 MOV AH,0AH
 INT 21H
 CALL INPUT;调用输入子程序
 CALL NEWLINE;回车换行子程序
 POP CX
 LOOP NEXT

;=====================================================
;以下是关于排序的代码
;=====================================================

 CALL SORT;调用排序子程序

;=====================================================
;以下是关于输出的代码
;=====================================================

 MOV DX,OFFSET STR
 MOV AH,09H
 INT 21H
 MOV CL,10;设置输出时候的计数标志
 XOR CH,CH
 MOV SI,1
;======================================================
SHUCHU:
 CALL OUTPUT;调用输出子程序
 CALL NEWLINE;调用回车换行子程序
 LOOP SHUCHU
;======================================================
 MOV AX,4C00H
  INT 21H


;=====================================================
;子程序名:INPUT
;功能:调用0A号功能从键盘输入一个数组,放在BUFF缓冲区中
;======================================================


INPUT PROC
  MOV DX,0
  MOV CL, BUFFER+1
  XOR CH,CH
NEXT1:
  MOV BX,CX
  MOV AL,[SI]
  INC SI
  ;INC SI
  SUB AL,30H
  MOV BL,TABLE[BX]
  MUL BL
  ADD DX,AX
  LOOP NEXT1
  MOV [DI],DL
  INC DI
  ;INC DI
  RET
INPUT ENDP


;=====================================================
;程序名:NEWLINE
;功能:输出回车换行
;=====================================================


NEWLINE PROC
   PUSH AX
   PUSH DX
   MOV DL,0DH
   MOV AH,02H
   INT 21H
   MOV DL,0AH
   MOV AH,02H
   INT 21H
   POP DX
   POP AX
   RET
NEWLINE ENDP
;=====================================================
;子程序名:SORT
;功能:对BUFF中的数组进行排序
;=====================================================
SORT PROC
  MOV BX,OFFSET BUFF-1
  MOV SI,1
FORI:
  MOV DI,SI
  INC DI
FORJ:
  MOV AL,[BX+SI]
  CMP AL,[BX+DI]
  JBE NEXTJ
  XCHG AL,[BX+DI]
  MOV [BX+SI],AL
NEXTJ:
  INC DI
  CMP DI,N
  JBE FORJ
NEXTI:
  INC SI
  CMP SI,N-1
  JBE FORI
  RET 
SORT ENDP

;============================================================
;子程序名:OUTPUT
;功能:将排好序的数组输出
;============================================================

OUTPUT PROC
  MOV BX,OFFSET BUFF-1
  MOV AL,[BX+SI]
  INC SI
  XOR AH,AH
  MOV BL,10
  DIV BL
  MOV BL,AH
  CMP AL,0
  JZ  YU
  ADD AL,30H
  MOV DL,AL
  MOV AH,2
  INT 21H
YU:
  ADD BL,30H
  MOV DL,BL
  MOV AH,2
  INT 21H
  RET
OUTPUT ENDP
  
CODE ENDS
   END START

   
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -