Ассемблер x86

Перенос из темы «Последний поход уникального корабля»
 
RU Серокой #21.11.2014 10:37  @adv1971#21.11.2014 00:24
+
-
edit
 

Серокой

координатор
★★★★
[показать]
Больше не раскалятся ваши колосники. Мамонты пятилеток сбили свои клыки. ©  
RU adv1971 #22.11.2014 00:06  @Серокой#21.11.2014 10:37
+
+2
-
edit
 

adv1971

аксакал
★★★
[показать]


1) Не уводи в сторону.
2) "х86 ассемблер и остался" - Серокой, извини, но ты гонишь. Проц x64 с 4мя ядрами не может иметь того же ассемблера как 8086. И не имеет.
3) И самый важный наверное - В первой половине 199x процентов 40 студиозусов матмеха ассемблер хоть как-то, может плохо но знало. Его пытались преподавать.
Сейчас студенты его не знают вообще. Им его просто даже не преподают. Потому что тогда учили программированию на низком уровне, а сейчас, на "языках высокого уровня". Кто и как и на чем пишет эти "языки" остается за забором.

Мне вон тут дали на полставки студента. 3 курс. Полная ж. Начальство говорит учи. Да я забыл больше, чем он знает, просто не представляю как его учить.
Как учить человека, который на 10ой минуте прохода по факультету ( с объяснениями что, где и как и почему) вдруг спрашивает - "А что такое витая пара?"

P.S. Админы, что-то я совсем в оффтопик ушел, снесите куда вам разум подскажет :)
 33.033.0

RU Серокой #22.11.2014 00:36  @adv1971#22.11.2014 00:06
+
+2
-
edit
 

Серокой

координатор
★★★★
С чего это я гоню?
Если там 4, да хоть 16 ядер, как изменится от этого функция сложения? Вообще, причём тут ядра? Простая программа на ассемблере всё равно будет выполняться на одном ядре в одном потоке. С теми же мнемониками команд.
Ну, внутри-то оно ясно, что CISC давно не он и есть перекодирование инструкций, но код инструкций как был, так и остался. А код инструкций и есть ассемблер.
Больше не раскалятся ваши колосники. Мамонты пятилеток сбили свои клыки. ©  
RU Balancer #22.11.2014 16:03  @Серокой#22.11.2014 00:36
+
-
edit
 

Balancer

администратор
★★★★★
Серокой> но код инструкций как был, так и остался. А код инструкций и есть ассемблер.

Важно помнить, что нынешние x86 и x86_64 машкоды — это очень жирное надмножество над старым :) Но, естественно, старый код от 8086 по-прежнему работает на современных процессорах в соответствующих режимах.

А вот мнемоника ассеблеров поменялась. «В наше время» был популярен Tasm. Сегодня — всякие nasm/gasm, у которых и порядок операндов другой, и форматы записи аргументов и т.п. — оно больше на старый PDP смахивает.
 33.033.0
MD Wyvern-2 #22.11.2014 21:58  @Balancer#22.11.2014 16:03
+
-
edit
 

Wyvern-2

координатор
★★★★★
Balancer> А вот мнемоника ассеблеров поменялась. «В наше время» был популярен Tasm. Сегодня — всякие nasm/gasm, у которых и порядок операндов другой, и форматы записи аргументов и т.п. — оно больше на старый PDP смахивает.

И которые на самом деле как минимум по старой1 классификации - языки высокого уровня ;) Писать на машинных кодах для современных квази_х86 процессоров - себя не уважать, они ведь RISC-машины :F


.1- условно языком "высокого" уровня ранее считался язык, одна команда которого транслировалась более, чем в одну команду машинного кода. Это потом пошли "проблемно-ориентированные" языки, коими сегодня практически и являются все языки программирования %)
Жизнь коротка, путь искусства долог, удобный случай мимолетен, опыт обманчив.... Ἱπποκράτης  32.032.0
RU Balancer #22.11.2014 23:44  @Wyvern-2#22.11.2014 21:58
+
-
edit
 

Balancer

администратор
★★★★★
Wyvern-2> .1- условно языком "высокого" уровня ранее считался язык, одна команда которого транслировалась более, чем в одну команду машинного кода

