汇编语言 AT &T 语法实现冒泡排序

# 排序的思路是让最大的数沉底
.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型的数字
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值