# 排序的思路是让最大的数沉底
.section .data
numbers:
.int 76,12,33,91,3,45,29,1,69,33
len = (.- numbers) >> 2
.section .text
.globl _start
_start:
movl $len, %eax
loop_1:
dec %eax # eax用来标记没趟的最后一个需要比较的数字的下标
cmpl $0, %eax # 当eax <= 0时,结束
jle end_loop
movl $0, %ebx
movl numbers(,%ebx,4), %ecx # ecx用来存放带比较的前一个数
movl %ebx, %edi # 给edi赋值
inc %edi # 错开
loop_2:
cmpl %eax, %edi # 不能超出最后一个待比较数的范围
jg loop_1
cmpl %ecx, numbers(,%edi,4)
jge solve
#交换值
movl numbers(,%edi,4), %edx
movl %edi, %esi
dec %esi
movl %edx, numbers(,%esi,4)
movl %ecx, numbers(,%edi,4)
solve:
movl numbers(,%edi,4), %ecx
inc %edi
jmp loop_2
end_loop:
# 下面三行一定要加上,不然回报段错误,作用是回到控制台
movl $1, %eax
movl $0, %ebx
int $0x80
进行编译
adog@E531:~/linux_assembly$ as -c -g -o maopao.o maopao.s
进行链接
ld -o maopao maopao.o
进行调试
adog@E531:~/linux_assembly$ gdb -tui maopao
b 35 打断点
r 开始运行
x/10dw &numbers 打印出numbers内存处的10个int型的数字