;-----数据段------------
DATAS SEGMENT
string_1 DB 'Please input 10 numbers(0-65536):','$'
string_2 DB 'ERROR: OVERFLOW! Please input again:','$'
string_3 DB 'The array you have input is:',0ah,0dh,'$'
string_4 DB 'After Sort the num is:',0ah,0dh,'$'
string_5 DB ' ','$'
DATA DW 10 DUP(?)
massege DB 'The sum of the array is: ',0ah,0DH,'$'
DATAS ENDS
;-----堆栈段------------
STACKS SEGMENT
DW 256 dup(?)
STACKS ENDS
;-----代码段------------
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
;-----------程序开始------------
START:
MOV AX,DATAS
MOV DS,AX
MOV SI, 0 ;指针初始化
MOV CX, 10 ;循环次数
;---------Input----------
MOV DX, OFFSET string_1 ;Please input 10 numbers(0-65536)
MOV AH, 9
INT 21H
Lp:
CALL Input
ADD SI, 2
Loop Lp
;--------结束输入,换行---------------
CALL CRLF
MOV DX, OFFSET string_3 ;'The array you have input is:'
MOV AH, 9 ;首地址 DS:DX
INT 21H
;-------输出 ----------------
MOV CX, 10
MOV DI, 0
Again:
CALL Print
CALL Space
ADD DI , 2
Loop Again
;/******************************/
;----------Sort-----------
MOV CX, 9
MOV DI, 0
FOR1:
CALL Sort
ADD DI, 2
LOOP FOR1
CALL CRLF
MOV DX, OFFSET string_4 ;'After Sort the num is:'
MOV AH, 9
INT 21H
MOV CX, 10
MOV DI, 0
FOR2:
CALL Print
CALL Space
ADD DI , 2
LOOP FOR2
CALL CRLF
;/************子程序调用****************/
;---------输入函数(单数字输入)------------
Input PROC Near
push AX
push BX
push CX
push DX
MOV BX, 0
CLC
MOV DX, 0
;----------输入数字--------------
Lp_0:
MOV AH, 1
INT 21H
CMP AL, 20H ;空格
JE L_CRLF
;----- x belong to [0,9] ----------
SUB AL, 30H ; ASCII -> int
JL L_ERROR
CMP AL, 9
JG L_ERROR
;------- string -> int -----------
MOV AH, 0 ;将 AL扩展成 AX
XCHG AX, BX ;保护 AX值
MOV CX, 10
MUL CX ; bx *= 10
ADD AX , BX
JC L_ERROR ; OVERFLOW处理
XCHG AX, BX
JMP Lp_0
L_ERROR:
MOV DX, 0
MOV BX, 0
CALL CRLF ; 换行
CALL ERROR ; 输出错误提示
JMP Lp_0
L_CRLF: ; 以换行作为一个数的结束标志
MOV DX, 0
MOV DATA[SI], BX ;
POP DX
POP CX
POP BX
POP AX
RET
Input ENDP
;----换行子函数(一个数输入完毕)-------
CRLF PROC Near
push AX
push DX
MOV DL, 0ah
MOV AH, 2
INT 21H
pop DX
pop AX
RET
CRLF ENDP
;---------空格-----------
Space PROC Near
push AX
push DX
MOV DX, OFFSET string_5 ;' '
MOV AH, 9
INT 21H
pop DX
pop AX
RET
Space ENDP
;----------错误提示-------------
ERROR PROC Near
push BX
push DX
MOV DX, OFFSET string_2 ; ERROR: OVERFLOW! Please input again:
MOV AH, 9
INT 21H
pop DX
pop BX
RET
ERROR ENDP
;---------输出函数(单数字输出)-------------
Print PROC Near
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX, 0
MOV BX, 10
MOV AX, DATA[DI]
LAST:
MOV DX, 0
DIV BX ; DIV商放AX,余数放入DX
PUSH DX
INC CX
CMP AX, 0
JNZ LAST
AGE:
POP DX
OR DX, 30H
MOV AH, 2
INT 21H
LOOP AGE
POP DX
POP CX
POP BX
POP AX
RET
Print ENDP
;---------SORT---------------------
SORT PROC NEAR
PUSH BX
PUSH DX
MOV SI,DI
LOOP1:
ADD SI,2
MOV BX,DATA[DI]
CMP BX,DATA[SI]
JA CHANGE
JMP NEXT
CHANGE:
MOV DX,DATA[SI]
MOV DATA[DI],DX
MOV DATA[SI],BX
NEXT:
CMP SI,18
JL LOOP1
POP DX
POP BX
RET
SORT ENDP
;-------SUM-------------
Get_sum PROC NEAR
PUSH BX
PUSH CX
MOV BX, 0
MOV CX , 9
MOV DI, 2
LOP1:
MOV BX, DATA[0]
ADD BX, DATA[DI]
MOV DATA[0], BX
ADD DI , 2
LOOP LOP1
POP CX
POP BX
RET
Get_sum ENDP
CODES ENDS
END START
应用市场
- 粉丝: 946
- 资源: 4258
最新资源
- C#开发Bartender模板打印WPF 1. 电脑上安装对应打印机的驱动 2. 安装Bartender软件,必须安装,不然无法打印 3. 使用Bartender制作打印模板
- 基于Python+LSTM的文本情感分析系统源码+全部资料(高分项目)
- 自测使用,使用eclipse运行
- c语言简单圣诞树图案代码
- C#winform 千万级数据读写操作处理.zip(sqllite\sql)
- C# 远程写入文件接口.zip
- Mentor常规设置及物料BOM导出操作指南
- 基于一种低通滤波反电势观测器的永磁同步电机无感FOC 采用的反电势观测器相比传统的SMO、龙伯格等反电势观测方法,在算法结构上更加简单,参数调节容易,只有一个参数 1.提供算法对应的参考文献和仿真模
- 船舶检测27-YOLO(v5至v11)、COCO数据集合集.rar
- dthfyjfuygugugg
- 遥感图像分割 UDD6城市无人机数据集.zip
- C# winform-Modbus协议扫码上位机.zip
- 基于Python+LSTM的文本情感分析系统源码(95分以上大作业)
- 基于自抗扰控制器ADRC的永磁同步电机FOC 1.转速环采用ADRC,和传统PI进行对比来分析ADRC控制性能的优越性 对ADRC中的ESO进行改进,进一步提高了ADRC性能 2.提供算法对应的参
- 铁片排列机sw18可编辑全套技术开发资料100%好用.zip
- C# WPF西门子200SMART拉力测试上位机.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