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

📄 输入一组十进制数,按从小到大到顺序输出。.txt

📁 通过汇编语言设计将输入一组十进制数
💻 TXT
字号:
输入一组十进制数,按从小到大到顺序输出。

输入:126,78,456,3,890  (注意“,”这个逗号)
输出:3,78,126,456,890  

STACK SEGMENT STACK
 DB 128 DUP(0)
STACK ENDS
DATA SEGMENT
ARR DW 50 DUP(?) ;存放输入的数 
STR DW 50 DUP(?) ;输出字符串
COUNT DW   ?         ;输入数的个数
DATA ENDS
CODE  SEGMENT
 ASSUME CS:CODE,SS:STACK,DS:DATA
START: MOV AX,DATA
 MOV DS,AX
        MOV AX,STACK
 MOV SS,AX

 LEA SI,ARR
 MOV DI,0    ;DI用来标志是否输入了回车
L1: CALL DCB    ;将输入的十进制数化为二进制存在BX
 INC COUNT
 MOV [SI],BX
 CMP DI,0    ;有回车是,输入结束
 JNZ L2
 ADD SI,2
 JMP L1

L2: CALL BBB     ;回车换行
 SUB COUNT,1  ;将输入个数减1
 CALL SORTP   ;采用冒泡排序法

 ADD COUNT,1  ;输入个数加1,即为原输入个数
 MOV CX,COUNT
 LEA DI,ARR
 LEA SI,STR
L3: MOV AX,[DI]
 CALL BCD   ;将AX中的进制数化为十进制依次存在[SI]
 ADD DI,2
 LOOP L3
 
 DEC SI     ;去掉最后一个","号
        MOV   [SI], BYTE PTR 0DH
        MOV   [SI+1], BYTE PTR 0AH
        MOV   [SI+2], BYTE PTR '$'
        LEA   DX,STR
        MOV   AH,9
        INT   21H
 
 MOV AH,4CH
 INT 21H

BBB PROC
 PUSH AX
 PUSH DX
 MOV DL,0DH
 MOV AH,2
 INT 21H
 MOV DL,0AH
 MOV AH,2
 INT 21H
 POP DX
 POP AX
 RET
BBB ENDP

DCB PROC
 PUSH AX
 PUSH CX
 MOV BX,0
NEW: MOV AH,1
 INT 21H
 CMP AL,','   ;如果是分号,则输入一个十进制数结束
 JZ NDIG
 CMP AL,0DH   ;如果是回车,则置DI为1输入结束
 JNZ NHC
 MOV DI,1
NDIG: POP CX
 POP AX
 RET
NHC:    CMP AL,30H
 JL NDIG
 CMP AL,39H
 JG NDIG
 AND AL,0FH
 CBW
 XCHG AX,BX
 MOV CX,10
 MUL CX
 XCHG AX,BX
 ADD BX,AX
 JMP NEW
DCB ENDP

BCD   PROC
      PUSH  AX
      PUSH  BX
      PUSH  CX
      PUSH  DX
      MOV   BX,10
      MOV   CX,0
R1:   MOV   DX,0
      DIV   BX
      PUSH  DX
      INC   CX
      OR    AX,AX
      JNZ   R1
R2:   POP   AX
      CMP   AL,10
      JB    R3
      ADD   AL,7H
R3:   ADD   AL,30H
      MOV   [SI],AL
      INC   SI
      LOOP  R2
      MOV [SI],BYTE PTR ',' ;每个数后放一个','号
      INC SI
      POP   DX
      POP   CX
      POP   BX
      POP   AX
      RET
BCD   ENDP

SORTP PROC
 PUSH AX
 PUSH BX    
 PUSH CX
 PUSH DI
 PUSH SI
 MOV DI,OFFSET ARR
 MOV BX,-1     ;设标志-1
LOOPOUT:CMP BX,-1
 JNE SORTEND   ;标志不为-1,则排序完成
 XOR BX,BX     ;0->BX
 MOV CX,COUNT
 MOV SI,DI
LOOPIN: MOV AX,[SI]
 CMP AX,[SI+2]  ;两两比较
 JLE NOCHANGE   ;如果<=则不交换
 XCHG [SI+2],AX  ;否则交换
 MOV [SI],AX
 MOV BX,-1      ;置BX为-1,标示有交换
NOCHANGE:ADD SI,2
 LOOP LOOPIN    ;判断本次排序是否完成
 JMP LOOPOUT
SORTEND:POP SI
 POP DI
 POP CX
 POP BX
 POP AX
 RET
SORTP  ENDP

CODE  ENDS
 END START

⌨️ 快捷键说明

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