汇编语言程序设计:从键盘上输入20个有符号数,将他们排序并在屏幕上显示

这篇博客介绍了一个汇编语言程序,用于从键盘接收20个(或更少)有符号整数,对它们进行排序,并在屏幕上显示排序结果。程序首先展示提示信息,然后接收用户输入,检查输入合法性,接着进行数字计数、ASCII到十进制的转换、冒泡排序以及将排序后的二进制数转换为ASCII显示。
摘要由CSDN通过智能技术生成

【源程序】

DATA    SEGMENT

        NOTE0   DB 'Note: The character that separates the integers can be any visible ASCII except ten digits(',27H,'0',27H,'-',27H,'9',27H,').',0DH,0AH,'$'

        NOTE1   DB 0DH,0AH,'==================================================================',0DH,0AH

                DB 'Please input 20 (or less) decimal integers (-32768 to +32767):',0DH,0AH,'$'

        NOTE2   DB 0DH,0AH,'==================================================================',0DH,0AH

                DB 0DH,0AH,'The inputed integers: ','$'

        NOTE3   DB 0DH,0AH,'==================================================================',0DH,0AH

                DB 0DH,0AH,'How many decimal integers? $'

        NOTE4   DB 0DH,0AH,'The sorted result: ',0DH,0AH,'$'

        ERR_STR DB 0DH,0AH,'******************************************************************',0DH,0AH

                DB 'Input error!',0DH,0AH

        CON_STR DB 0DH,0AH,'******************************************************************',0DH,0AH

                DB 0DH,0AH,'Continue? Y or N?','$'

        DEC_STR DB 200                                    ;用来存放输入的原始数据

              DB ?

                DB 150 DUP('$')

        TOTAL   DB 3 DUP('$')                                  ;用来记录输入的数字个数

        DEC_NUM DW 30 DUP(?)                             ;用来存放将输入的ASCII码转换成2进制数以便比较的结果

        OUT_STR DB 150 DUP('$')                              ;存放待输出的字符组信息

DATA    ENDS

 

STACK   SEGMENT STACK

        STT     DB 100 DUP(?)                                 ;堆栈

STACK   ENDS

 

CODE    SEGMENT

MAIN    PROC FAR

        ASSUME CS:CODE,DS:DATA,SS:STACK

START:  MOV      AX,STACK

       MOV      SS,AX

       MOV      AX,DATA

       MOV      DS,AX

;----------------------------------                           输出提示信息

        LEA     DX,NOTE0          

        MOV     AH,09H

        INT     21H

 

DISP0:  LEA     DX,NOTE1

        MOV     AH,09H

        INT     21H

 

        LEA     DX,DEC_STR                             ;将原始数据存入该空间

       MOV      AH,0AH

       INT   21H

 

        MOV     AL,BYTE PTR[DEC_STR+2]                            ;输入合法性的标志:开头是数字或者符号

        CMP     AL ,'0'

        JAE     CMP1

        CMP     AL ,'+'

        JE      DISP2

        CMP     AL ,'-'

        JE      DISP2

        JMP     DISP1

CMP1:   CMP     AL ,'9'

        JBE     DISP2

DISP1:  LEA     DX,ERR_STR

        MOV     AH,09H

        INT     21H

CON_YN: MOV     AH,01H                                      ;程序结束处询问是否需要继续

        INT     21H

        CMP     AL,'Y'

        JE      DISP0

        CMP     AL ,'y'

        JE      DISP0

        CMP     AL ,'N'

        JE      OVER0

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值