Никогда с такой трактовкой не сталкивался. Это следствие классификации, но не причина. Изначальные определения ЯВУ оперировали понятиями платформенной переносимости (облегчённой портируемостью), оторванностью от железа (хотя бы в вопросах ввода/вывода), компактной записью основных управляющих конструкций и т.п. Дословно, конечно, сейчас старые определения уже не вспомнить. А так — конечно, всё это порождает трансляцию в сложный машинный код. Но ассемблеры почти с самого начала, оставаясь низкоуровневыми, делали нередко то же самое. И составные команды, и макросы... tasm даже элементы ООП уже имел, но даже тогда он никак не считался высокоуровневым :)
 38.0.2125.11138.0.2125.111
MD Wyvern-2 #23.11.2014 08:22  @Balancer#22.11.2014 23:44
+
-
edit
 

Wyvern-2

координатор
★★★★★
Wyvern-2>> .1- условно языком "высокого" уровня ранее считался язык, одна команда которого транслировалась более, чем в одну команду машинного кода
Balancer> Никогда с такой трактовкой не сталкивался.

Давай тогда вернемся к истокам (почти по Пелевину :F )
Высокоуровневый язык программирования — язык программирования, разработанный для быстроты и удобства использования программистом. Основная черта высокоуровневых языков — это абстракция, то есть введение смысловых конструкций, кратко описывающих такие структуры данных и операции над ними, описания которых на машинном коде (или другом низкоуровневом языке программирования) очень длинны и сложны для понимания.
 


Если исходить из этого НАИКОРЯВЕЙШЕГО определения - машкоды х86 - высокоуровневый язык. Нет? ;)
Жизнь коротка, путь искусства долог, удобный случай мимолетен, опыт обманчив.... Ἱπποκράτης  32.032.0

AXT

инженер вольнодумец
★☆
Wyvern-2> Если исходить из этого НАИКОРЯВЕЙШЕГО определения - машкоды х86 - высокоуровневый язык. Нет? ;)

Машкоды PDP-11 как бы и высокоуровневее по структуре, так и удобнее в применении :) Вот с них можно с ооочень бооольшой натяжкой и начинать. Собственно, BCPL и есть транстлятор в них с автоматическим распределением регистров и приоритетом операций. А вроде как считается высокоуровневым :)
... так пускай наступает на нас холодным рассветом новый день ...  13.0.782.22013.0.782.220
RU Balancer #23.11.2014 13:12  @Wyvern-2#23.11.2014 08:22
+
-
edit
 

Balancer

администратор
★★★★★
Wyvern-2> Если исходить из этого НАИКОРЯВЕЙШЕГО определения - машкоды х86 - высокоуровневый язык. Нет? ;)

Откуда столь фигурное выделение? Почему ты выделил цель разработки ЯВУ, но проигнорировал определение основных черт?
 33.033.0
+
-
edit
 

digger

аксакал

Wyvern-2> И которые на самом деле как минимум по старой1 классификации - языки высокого уровня ;) Писать на машинных кодах для современных квази_х86 процессоров - себя не уважать, они ведь RISC-машины :F

Ага, с этой точки зрения ассемблер х86 - ЯВУ для микрокода процессора.А разве можно писать непосредственно на внутреннем коде процессора и отключать транслатор микрокода внутри?
 33.033.0
+
-
edit
 

tarasv

опытный

Wyvern-2> .1- условно языком "высокого" уровня ранее считался язык, одна команда которого транслировалась более, чем в одну команду машинного кода.

Откуда такая классификация взята? Классическая, которой учили в институтах была: машкод->ассемблер->автокод->ЯВУ. Автокоды считались промежуточными между низким и высоким уровнем а (макро)ассемблеры однозначно низкого - они аппратно ориентированные, то что они могут генерить более одной команды машкода на одну мнемонику (команду) недостаточно чтобы назвать их ЯВУ.
 39.0.2171.7139.0.2171.71

digger

аксакал

Разница - в степени контроля над кодом.На ЯВУ программист не пишет непосредственно машинный код,это делает компилятор,а на ассемблере - пишет,хоть и пользуясь средствами высокого уровня.Но есть исключения. je 75 или 0F85,аdd eax,imm32 05 или 81C0 - ассемблер решает,что поставить.
 33.033.0
+
-
edit
 

Balancer

администратор
★★★★★
digger> На ЯВУ программист не пишет непосредственно машинный код

На продвинутом ассемблере иногда тоже. У меня бывали целые файлы килобайтного размера, где не было практически ни одной мнемоники, одни макросы :)
 3838
+
-
edit
 

digger

аксакал

Под макро все равно ассемблер в исходном коде,программист имеет над ним контроль,а в ЯВУ - очень ограничено,только над ключами и директивами компилятора.
P.S.Ключи компилятора - это были такие тумблеры на панели ЭВМ ;)
 33.033.0
+
-
edit
 

