Вы описываете простой алгоритм Bubble Sort в соответствии с http://en.wikipedia.org/wiki/Bubble_sort :
[ 116] «.string» - это просто массив символов. Последний символ имеет значение 0, чтобы определить конец строки. Символ кодируется как 8-битное значение. Таким образом, вам нужно только использовать 8-битные регистры процессора (AL, AH, DL, DH и т. Д.) Для их обработки. Вы можете использовать 32-битные расширенные регистры (EAX, EBX, ECX, EDX и т. Д.), Но это излишне усложняет ситуацию.
Bubble Sort требуется две вложенные петли. В этом случае бесконечный внешний цикл, который заканчивается, когда строка сортируется, и внутренний цикл, который обрабатывает каждый символ.
Следующий пример очень прост. Например, последнее отсортированное письмо излишне сравнивается снова и снова. У этого есть большой потенциал для улучшения:
# Name: bubblesort.s
# Assemble & link: gcc -m32 -obubblesort bubblesort.s
# Run: ./bubblesort
.data
fmt: .string "%s\n"
str: .string "lhtgbvfmjnbcdsaawcfr"
.text
.global main
main:
pushl $str # Address of str onto the stack
pushl $fmt # Address of fmt onto the stack
call printf # Call libc: printf(fmt,str)
addl $(4*2), %esp # Adjust the stack by 2 PUSHes
O1: # Outer loop ends when everything is sorted (swapped == false)
movl $str, %esi
movb [110], %dl # swapped = false
I1: # Inner loop: every character
movb (%esi), %al
movb 1(%esi), %ah
cmpb [110], %ah # End of string?
je O2 # Yes -> exit inner loop
cmpb %ah, %al # Compare the characters
jbe I2 # If AL < AH, don't swap the characters
movb $1, %dl # swapped = true
movb %al, 1(%esi) # Swap: Store the characters in reversed order
movb %ah, (%esi)
I2:
incl %esi # Next character
jmp I1
O2:
pushal # Preserve all registers
pushl $str # Address of str onto the stack
pushl $fmt # Address of fmt onto the stack
call printf # Call libc: printf(fmt,str)
addl $(4*2), %esp # Adjust the stack by 2 PUSHes
popal # Restore all registers
cmpb $1, %dl # swapped == true?
je O1 # Yes -> one more outer loop
Done:
ret # Return: exit the main function
И вот еще одна «оживленная» иллюстрация:
Пример кода jQuery для разгрузить события
$(window).unload( function () { alert("Bye now!"); } );
Из jQuery разгружают документацию
Править:
Я играл вокруг и не смог заставить родительское окно мочь установить разгружение. Единственным путем я мог заставить это работать, был при наличии сценария, существующего в HTML всплывающего окна. Всплывающее окно также должно было загрузить jQuery. У меня нет ничего для базирования этого на, но я полагаю, что разгружение инициировано, потому что по существу всплывающее окно разгружается от объема родительского окна. Просто предположение.
У Вас должен был бы быть onBeforeUnload вызов события метод для уведомления обработчика.
Посмотрите эту страницу для демонстрации.
Существует одна крошечная выгода, которую я должен упомянуть относительно предыдущих упоминаний о onunload на основе моего предыдущего опыта:
Opera 9.0.x-9.2.x только выполняет window.onUnload, если пользователь перешел далеко от страницы. Если пользователь вместо этого закроет окно, то событие никогда не будет стрелять. Я подозреваю, что это было сделано для борьбы со всплывающей проблемой самоперезагрузки (где всплывающее окно могло вновь открыть себя на странице близко).
Это, скорее всего, сохранилось к Opera 9.5.x. Другие браузеры могут также реализовать это, но я не полагаю, что IE или Firefox делают.
Из того, что я проверил, выгрузка jQuery - это просто оболочка для собственной функции. Я мог ошибаться, поскольку не копал так глубоко.
Этот пример сработал для меня.
$(document).ready(function(){
$(window).unload( function (){
alert('preget');
$.get(
'/some.php',
{ request: 'some' }
);
alert('postget');
});
});
Помните, что некоторые браузеры блокируют запросы window.open при выгрузке, например IE .
]Я создал наблюдателя, который проверяет, закрыто ли окно:
var w = window.open("http://www.google.com", "_blank", 'top=442,width=480,height=460,resizable=yes', true);
var watchClose = setInterval(function() {
if (w.closed) {
clearTimeout(watchClose);
//Do something here...
}
}, 200);
Я пробовал подход наблюдателя, но столкнулся с проблемой «отказано в разрешении» при использовании этого в IE6. Это происходит из-за того, что свойство closed не полностью доступно после закрытия окна ... но, к счастью, с конструкцией try {} catch это работает: o)
var w = window.open("http://www.google.com", "_blank", 'top=442,width=480,height=460,resizable=yes', true);
var watchClose = setInterval(function() {
try {
if (w.closed) {
clearTimeout(watchClose);
//Do something here...
}
} catch (e) {}
}, 200);
Спасибо, магнус