- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
sub1:
; ...
push sub2.end
sub2:
; ...
ret
.end:
; ...
ret
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
sub1:
; ...
push sub2.end
sub2:
; ...
ret
.end:
; ...
ret
Это нормально? Или я мудэ?
ты не нужно
За ассемблер не скажу, и за всех тоже. Но вот про Вагиза и твою маму точно могу сказать
З.Ы. Вроде бы пара push/ret не нравится предсказателю развратов, в отличие от call/ret.
В защищенном режиме дальний возврат инициализирует проверку селектора и дескриптора адреса возврата. Кроме этого, возврат к меньшему уровню привилегий вызывает перезагрузку стека SS:eSP значением, сохраненным перед блоком параметров стека покидаемой процедуры. Сегментные регистры DS, ES, FS и GS могут быть очищены при выполнении дальнего возврата к меньшему уровню привилегий, если значения селекторов в этих регистрах задают сегменты, которые не могут быть использованы на новом уровне привилегий (определяется путем анализа соответствующих дескрипторов).
Про CALL:
В защищенном режиме обе формы с дальним указателем принимают во внимание значение байта AR в дескрипторе, указанном селекторной частью дальнего указателя. В зависимости от значения байта AR, происходит одно из следующих управляющих преобразований:
• дальний вызов на том же уровне привилегий;
• межуровневый дальний вызов;
• переключение задачи.
Если вызов осуществляется без переключения задачи, то флаги не изменяются. Переключение задачи вызывает перезагрузку регистра (E)FLAGS значением из TSS.
Но эти побочные эффекты можно поймать только от CALL FAR / RETF. Ближний вызов/возврат вроде бы ничем таким не грозит.
Давно же уже никто через call gates не скачет
В другие задачи вообще не скачут
ЗЫ. А, допустим, там, где нет предсказателей оно бы работало быстрее чем человечкий вызов (из-за отсутствия call в sub1)?
В 486?
А, если вообще не будет прогноза... Ну будет ждать и крутить nop'ы значит.
зы:
"Most assembly language programmers don’t bother to read Intel’s manuals (which are extremely informative and well done, but only slightly more fun to read than the phone book), and go right on programming . . "
(c) Michael Abrash, автор Zen оф то самое
Ещё мне нравится call + pop. Тоже работает как jmp + даёт возможность получить адрес текущей инструкции, не генерируя фиксапов (релокейшнов) в объектном файле или в экзешнике.
А ещё мне нравилось, когда Борланд Си/Паскаль в сегментированной модели генерировали push cs + call near вместо call far.
А теперь в x86_64 завезли RIP-related адресацию и этот хак оказался на обочине...
mov foo, [IP + 42] ?
Ага, каждые 2 гига. Проще через регистр прыгнуть.
Я шутил ващето.
То-есть наговнокодить на терабайты я не могу, только данные хранить?
А колы туда ОС какой полезный код загрузит -- как мне до него добраться?
зы: погоди
а нельзя huge pages какие-нить и двигать саму страницу?
(наконец я прочитал что вы тут пишите и понял)
call придётся делать через регистры:
Или что там можно использовать (сетку опкодов не смотрел)?
вот тебе, бабка, и "линейная адресация".
Думай дорогой программист что у тебя 2^64 байт памяти, а на самом деле вот
[xode]push 0x12345678
push 0x90ABCDEF[/code]
На бумажке в клеточку.
jmp short $+2 компилируется в EB 00
Хех, я эти $ никогда не юзал, всё через метки считал.
Кстати, бесконечный цикл в асме будет jmp short $, а в опкодах будет EB FE
P.S. Интересно, bormand перенабирает вручную чужие комментарии при цитировании или у него есть скрипт для (де)нормализации типографики.
С локальными метками как-то вообще похуй.
> перенабирает
Ага, копировать дольше.
Еще раз убеждаюсь что человечество деградирует.
В 80-х годах были юзнет клиенты, которые запускали $EDITOR и там сразу был весь текст сообщегния и можно было на него ответить.
Без всяких скриптов.
Теперь ты вместо родного эдитора юзаешь какой-то говноtextarea не удобный, без хоткеев, не скриптуемый, с чуждым тебе шрифтом, и еще даже копирования нет.
Правильно. "Зачем делать автоматически то, что можно сделать вручную?" -- главный девиз современных технологий.
У тебя в браузере копирования нет?
Хотя ты прав: копирование у меня уебищное бо виператора нет
Ну, отсутствие автоцитирования -- не современных технологий проблема, а страйкера. Но на таком сайте грех жаловаться.
Кстати, подозреваю, что меня бы подбешивало это автоцитирование, если бы было в интерфейсе или какая хуета вылезала бы при выделении. Не люблю такое. Вот строки с '>' после постинга неплохо было бы подсветить или отбить...
Это означило что если я привык к какому-то редактору (vi или emacs, не важно) то мне и надо его всегда показывать для любого редакторования.
Я так же мог выбрать news reader, irc client, почтовый клиент (mutt например) по вкусу.
Теперь мне рекомендуется использовать вебморду, которая навязывает мне свой UI и свои хоткеи.
lynx может