Легенда об ассемблере

Я смотрю об ассемблере (вероятно речь идёт про ассемблер для Intel x86) легенды слагают:

Наиболее продвинутые ассемблеры содержали такие фишки, как имитация стека и вызова функций, а наиболее продвинутые программисты умели этими фишками пользоваться.
Стек в ассемблере есть — команды PUSH/POP, вызов функции — CALL, возврат — разнообразные RET. Никакой имитации.

Однако, ассемблер был низкоуровневым языком: в нем отсутствовали даже такие элементарные команды, как умножение и деление, которые разработчикам приходилось описывать вручную с помощью низкоуровневых команд.
Умножение и деление: MUL и DIV (есть ещё IMUL и IDIV), умножать и делить можно 32-битные числа, если нехватает, идёт к математическому сопроцессору, он встроен со времён 80486.

Поэтому, на смену ассемблеру пришли языки высокого уровня. Ассемблер при этом физически никуда не делся — все программы на высокоуровневых языках компилируются во все тот же ассемблерный код. В уродский неэффективный ассемблерный код.
Не поэтому, почему — отдельный вопрос, но вовсе не потому, что было мало ассемблерных библиотек для реализации каких-то распространённых вещей. А программы компилируются не в «уродский неэффективный ассемблерный код», а в машинные коды.
26 ноября 2008 15:28

bakabaka.livejournal.com (bakabaka.livejournal.com)
26 ноября 2008, 16:36

он встроен со времён 80486
Может, они о более древних временах? ^_^
(Когда я на "Спектруме" программировал - там с умножением плохо было. О_о)

nathrezim.livejournal.com (nathrezim.livejournal.com)
26 ноября 2008, 16:48

Мда, Хабр по-прежнему доставляет...
На редкость бестолковая статья ни о чем.

bolk (bolknote.ru)
26 ноября 2008, 16:55, ответ предназначен bakabaka.livejournal.com:

На «Спектруме» был встроенный язык калькулятора. Его можно и нужно было использовать для математике.

bolk (bolknote.ru)
26 ноября 2008, 16:56, ответ предназначен nathrezim.livejournal.com:

Одна банальная, очевидная мысль и куча спорной воды.

bolk (bolknote.ru)
26 ноября 2008, 17:07, ответ предназначен bakabaka.livejournal.com:

Подробнее о калькуляторе «Спектрума» (это софтварная эмуляция сопроцессора) можно почитать у Toni Baker «Machine Code Calculator» (http://www.users.globalnet.co.uk/~jg27paw4/type-ins/zx-comp/mccalc.zip).

Впрочем, я не на тот вопрос отвечаю. Думаю, что автор статьи вряд ли говорит о древних временах. Там контекст другой.

bakabaka.livejournal.com (bakabaka.livejournal.com)
26 ноября 2008, 17:15

На «Спектруме» был встроенный язык калькулятора
Ну да.
С остроумным пятибайтным представлением чисел :-)
(Хотя, если результат умножения за 2 байта не выходил, число оставалось целым, да ^_^)

bolk (bolknote.ru)
26 ноября 2008, 17:53, ответ предназначен bakabaka.livejournal.com:

Но был же! В любом случае, автор, судя по всем, рассматривает всё-таки ассемблер Intel x86.

muxa-ru.livejournal.com (muxa-ru.livejournal.com)
26 ноября 2008, 18:50

идёт к математическому сопроцессору, он встроен со времён 80486
Если быть совсем точным, то 486DX

486SX не имел встроеного математического сопроцессора.

Alisey (alisey.myopenid.com)
26 ноября 2008, 18:59

Человек пришет такую херню и не стесняется, а у поста тем временем уже +75.

Alisey (alisey.myopenid.com)
26 ноября 2008, 19:02

"Уродский, неэффективный, ассемблерный код". Как они не умирают при рождении?

biolante.livejournal.com (biolante.livejournal.com)
26 ноября 2008, 19:05

"Неэффективный" - это супер. Куда уж прямому программированию процессора до аццких Ява машин по скорости то.

jankkhvej.blogspot.com (jankkhvej.blogspot.com)
26 ноября 2008, 19:12

Легенды именно так и рождаются: молодые дилетанты берутся пересказывать что-то, случившееся ещё до их инициации, а седым гуру лень объяснять им как всё обстоит на самом деле.

nathrezim.livejournal.com (nathrezim.livejournal.com)
26 ноября 2008, 20:13, ответ предназначен bakabaka.livejournal.com:

Эх, Спектрум...
В замечательном журнале ZX-Ревю очень любили, помнится, публиковать различные варианты процедур, перемножающих содержимое регистров B и C и сохраняющих результат в паре DE. Процедуры писались на ассемблере (разумеется) и присылались читателями просто пачками. Вот там была оптимизация: экономился каждый байт и каждый такт.
Ностальгия... =)

aire.livejournal.com (aire.livejournal.com)
26 ноября 2008, 21:17

Если честно, сама статья -- shit.

bolk (bolknote.ru)
26 ноября 2008, 22:48, ответ предназначен muxa-ru.livejournal.com:

Насколько помню, SX — это был DX, но с дефектным (и отключенным) математическим сопроцессором, т.е. он там был ;)

bolk (bolknote.ru)
26 ноября 2008, 22:50, ответ предназначен jankkhvej.blogspot.com:

Надеюсь, ему там в комментах навешают, мне туда ходить не хочется.

bolk (bolknote.ru)
26 ноября 2008, 22:56, ответ предназначен nathrezim.livejournal.com:

