Untitled

 avatar
unknown
plain_text
5 months ago
1.6 kB
3
Indexable
Intercambiar:
pushl %ebp
movl %esp, %ebp
subl $12, %esp
pushl %ebx
pushl %edi
pushl %esi
movl 8(%ebp), %ecx #@v[0]
movl 12(%ebp), %edi # i
movl 16(%ebp), %esi #j
imul $12, %edi # 12i
imul $12, %esi # 12j
addl %ecx, %edi # v[i]
addl %ecx, %esi # v[j]
movb (%edi), %dl # v[i].c
movb %dl, -4(%ebp) #s = v[i.c]
movb (%esi), %bl #v[j].c
movb %bl, (%edi) #v[i].c = v[j].c
movb %dl, (%esi) #v[j].c = s
movl 4(%edi), %edx #v[i].k
movl %edx, -12(%ebp) #tmp = v[i].k
movl 4(%esi), %ebx #v[j].k
movl %ebx, 4(%edi) #v[i].k = v[j].k
movl %edx, 4(%esi) #v[j].c = tmp
movl 8(%edi), %edx #v[i].m
movl %edx, -8(%ebp) #tmp = v[i].k
movl 8(%esi), %ebx #v[j].k
movl %ebx, 8(%edi) #v[i].k = v[j].k
movl %edx, 8(%esi) #v[j].c = tmp
popl %esi
popl %edi
popl %ebx
movl %ebp, %esp
popl %ebp
ret

//////////////////////////////
Ordena:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
pushl %ebx
pushl %edi
pushl %esi
movl 8(%ebp), %ebx #@v[0]
movl $0, %edi #i
for_i:
imul $12, %edi, %ecx # 12i
addl %ebx, %ecx # v[i]
cmpl $0x80000000, 4(%ecx)
je end_for_i
movl %edi, %esi # j= i
incl %esi # j = i+1
for_j:
imul $12, %esi, %edx # 12j
addl %ebx, %edx # v[j]
cmpl $0x80000000, 4(%edx)
je end_for_j
if:
movl 4(%ecx), %eax
cmpl 4(%edx), %eax #v[i].k > v[j].k
jle end_if
pushl %ecx #guardar ecx
pushl %esi
pushl %edi
pushl %ebx
call Intercambiar
addl $12, %esp
popl %ecx #recuperamos %ecx
end_if:
incl %esi # ++j
jmp for_j
end_for_j:
incl %edi # ++i
jmp for_i
end_for_i:
movl %edi, %eax # return i
popl %esi
popl %edi
popl %ebx
movl %ebp, %esp
popl %ebp
ret
Editor is loading...
Leave a Comment