cornsea

powerpc 汇编语言注释

        .file   "sort.s"
        .globl array
        .section        ".data"   /*把array变量放到数据段*/
        .align 2
        .type   array, @object
        .size   array, 24
array:
        .long   21
        .long   2
        .long   3
        .long   90
        .long   10
        .long   11
        .section        .rodata
        .align 3
.LC0:
        .string "%d\n"
        .section        ".text"
        .align 2
        .globl main
        .type   main, @function
main:
        stwu 1,-32(1)
        mflr 0
        stw 31,28(1)
        stw 0,36(1)
        mr 31,1
/* r9 is the address of array*/
        lis 9,array@ha   /*读array地址的高16位并左移16位*/
        la 9,array@l(9)  /*读array地址的低16位,并将其与r9 (上条指令的执行结果)相加,得到array的地址,存放到r9中*/
        li 0,0
        stw 0,0(9)
        li 0,1
        stw 0,4(9)
        li 10,2
        stw 10,8(31)

 

1:
        lwz 10,8(31)
        addi 0,10,-2 /*将r10减去2,结果放到r0中*/
        slwi 0,0,2
        add 11,9,0
        lwz 4,0(11)   /*从内存加载数据到r0*/
        addi 0,10,-1
        slwi 0,0,2     /*将r0左移两位*/
        add 11,9,0
        lwz 0,0(11)
        add 11,4,0
        slwi 0,10,2
        add 4,9,0
        stw 11,0(4)
        addi 0,10,1
        stw 0,8(31)
        cmpwi 7,0,5
        ble 7,1b
        li 0,0
        stw 0,8(31)
        b .L2
.L3:
        lwz 0,8(31)
        lis 9,array@ha
        la 9,array@l(9)
        slwi 0,0,2
        add 9,0,9
        lwz 0,0(9)
        lis 9,.LC0@ha
        la 3,.LC0@l(9)
        mr 4,0
        crxor 6,6,6
        bl printf
        lwz 9,8(31)
        addi 0,9,1
        stw 0,8(31)
.L2:
        lwz 0,8(31)
        cmpwi 7,0,5
        ble 7,.L3
        li 0,0
        mr 3,0
        lwz 11,0(1)
        lwz 0,4(11)
        mtlr 0
        lwz 31,-4(11)
        mr 1,11
        blr
        .size   main,.-main
        .ident  "GCC: (GNU) 4.1.2 20071124 (Red Hat 4.1.2-42)"
        .section        .note.GNU-stack,"",@progbits

posted on 2010-08-15 21:34  cornsea  阅读(1275)  评论(0编辑  收藏  举报

导航