Ох, да. Мы с братишкой тоже туда пару писем писали: всякие там бесконечные жизни и адаптации игр: у нас на компе из-за русского шрифта некоторые игры не шли, так как вектор прерывания таймера вычислялся очень хитро(-жопо), адрес, куда передавалось управление, жил в ячейке, адрес которой записывался так: старший байт адреса в специальный регистр, младший брался из определённого порт (который выдавал 255). Соответсвенно, часто практикой было выставлять старший байт так, чтобы он указывал в ПЗУ, если ПЗУ было изменено (а у нас там был русский шрифт), то вектора указывали не туда, куда расчитывал автор и ничего не работало.

Другой проблемой были машины, где упомянутый порт выдавал не 255, а другие цифры (например, в каких-то машинах там был 0, в других — 254). Какие были времена :) Ужас :)

bolk (bolknote.ru)
26 ноября 2008, 22:56, ответ предназначен aire.livejournal.com:

Со мной говорит плюшевая игрушка!!!11

ajojo.livejournal.com (ajojo.livejournal.com)
26 ноября 2008, 23:46, ответ предназначен bolk (bolknote.ru):

На самом деле вопрос во что компилируется программа на языке высокого уровня - сложный. Сейчас многие (некоторые?) кодогенераторы выдают действительно ассемблерный текст, который потом скармливается системному ассемблеру. Взять хоть тот же gcc для примера

altmind.livejournal.com (altmind.livejournal.com)
26 ноября 2008, 23:58

freepascal компилирует именно в ассемблер, остальное делает gas.
бывает и так

sad-wind.ya.ru (sad-wind.ya.ru)
27 ноября 2008, 06:27

Чудя по всему, во всём остальном автор тоже не разбирается. Про ASP.Net бред пишет.

Sergey Gladilin (www.westra.ru/club/person/gladilin/)
27 ноября 2008, 07:58

В уродские неэффективные машинные коды ;-)

merkushin.ya.ru (merkushin.ya.ru)
27 ноября 2008, 08:52

Я "изучал" асм на Электронике 580. Там не было никаких MUL и DIV, а тем более IMUL & IDIV...

P.S. Не могу оставить тут сообщение с логином Gmail =/

bolk (bolknote.ru)
27 ноября 2008, 09:34, ответ предназначен ajojo.livejournal.com:

У меня большие сомнения, что автор говорит именно об этом. Но спасибо за замечание, правда раньше то, что переводило программу из одного языка в другой называли трансляторами, видимо терминология сменилась.

bolk (bolknote.ru)
27 ноября 2008, 09:44, ответ предназначен altmind.livejournal.com:

Я тут подумал, что если для пользователя это более-менее монолитный процесс, то это всё-таки компиляция в машиные коды, пусть и в два прохода. Например, Turbo Assembler, которым я пользовался давал мне сначала obj-файл, которым потом другой утилитой переводился уже в полноценный exe или com, но в голову мне не приходит говорить, что tasm — транслятор ассемблера в объектник.

bolk (bolknote.ru)
27 ноября 2008, 09:44, ответ предназначен sad-wind.ya.ru:

А про Asp.NET там что (я не разбираюсь)?

bolk (bolknote.ru)
27 ноября 2008, 09:52, ответ предназначен merkushin.ya.ru:

Gmail, похоже, пора откручивать, не работает.

Я предполагаю, что человек говорит о Intel x86. Я за свою жизнь программировал на трёх ассемблерах. В двух действительно не было операций деления и умножения (в Z80 — не было, а по поводу процессора Радио-86РК могу заблуждаться, 18 лет прошло).

Конечно, есть вероятность, что он как раз говорит о каких-то совсем древних ассемблерах, но по другим ляпам в статье создаётся ощущение, что человек либо совсем статью не продумал, либо о многом знает лишь понаслышке.

jankkhvej.blogspot.com (jankkhvej.blogspot.com)
28 ноября 2008, 00:08, ответ предназначен bolk (bolknote.ru):

Под вечер дня ему там навешали, ага:

«Машинный код в общем случае — родной язык процессора. В случае с PC это ассемблер. Теоретически возможны процессоры с нативным кодом другого порядка. В бинарных файлах он содержится не в виде команд, а в виде 16ричных чисел, которые и означают эти команды(буквенные mov, cmp, xor — по сути мнемоники для человека), достаточно открыть файл 16риным редактором и переключиться в режим ASM. Ну и порадуйте себя, почитайте про форматы исполняемых файлов PE, ELF…»

Недавно, кстати, freebsd.org открыла официальный форум — списки рассылки и IRC не устраивают текущее поколение. Ожидаем доставки эпических легенд.

bolk (bolknote.ru)
28 ноября 2008, 08:11, ответ предназначен jankkhvej.blogspot.com:

По спискам рассылок и IRC я бы не стал плакать. Народу всё больше, среда, соответственно, тоже меняется, это неизбежно.

imap.livejournal.com (imap.livejournal.com)
28 ноября 2008, 23:27

У IBM/360 не было аппаратного стека и умножения с делением. А это вся советская серия ЕС-ЭВМ. У PDP-11 была наишикарнейшая система команд с могучей косвенностью (отсюда ноги легенд про извращения со стеком) и тоже без mul/div. Это, соответсвенно, вся советская серия СМ-ЭВМ. У современных ARM'ов тоже веселая система команд... Похоже, хабраписатель тупо соорудил компилят по принципу "слышал звон..."

bolk (bolknote.ru)
29 ноября 2008, 10:21, ответ предназначен imap.livejournal.com:

У всех сложилось примерно то же ощущение, я посмотрел сейчас в комменты к статье.

Develop7 (develop7.info)
1 декабря 2008, 18:56, ответ предназначен bolk (bolknote.ru):

Вы такую хрень ещё и читаете? :)

bolk (bolknote.ru)
1 декабря 2008, 23:56, ответ предназначен Develop7 (develop7.info):

Ну, там такой жыр :)

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)