.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