Ноябрь 30
Автор: Революционный Матрос Железняк
Рубрики: юмор, non-unix
Пока наш новый автор resu_t, пишет свои объемные статьи, я решил немного развлечь вас, этой статьей, перепечатанной из одного демомейкерского журнала десятилетней давности. Надеюсь вам эта статья доставит не меньше удовольствия чем мне…
Было время, когда многие ассемблерщики, сидя в изрядно прокуренных НИИ, за своими XT, постоянно соревновались друг с другом, на тему уровня своего программирования. Интересное было время - социализм. Кстати программиста узнать можно было сразу, этакий бородато - лохматый тип, с окурком беломора и пьяными глазами. Взгляд на жизнь наплевательский, жена бросила, пьет и курит неумеренно. Обычно, соревнование заключалось в написании жутко коварного вируса, в оптимизации общеизвестного алгоритма на скорость или размер. Иногда, задача заключалась просто в выводе на монитор содержимого регистра AX в девятеричной системе, или просто строки “Петров - мудила“, причем сделать это было надо хоть на байт, но меньше чем коллега из соседнего отдела.
Если бы начальник знал, почему программа завершена с опозданием в месяц… просто то время, которое надо было тратить на заказ, тратилось на обдумывание очередного замороченного алгоритма, направленного на утирание носа своему собутыльнику, а вовсе не связана с чрезмерной сложностью заказа. Но что он понимает… болван.
Бывали и короткие но кровавые поединки, типа этого:
Задача: Вписать код выводящую на экран строку “Неllo”, в минимальный размер, язык Turbo Assembler =). Поехали.
Программист 1:
.model tiny .code org 100h start: mov ax, 09h mov dx, offset Mess int 21h mov ah, 4Ch int 21h Mess db "Hello",10,13,"$" end start
После компиляции 19 байт.
Видели бы вы, сколько торжества было на лице второго, когда он принес следующее:
Программист 2:
.model tiny .code org 100h start: mov ah, 09h mov dx, offset Mess int 21h int 20h ;!!! Выиграли mov ah, 4Ch Mess db "Hello",10,13,"$" end start
После компиляции 17 байт.
А это притащил первый, и сказал что все, меньше уже никто не сделает, а кто сделает, тому он лично подарит бутылку водки. - Только это невозможно, меньше уже нельзя, - сказал он, с довольной улыбкой.
Программист 1:
.model tiny .code org 100h start: mov ah, 09h mov dx, offset Mess int 21h retn ;Выиграли, int 20h займет 2 байта, а ближний ret всего 1 Mess db "Hello",10,13,"$" end start
После компиляции 16 байт.
Вся штука в том, что был еще третий программист, который был одержим страстью к компьютерам и алкоголю, и услышав что можно нахаляву срубить бутылку водки написал следующее:
Программист 3:
.model tiny .code org 256 begin: db 65h, 63h, 68h, 6Fh, 20h, "Hello" end begin
Всего 10 байт!
Всего 5 байт без учета текста. Правда после компиляции над файлом надо немного поработать, но это связано с чрезмерной самоуверенностью разработчиков TLINK.
dR.Shizer/HRG
перепечатка из H.A.R.Magazine #2 (Май 1997)
Комментариев: 11
at88
Декабрь 2nd, 2007 @ 21:02
1Я бы очень хотел также, но что в школе, что в универе не было никаго стимула так все сводилось к заучмванию наизусть (!) програм и подготовке шпаргалок. Думаю по этой причине не вышел из иеня программист :)
resu_t
Декабрь 2nd, 2007 @ 23:00
2Это да. Нужно рвение изнутри, и чуточку удачи. =)
@ero
Декабрь 4th, 2007 @ 13:10
3Интересно, а кто - нить из них эту прогу не на ассемблере, а в двоичном коде написать не пробовал? Получилось бы и меньше.
Революционный Матрос Железняк
Декабрь 4th, 2007 @ 13:36
42 @ero: Не, меньше 10-ти байт уже нельзя, а кто напишет, тому я лично подарю пузырь водки ;-) И потом, какая разница, на асме писать или в машинных кодах. Асм ведь и есть символьное представление машинного кода. Кстати, в последнем варианте, программист, как раз и заменил символьные команды ассемблера - машинным кодом ;-)
@ero
Декабрь 4th, 2007 @ 14:18
5Не знаю точно. Но ассемблер это тоже компилятор, он также как и другие языки преобразует команды в двоичный язык, только программисты работают на нем на более низком уровне. Но все равно, они работают на уровень выше, чем если бы они кодили на машинном языке. Так что возможно, часть функций они не могут трогать. Так что если бы там был бы пятый прогер, который бы написал эту прогу на машинном языке, то возможно он бы получил пузырь :). Но ему пришлось бы постараться. Во первых прогу эту написать. Во вторых сделать ее по размеру меньше чем остальные, тобишь пришлось бы методом перебора заменять единички на нули и смотреть работает ли программа. :)
Революционный Матрос Железняк
Декабрь 4th, 2007 @ 14:32
62 @ero: Да нет на самом деле ;-) вовсе не обязательно писать в машинных кодах =) компиляторы ассемблера, на самом деле не вставляют в код ничего лишнего, просто при написании программы в машинном коде приходилось бы самому считать адресацию, тогда как тут за тебя это делает компилятор ассемблера, вот и все ;-)
CGen
Январь 13th, 2008 @ 22:21
7:-)
65h, 63h, 68h, 6Fh, 20h - это и есть машинные коды.
Помню в детстве один бородатый мужик показал, как полностью сбросить BOIS. В текстовом редакторе написал пять символов, сохранил, как .com и запустил файл в DOS.
Революционный Матрос Железняк
Январь 16th, 2008 @ 10:10
82 CGen: Да, мой друг, это машинный код в шестнадцатиричном представлении. В десятичном это выглядело бы так:
101, 99, 104, 111, 32 :)
BBB
Февраль 13th, 2009 @ 12:51
9[q]65h, 63h, 68h, 6Fh, 20h - это и есть машинные коды.[/q]
Это не машинные коды, это слово [b]echo[b] (с пробелом на конце)
А фраза статьи “Правда после компиляции над файлом надо немного поработать, но это связано с чрезмерной самоуверенностью азработчиков TLINK”, ф полагаю, подразумевает, что полученный obj-шник надо переименовать в bat-файл.
Революционный Матрос Железняк
Февраль 16th, 2009 @ 16:44
102BBB: Ох ты блин :) А я все эти годы ломал голову над тем, что бы это могло означать, а перевести-то не догадался, спасибо вам большое :)
P.S. Только не obj-шник, а уже полученный после линкования .com-файл надо было переименовать в бат )))
Flinta
Апрель 24th, 2009 @ 01:37
11Я тута со свиным рылом, да в калашный ряд… Плохо разбираясь в низкоуровневом програмировании, я бы попытался сгенерить все возможные последовательности байтов в бинарнике (задавая размер меньше предыдущего рекорда), попытался бы запустить каждый. Не могу оценить, насколько долго бы XT перебирал все эти варианты. На современной машине, кажись, можно сделать за разумное время.
RSS лента комментариев к этой записи · Ссылка для трэкбэка
Добавить комментарий
Рубрики
Архив
Друзья
живой журнал
счетчики
диски почтой (доставка по казахстану и СНГ)
ПЕРВЫЙ КАЗАХСТАНСКИЙ БЛОГ О UNIX-ПОДОБНЫХ ОПЕРАЦИОННЫХ СИСТЕМАХ

обзоры UNIX-систем | полезные советы | литература по UNIX | эмуляторы X86 | Linux в Казахстане | Linux в Алматы
ALUG | Свободное ПО в Казахстане | Open Source в Казахстане | Разработка под UNIX | Linux Game Development
Серверные решения | BSD-системы | Графика в UNIX | UNIX Desktop | Портирование программ | Исторические материалы
ВСЕ О UNIX-LIKE ОПЕРАЦИОННЫХ СИСТЕМАХ
kernel.kz © 2007-2008
блог работает на WordPress