用8086汇编语言设计一个排序算法(从大到小)演示器,在数组中已有10个未排序的整数,输入数字X(0<=X<=3)。 如果X=0,则原样输出10个未排序的整数,数之间用“,”间隔 如果X=1,将数当做无符号数进行排序,并展示排序过程; 如果X=2,将数当做有符号数进行排序,并展示排序过程; 如果X=3,将数当做移码进行排序,并展示排序过程; 如果X输入非法,则通过输出提示,并退出到DOS系统。
时间: 2023-06-13 15:04:35 浏览: 260
8086汇编语言数组排序
以下是用8086汇编语言设计的排序算法演示器代码。首先定义了一个包含10个未排序整数的数组,然后根据用户输入的数字X进行相应的操作。在排序过程中,使用冒泡排序算法。
```
.MODEL SMALL
.STACK 100H
.DATA
NUMS DB 45h, 12h, 23h, 55h, 77h, 33h, 11h, 8Ah, 3Fh, 1Eh
MSG1 DB '请输入数字X(0<=X<=3):$'
MSG2 DB '未排序的数为:$'
MSG3 DB '排序后的数为:$'
MSG4 DB '非法输入,请重新运行程序!$'
COMMA DB ',', '$'
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV AH, 9
LEA DX, MSG1
INT 21H ; 输出提示信息
MOV AH, 1
INT 21H ; 读入数字X
SUB AL, 30H ; 将字符转换为数字
CMP AL, 0
JE UNSORTED ; 如果X=0,则原样输出未排序的数
CMP AL, 1
JE UNSIGNED ; 如果X=1,则按无符号数排序
CMP AL, 2
JE SIGNED ; 如果X=2,则按有符号数排序
CMP AL, 3
JE TWOSCOMPLEMENT ; 如果X=3,则按移码排序
; 非法输入
MOV AH, 9
LEA DX, MSG4
INT 21H
JMP EXIT
UNSORTED:
MOV AH, 9
LEA DX, MSG2
INT 21H ; 输出未排序的数的提示信息
; 输出未排序的数
MOV CX, 10
LEA SI, NUMS
PRINT:
MOV DL, [SI]
ADD DL, 30H
MOV AH, 2
INT 21H
MOV DL, COMMA
MOV AH, 2
INT 21H
INC SI
LOOP PRINT
JMP EXIT
UNSIGNED:
MOV AH, 9
LEA DX, MSG3
INT 21H ; 输出排序后的数的提示信息
; 按无符号数排序
MOV CX, 10
LEA SI, NUMS
LOOP1:
MOV BX, SI
MOV DX, BX
ADD DX, 1
LOOP2:
MOV AL, [BX]
MOV AH, [DX]
CMP AL, AH
JAE CONTINUE
XCHG AL, AH
MOV [BX], AL
MOV [DX], AH
CONTINUE:
INC BX
INC DX
LOOP LOOP2
LOOP LOOP1
; 输出排序后的数
MOV CX, 10
LEA SI, NUMS
PRINT2:
MOV DL, [SI]
ADD DL, 30H
MOV AH, 2
INT 21H
MOV DL, COMMA
MOV AH, 2
INT 21H
INC SI
LOOP PRINT2
JMP EXIT
SIGNED:
MOV AH, 9
LEA DX, MSG3
INT 21H ; 输出排序后的数的提示信息
; 按有符号数排序
MOV CX, 10
LEA SI, NUMS
LOOP3:
MOV BX, SI
MOV DX, BX
ADD DX, 1
LOOP4:
MOV AL, [BX]
CBW ; 将AL扩展为AX
MOV AH, [DX]
CBW ; 将AH扩展为AX
CMP AL, AH
JAE CONTINUE2
XCHG AL, AH
MOV [BX], AL
MOV [DX], AH
CONTINUE2:
INC BX
INC DX
LOOP LOOP4
LOOP LOOP3
; 输出排序后的数
MOV CX, 10
LEA SI, NUMS
PRINT3:
MOV DL, [SI]
ADD DL, 30H
MOV AH, 2
INT 21H
MOV DL, COMMA
MOV AH, 2
INT 21H
INC SI
LOOP PRINT3
JMP EXIT
TWOSCOMPLEMENT:
MOV AH, 9
LEA DX, MSG3
INT 21H ; 输出排序后的数的提示信息
; 按移码排序
MOV CX, 10
LEA SI, NUMS
LOOP5:
MOV BX, SI
MOV DX, BX
ADD DX, 1
LOOP6:
MOV AL, [BX]
NEG AL ; 取反
ADD AL, 1 ; 加1
MOV AH, [DX]
NEG AH ; 取反
ADD AH, 1 ; 加1
CMP AL, AH
JAE CONTINUE3
XCHG AL, AH
MOV [BX], AL
MOV [DX], AH
CONTINUE3:
INC BX
INC DX
LOOP LOOP6
LOOP LOOP5
; 输出排序后的数
MOV CX, 10
LEA SI, NUMS
PRINT4:
MOV DL, [SI]
ADD DL, 30H
MOV AH, 2
INT 21H
MOV DL, COMMA
MOV AH, 2
INT 21H
INC SI
LOOP PRINT4
EXIT:
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
```
阅读全文