Balancer

администратор
★★★★★
digger> Под макро все равно ассемблер в исходном коде,программист имеет над ним контроль,а в ЯВУ - очень ограничено

Как программист может влезть в макросы ассемблера, так может влезть и в кодогенератор компилятора ЯВУ :) Разница, как говорится, лишь количественная. Так что, снова повторюсь, это критерий обязательный, но не достаточный.
 39.0.2171.7139.0.2171.71
MD Wyvern-2 #03.12.2014 21:17  @Balancer#03.12.2014 20:33
+
-
edit
 

Wyvern-2

координатор
★★★★★
В процессе яростного обсуждения явно проступили основные черты супостата :F
Итак, все возможные определения ЯВУ:
1. Языки предназначенные для упрощения понимания их программистами и упрощения написания программ Определение каноничное мое :)
Вывод1: ассемблер и, одновременно, машкоды классических CISC х86 создавались именно для упрощения написания программ.
2. Изначальные определения ЯВУ оперировали понятиями платформенной переносимости (облегчённой портируемостью), оторванностью от железа (хотя бы в вопросах ввода/вывода), компактной записью основных управляющих конструкций и т.п.© мопед не мой не каноничное, но имеющее отношение к.
Вывод2: вообще то именно эти черты с развитием и тотальным распространением х86 платформы и появились у сабжа. Т.е. если старинные определения ЯВУ не подходили к старинному же ассемблеру х86 то сегодня они практически совпали :F
3. Разница - в степени контроля над кодом.На ЯВУ программист не пишет непосредственно машинный код© другой мопэд еще одно.
Вывод3: ассемблер х86 сегодня не дает никакого контроля над кодом, ибо код этот давным-давно, с пресловутого Pentium Pro(Family 6 model 1) является RISC-кодом и доступа к нему программист практически не имеет (а если бы и имел, то галоперидол ему в вену)

Итак, по всем имеющимся признакам ассемблер х 86 сегодня -явный ЯВУ ;)
Жизнь коротка, путь искусства долог, удобный случай мимолетен, опыт обманчив.... Ἱπποκράτης  32.032.0
+
-
edit
 

tarasv

опытный

Wyvern-2>ибо код этот давным-давно, с пресловутого Pentium Pro(Family 6 model 1) является RISC-кодом и доступа к нему программист практически не имеет (а если бы и имел, то галоперидол ему в вену)
Wyvern-2> Итак, по всем имеющимся признакам ассемблер х 86 сегодня -явный ЯВУ ;)

Это мелкие детали - синтаксис ЯВУ не аппаратно специфичен, это достаточный признак чтобы сказать что ассемблер x86 не может быть отнесен к ЯВУ.
Насчет "давнвм давно и Pentium Pro" вам вот сюда Microcode - Wikipedia, the free encyclopedia . Ничего такого нового в Intel даже для себя тогда не изобрели - архитектура с трансляцией машинных команд в процессоре в другой набор массово применяется с середины 60х, Интел конечный автомат декодирования команд убрали ЕМНИП в 286м чем вызвали неподдельную "радость" у наших спецов по послойному травлению.
 39.0.2171.7139.0.2171.71

digger

аксакал

tarasv> Это мелкие детали - синтаксис ЯВУ не аппаратно специфичен, это достаточный признак чтобы сказать что ассемблер x86 не может быть отнесен к ЯВУ.

Фортран имел команды обращения ко всяким перфокартам и лентам и прочие привязки даже не к процессору,а к машине.Он также не имел рекурсии потому,что на машине не было стека.
 33.033.0
+
-
edit
 

Balancer

администратор
★★★★★
digger> Фортран имел команды обращения ко всяким перфокартам и лентам и прочие привязки даже не к процессору,а к машине.

Фортран без этих команд останется Фортраном. Но что будет с tasm без add или movsx?
 39.0.2171.7139.0.2171.71

AXT

инженер вольнодумец
★☆
tarasv> Это мелкие детали - синтаксис ЯВУ не аппаратно специфичен,

А что, C теперь не ЯВУ? Операторы ++ и — в нём как раз из-за аппаратной специфичности. Ибо язык делался под PDP-11, а там это вшито в режимы работы с памятью.

tarasv> Интел конечный автомат декодирования команд убрали ЕМНИП в 286м чем вызвали неподдельную "радость" у наших спецов по послойному травлению.

Не понял. В 286 вполне себе классический секвенсер, что такого? Может, это перевранная история появления 486, где часть команд декодируется впрямую? Откуда такая странная информация?
... так пускай наступает на нас холодным рассветом новый день ...  13.0.782.22013.0.782.220
+
-
edit
 

