汇编语言masm键入一组数据n,利用冒泡排序法对数组进行从大到小的排序,并输出结果。要求:读出数据段中存放的数组a,换行显示排序后的数组a。
时间: 2024-02-17 19:00:26 浏览: 113
采用汇编语言冒泡法排序
好的,下面是汇编代码实现:
```
.model small
.stack 100h
.data
n dw 6 ; 数组长度
a dw 23h, 56h, 12h, 78h, 34h, 90h ; 待排序的数组
.code
main proc
mov ax, @data
mov ds, ax ; 初始化数据段寄存器
; 冒泡排序
mov cx, n ; cx 寄存器用于循环计数
dec cx ; 数组长度减一
mov si, 0 ; si 寄存器用于指向数组元素
outer:
mov di, si ; di 寄存器指向当前元素
inc di
inner:
mov bx, [a+si] ; bx 寄存器存当前元素的值
cmp bx, [a+di] ; 比较当前元素和下一个元素的值
jge next ; 如果当前元素大于等于下一个元素,跳过交换
xchg bx, [a+di] ; 交换当前元素和下一个元素的值
mov [a+si], bx ; 将交换后的值存回当前元素
next:
inc si
inc di
loop inner ; 内层循环
loop outer ; 外层循环
; 输出排序后的数组
mov si, offset a
mov cx, n
mov ah, 02h ; 功能号,表示输出字符
print:
mov dx, [si]
add dx, 3030h ; 将数字转换为 ASCII 码
mov dl, dh ; 存储高位
int 21h ; 输出高位
mov dl, dh ; 存储低位
int 21h ; 输出低位
mov dl, ' ' ; 输出空格
int 21h
add si, 2 ; 指向下一个元素
loop print
mov ah, 4ch ; 退出程序
int 21h
main endp
end main
```
这段代码实现了冒泡排序算法,并输出排序后的数组。在这里,我们使用了一个双重循环来实现冒泡排序,外层循环控制循环的次数,内层循环控制每一次比较和交换。最后,我们使用 `int 21h` 中断来输出排序后的数组。
阅读全文