Ассемблер 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
 
[показать]


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