冒泡排序汇编语言代码
时间: 2023-11-05 12:05:08 浏览: 96
汇编语言的冒泡排序代码如下:
DATA SEGMENT
BUF DB 12,3,2,5,6,7 ;定义字节数据区
DATA ENDS
STACK SEGMENT
STACK ;定义堆栈
DB 32 DUP (0)
STACK ENDS
CODE SEGMENT ;代码段开始
ASSUME CS:CODE,DS:DATA,SS:STACK ;假定当前的段寄存器
START:
MOV AX,DATA
MOV DS,AX ;数据段首地址送DS
MOV AX,STACK
MOV SS,AX ;栈首地址送给 SS
MOV SP,32
MOV CX,6 ;控制外层循环次数为6次
LOOP1:
MOV SI,0 ;SI清零
PUSH CX ;CX进栈,保存外层CX值
MOV CX,6 ;内层循环次数
LOOP2:
MOV AL,DS:[SI]
MOV AH,DS:[SI+1]
CMP AL,AH ;比较相邻两数的大小,AL>AH跳转,否则交换
JNC OVER
MOV DS:[SI],AH ;交换相邻两数
MOV DS:[SI+1],AL
OVER:
INC SI
LOOP LOOP2 ;内层循环
POP CX
LOOP LOOP1 ;外层循环
MOV AX,4C00H ;返回dos
INT 21H ;系统中断
CODE ENDS
END START
相关问题
冒泡排序汇编语言程序
冒泡排序是一种简单的排序算法,它通过多次比较和交换相邻元素的方式将最大(或最小)的元素逐渐“冒泡”到数组的末尾。下面是一个使用汇编语言实现的冒泡排序程序的示例:
```assembly
section .data
array db 5, 2, 8, 1, 9, 3, 7, 4, 6 ; 待排序的数组
length equ $ - array ; 数组长度
section .text
global _start
_start:
mov ecx, length ; 将数组长度存入ecx寄存器
dec ecx ; ecx减1,用于内层循环比较次数
outer_loop:
mov esi, 0 ; 内层循环索引初始化为0
inner_loop:
mov eax, [array + esi] ; 将当前元素存入eax寄存器
cmp eax, [array + esi + 1] ; 比较当前元素和下一个元素
jg swap ; 如果当前元素大于下一个元素,则跳转到swap标签
continue:
inc esi ; 内层循环索引加1
loop inner_loop ; 循环内层循环
dec ecx ; 外层循环次数减1
jnz outer_loop ; 如果外层循环次数不为0,则跳转到outer_loop标签
exit:
mov eax, 1 ; 系统调用号1表示退出程序
xor ebx, ebx ; 返回值为0
int 0x80 ; 调用系统中断
swap:
xchg eax, [array + esi + 1] ; 交换当前元素和下一个元素
mov [array + esi], eax ; 将交换后的值存回数组
jmp continue ; 跳转到continue标签,继续内层循环
```
这段汇编代码使用了两层循环来实现冒泡排序。外层循环控制比较的轮数,内层循环用于比较相邻元素并进行交换。在每一轮内层循环中,如果当前元素大于下一个元素,则进行交换。最后,当所有的轮数都完成后,数组就会按照从小到大的顺序排列。
汇编语言实现冒泡排序代码
下面是汇编语言实现冒泡排序的代码,以8086为例:
```
DATA SEGMENT
ARR DB 10, 2, 8, 4, 6, 3, 7, 1, 9, 5
LEN EQU ($-ARR)/1
DATA ENDS
CODE SEGMENT
START:
MOV AX, @DATA
MOV DS, AX
MOV CX, LEN-1
OUTER_LOOP:
MOV SI, 0
INNER_LOOP:
MOV AL, ARR[SI]
CMP AL, ARR[SI+1]
JLE SKIP_SWAP
XCHG AL, ARR[SI+1]
MOV ARR[SI], AL
SKIP_SWAP:
INC SI
LOOP INNER_LOOP
DEC CX
JNZ OUTER_LOOP
MOV AH, 4CH
INT 21H
CODE ENDS
END START
```
代码中定义了一个长度为10的数组`ARR`,用于存储待排序的数据。`LEN`表示数组的长度。代码使用两个循环,外层循环控制排序的轮数,内层循环用于比较相邻两个元素并交换它们的位置。在内层循环中,使用`XCHG`指令交换两个元素的位置。最后使用系统调用`INT 21H`退出程序。
需要注意的是,这里的冒泡排序是对一个字节数组进行排序,因此使用了`DB`来定义数组类型。如果要对一个整数数组进行排序,需要使用`DW`来定义数组类型,并在比较和交换元素时使用`MOV`指令。