Balancer

администратор
★★★★★
AXT> А что, C теперь не ЯВУ?

Сегодня фактически уже скорее нет, чем да :) Но формально — ЯВУ.

AXT> Операторы ++ и — в нём как раз из-за аппаратной специфичности.

Только работают они на любой платформе.
 39.0.2171.7139.0.2171.71

tarasv

опытный

AXT> А что, C теперь не ЯВУ? Операторы ++ и — в нём как раз из-за аппаратной специфичности. Ибо язык делался под PDP-11, а там это вшито в режимы работы с памятью.

С однозначно ЯВУ потому что синтаксически он гораздо шире аппаратной платформы на которой разрабатвался, в PDP-11 есть [addr]++ и --[addr] но нет ++[addr] и [addr]-- как не и [data]++/--.

AXT> Не понял. В 286 вполне себе классический секвенсер, что такого? Может, это перевранная история появления 486, где часть команд декодируется впрямую? Откуда такая странная информация?

Насчет 286 я написал ЕМНИП, в 386 в декодере точно используется ПЗУ микрокоманд, (в 8086 был самый обычный конечный автомат), соответсвенно копированию через травление это не поддается - все ячейки выглядят одинаково. Информация что говорится из первых рук - от моего бывшего шефа, в те времена начальника ВЦ киевского Квазара на котором эти копии обсчитывались.
 33.033.0

AXT

инженер вольнодумец
★☆
tarasv> С однозначно ЯВУ потому что синтаксически он гораздо шире аппаратной платформы на которой разрабатвался, в PDP-11 есть [addr]++ и --[addr] но нет ++[addr] и [addr]-- как не и [data]++/--.

Добавили для симметрии. Но тем не менее, C сильно заточен под оригинальную PDP-11.

tarasv> Насчет 286 я написал ЕМНИП, в 386 в декодере точно используется ПЗУ микрокоманд, (в 8086 был самый обычный конечный автомат),

Что??? 8086 микрокодированный.

tarasv> соответсвенно копированию через травление это не поддается - все ячейки выглядят одинаково.

Не понял. Как раз произвольная логика сдирается, не приходя в сознание. Программируемое металлом/поликремнием/переходными ПЗУ — ещё проще. Самое сложное — сдирать программируемое легированием ПЗУ, там нужон мелкоскоп на отражённых электронах.

tarasv> Информация что говорится из первых рук - от моего бывшего шефа, в те времена начальника ВЦ киевского Квазара на котором эти копии обсчитывались.

Что-то меня гложут сомнения насчёт компетенции этого начальника ...
... так пускай наступает на нас холодным рассветом новый день ...  13.0.782.22013.0.782.220

tarasv

опытный

digger> Фортран имел команды обращения ко всяким перфокартам и лентам и прочие привязки даже не к процессору,а к машине.

Фортран до IV был не ЯВУ а автокодом, цель была облегчить программирования с плавающей точкой и работал он только на железе IBM. В IV который стал ЯВУ ленты убрали, ну а PUNCH в те врена было столь же естественным на любой ЭВМ что и сейчас например printf. Да это не академично зато практично - Algol именно академичность и убила, почти любая полезная програмам должна делать ввыод/вывод а в языке его просто нет. После этого так академично делать престали.

digger> Он также не имел рекурсии потому,что на машине не было стека.

Сначала Фортран не то что рекурсии не имел в нем и пользовательских функций небыло.
 33.033.0

tarasv

опытный

AXT> Добавили для симметрии. Но тем не менее, C сильно заточен под оригинальную PDP-11.

Влияние естественно видно, но он совсем не помешало портировать его на все, в том числе и на IBM/360 хотя и с известными трудностями.

AXT> Что??? 8086 микрокодированный.

Погоди, я всегда думал что через микрокод там реализованы строковые инструкции и умножение с делением с нормализацией, а остальное реализовано напрямую в логике.

AXT> Не понял. Как раз произвольная логика сдирается, не приходя в сознание.
AXT> Самое сложное — сдирать программируемое легированием ПЗУ, там нужон мелкоскоп на отражённых электронах.



ПЗУ в правом нижнем углу согласно рассказу скопировали прочитав содержимое, а не анализируя кристалл.

AXT> Что-то меня гложут сомнения насчёт компетенции этого начальника ...

У меня сомнений в его компетентности нет, а вот в том что я помню все детали через 20 лет - есть и очень большие.
 33.033.0

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru