设计汇编语言循环程序输入10个数字,并按从大到小的顺序排列后显示
时间: 2024-03-08 20:49:34 浏览: 102
好的,以下是一份设计汇编语言循环程序输入10个数字,并按从大到小的顺序排列后显示的代码:
```
; 数据段
DATA SEGMENT
ARR DB 10 DUP(0) ; 存放输入的10个数字
TEMP DB 1 DUP(0) ; 用于交换数字的临时变量
DATA ENDS
; 代码段
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA ; 将数据段地址存入 AX
MOV DS, AX ; 将 AX 中的地址存入 DS,以便访问数据段
; 输入10个数字
MOV CX, 10
LEA SI, ARR
MOV AH, 1 ; 从标准输入读取一个字符
INPUT_LOOP:
INT 21H ; 调用 DOS 中断 21H
SUB AL, '0' ; 将 ASCII 码转换为数字
MOV [SI], AL ; 将数字存入数组中
INC SI
LOOP INPUT_LOOP ; 循环输入10个数字
; 排序
LEA BX, ARR ; BX 存放数组的基地址
MOV CX, 10
OUTER_LOOP:
DEC CX ; 每次循环需要比较的元素个数减1
LEA SI, [BX] ; SI 存放当前循环的元素地址
INNER_LOOP:
MOV AL, [SI] ; 将当前元素存入 AL
CMP AL, [SI+1] ; 比较当前元素和下一个元素的大小
JGE SKIP ; 如果当前元素大于等于下一个元素,跳过交换
MOV BL, [SI+1] ; 否则将下一个元素存入 BL
MOV [SI+1], AL ; 将当前元素存入下一个元素的位置
MOV [SI], BL ; 将下一个元素存入当前元素的位置
MOV SI, [SI+1] ; SI 指向下一个元素,为下一次比较做准备
CMP CX, 0 ; 如果需要比较的元素已经为0,跳出循环
JNE INNER_LOOP
SKIP:
LOOP OUTER_LOOP ; 如果还有需要比较的元素,继续排序
; 输出结果
MOV CX, 10
LEA SI, ARR
MOV AH, 2 ; 调用 DOS 中断 21H,将一个字符显示到屏幕上
OUTPUT_LOOP:
MOV DL, [SI] ; 将当前元素存入 DL
ADD DL, '0' ; 将数字转换为 ASCII 码
INT 21H ; 显示数字
INC SI ; 指向下一个元素
LOOP OUTPUT_LOOP ; 循环输出所有数字
; 结束程序
MOV AH, 4CH
INT 21H
CODE ENDS
END START
```
这段程序使用了冒泡排序算法对输入的数字进行排序,然后按顺序输出。注意,这段程序是在 DOS 系统下运行的,因此需要在 DOS 下进行编译和运行。
阅读全文