8086汇编 从键盘输入一个长度不超过 10 的字符串,其中只包含小写字母。请对字符串中的字符进行排序(升序),输出排序后的字符串
时间: 2024-03-03 14:47:29 浏览: 77
下面是一个使用插入排序实现的8086汇编程序示例,该程序从键盘输入一个长度不超过 10 的字符串,对字符串中的字符进行排序(升序),并输出排序后的字符串:
```
DATA SEGMENT
STR DB 11 DUP ('$') ; 存储输入的字符串
LEN DB 0 ; 字符串长度
DATA ENDS
CODE SEGMENT
START:
MOV AX, DATA ; 初始化数据段寄存器
MOV DS, AX
; 从键盘输入字符串
MOV AH, 0AH
LEA DX, STR ; DX 存储字符串地址
INT 21H
; 计算字符串长度
MOV AL, STR[1]
SUB AL, '0'
MOV LEN, AL
; 对字符串进行排序
MOV BX, 1 ; BX 存储已排序序列的末尾下标
MOV CX, LEN ; CX 存储未排序序列的长度
OUTER_LOOP:
DEC CX ; 将未排序序列长度减 1
JZ END_SORT ; 如果未排序序列长度为 0,排序完成
MOV AL, STR[BX+1] ; AL 存储待插入元素
MOV SI, BX ; SI 存储已排序序列的最后一个元素下标
INNER_LOOP:
CMP SI, 0 ; 如果已排序序列为空,跳过比较
JL INSERT ; 如果已排序序列中没有比待插入元素大的元素,插入到最前面
MOV DL, STR[SI+1] ; DL 存储当前元素
CMP AL, DL ; 比较待插入元素与当前元素大小
JGE INSERT ; 如果待插入元素大于等于当前元素,插入到当前元素后面
; 如果待插入元素小于当前元素,将当前元素后移一位
MOV STR[SI+2], DL
DEC SI
JMP INNER_LOOP
INSERT:
; 将待插入元素插入到合适位置
MOV STR[SI+2], AL
INC BX
JMP OUTER_LOOP
END_SORT:
; 排序完成后,输出排序后的字符串
LEA DX, STR
MOV AH, 09H
INT 21H
MOV AH, 4CH ; 退出程序
INT 21H
CODE ENDS
END START
```
该程序使用了插入排序算法,通过将待排序的元素插入到已排序序列中适当的位置,不断扩大已排序序列的范围,最终得到一个升序排列的字符串。在程序中,变量 BX 存储已排序序列的末尾下标,SI 存储已排序序列的最后一个元素下标,AL 存储待插入元素的值,DL 存储当前元素的值。在循环中,每次比较待插入元素与当前元素的大小,如果待插入元素大于等于当前元素,则插入到当前元素后面,否则将当前元素后移一位,直到找到合适的位置插入待插入元素。
阅读全文