I think I’d use pointers into the current position into the list, instead of an index that needs to be scaled every time you use it:
mov esi, offset list
top:
mov edi, esi
inner:
mov eax, [edi]
mov edx, [edi+4]
cmp eax, edx
jle no_swap
mov [edi+4], eax
mov [edi], edx
no_swap:
add edi, 4
cmp edi, list_end - 4
jb inner
add esi, 4
cmp esi, list_end - 4
jb top