Chinaunix首页 | 论坛 | 博客
  • 博客访问: 57123
  • 博文数量: 15
  • 博客积分: 50
  • 博客等级: 民兵
  • 技术积分: 55
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-01 09:50
文章分类
文章存档

2014年(1)

2013年(7)

2012年(8)

分类: LINUX

2013-05-07 10:11:31

作者:2008级嵌入式  王晓博

#将下面汇编代码保存为 wxb1.s 文件
#功能:用冒泡算法去实现动一组数据的排列,然后输出

.section .rodata
    output: .asciz "ni yao de shu shi %d\n"
            #.asciz是在定义字符串的时侯在字符串结尾加上空字符(即C语言
            #的\0),这样做的目的是为了让printf能读懂字符串

.section .data
    msg: .long 55555555,33333,53,56,25,52,56,631,5667    #共有9个数

.section .text
.globl _start

_start:
    movl $9,%ecx
    decl %ecx        #外循环开始
cp1:
    movl $0,%eax
    pushl %ecx        #保存外循环的ecx值
cp2:                  #内循环
    movl  msg(,%eax,4),%edx        #冒泡算法的开始 保持小数在前大数在后
    incl %eax
    cmpl %edx,msg(,%eax,4)     
 
    jae  next

    xchg  msg(,%eax,4),%edx         #不符合就进行交换
    decl %eax          
    movl %edx,msg(,%eax,4)
    incl %eax                

next:
    loop cp2
    popl  %ecx
    loop cp1
    nop
    movl $0,%edi

loop:                            #用于循环打印共进行9次
    movl msg(,%edi,4),%eax
    pushl %eax
    pushl $output
    call printf
    addl $8 ,%esp
    inc %edi
    cmpl $9,%edi
    jne loop

    movl $0, %ebx        #quit
    mov $1,%eax
    int $0x80


[root@localhost ~]# as wxb1.s -o wxb1.o
[root@localhost ~]# ld wxb1.o -lc -dynamic-linker /lib/ld-linux.so.2  -o wxb1
[root@localhost ~]# ./wxb1
ni yao de shu shi 25
ni yao de shu shi 52
ni yao de shu shi 53
ni yao de shu shi 56
ni yao de shu shi 56
ni yao de shu shi 631
ni yao de shu shi 5667
ni yao de shu shi 33333
ni yao de shu shi 55555555
[root@localhost ~]#


阅读(1510) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~