Обсуждение:Язык ассемблера
Статья «Язык ассемблера» входит в общий для всех языковых разделов Википедии расширенный список необходимых статей. Её развитие вплоть до статуса избранной является важным направлением работы русского раздела Википедии. |
Проект «Информационные технологии» (уровень II, важность для проекта высокая)
Эта статья тематически связана с вики-проектом «Информационные технологии», цель которого — создание и улучшение статей по темам, связанным с информационными технологиями. Вы можете её отредактировать, а также присоединиться к проекту, принять участие в его обсуждении и поработать над требуемыми статьями. |
Ассемблер и язык ассемблера[править код]
ошибка в названии статьи, правильное название — "язык ассемблера"... а собственно ассемблер — это разновидность транслятора... слово "ассемблер" часто используют для обозначения языка ассемблера просто для краткости или по незнанию, но это не верно... --Dionys 12:29, 20 Июл 2004 (UTC)
- Ассемблер это и символическая запись команд конкретного микропроцессора, и сам транслятор, и его входной язык (который может содержать, скажем, специфические для транслятора макросредства). Одно слово, но три значения. --Арви Хэкер 20:09, 16 мая 2007 (UTC)
- Тут уж как условиться, так и будет (Перельмана читал - про "обход вокруг белки"?). Ясен пень, для краткости лучше везде "ассемблер". Нужно только добавлять примечания/секции про терминологию. — Vano 03:08, 26 ноября 2007 (UTC)
Ассемблеры для архитектур[править код]
По хорошему должен быть в Википедии портал, отправляющий на странички по ассемблерам конкретных архитектур. Ну и на общие bla-bla-bla про синтаксисы AT&T, NASM'а, историю этих компиляторов и т.д. --Арви Хэкер 20:09, 16 мая 2007 (UTC)
- Не, портал - это слишком (порталы вообще для другого предназначены). Для описания всех разновидностей достаточно раздела; если разрастется - статьи. Все-таки у нас тут не техническое описание языков со всеми командами и директивами. — Vano 03:03, 26 ноября 2007 (UTC)
Почему в статье синтаксис Intel ассемблера описан как единственный? Есть еще AT&T(UNIXовый, тоже распространенный) и bin86(ужас на котором загрузчик Linux 2.0 был, теперь уже перешел на AT&T усилиями Peter Anvin). — Эта реплика добавлена с IP 212.152.41.35 (о) 20:12, 12 января 2008 (UTC)
Исследования вирусов[править код]
Хотелось бы спросить, с каких это пор исследование вирусов стало нелегальным ? Ведь сами производители антивирусов исследуют их точно таким же образом, а если не исследуют - то грош цена их антивирусам. Неужели они боятся что такие люди унесут секреты обезвреживания вирусов в массы и их продажи упадут ? Помоему они сами запрещают делать то чем сами активно занимаются. Пусть по крайней мере покажут строку в УК РФ или в конституции РФ где бы это запрещалось. Ведь пока есть только статья о "Создании И(!) распостронении вредосноных программ" исследования вирусов под эту статью не попадает, а значит данное утверждение лишено всякого смысла и может быть рассмотренно как неверная трактовка закона или изобретение своих собственных, а это как раз попадает под статью. 62.141.50.149 05:54, 14 августа 2008 (UTC)Исследователь
Ссылки[править код]
Ссылка на ASMFAQ (http://sgww.ru/asmfaq.htm)
Внимание этом FAQ находится ошибка, в таблице значений для команды xor написано
XOR | 1 | 0 |
---|---|---|
1 | 0 | 1 |
0 | 1 | 0 |
А должно быть
Операнд 1 | Операнд 2 | Результат |
---|---|---|
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
0 | 0 | 0 |
Александр Фролов 13:54, 9 января 2009 (UTC)
- не вижу никакой ошибки. обе таблицы говорят одно и то же: если опранды равны - результат "0", если различны - "1"
Radistao 11:39, 11 января 2009 (UTC)
Кто просит ссылки?[править код]
Какой умник требует ссылки на абзацы типа: >>> Искусный программист, как правило, способен написать более эффективную программу на ассемблере, чем те, что генерируются трансляторами с языков программирования высокого уровня, то есть для программ на ассемблере характерно использование меньшего количества команд и обращений в память, что позволяет увеличить скорость и уменьшить размер программы. >>> ? Если не понимает предмета написанного, чего требует? Это ж то же самое, что попросить ссылочку на заявление вроде "Как правило, автобусы опаздывают"... 87.252.243.171 23:47, 15 августа 2009 (UTC) Почитавший
Как это соотносится?[править код]
- Искусный программист, как правило, способен написать более эффективную программу на ассемблере, чем те, что генерируются трансляторами с языков программирования высокого уровня, то есть для программ на ассемблере характерно использование меньшего количества команд и обращений в память, что позволяет увеличить скорость и уменьшить размер программы.
и
- Главное преимущество ассемблера практически полностью нивелируется хорошей оптимизацией в современных компиляторах языков высокого уровня.
По-моему здесь некоторое противоречие. Либо надо уточнить что такое "практически полностью". Xchgall 08:50, 9 января 2010 (UTC)
- Нет тут противоречия, поскольку ключевые слова - "искусный" в первом и "практически" во втором утверждении. Искусные программисты - это очень малая часть всех программистов (даже среди тех, кто может на асме писать), но даже искусные программисты не обязательно всегда пишут безупречный код. И потому, искусность в одном аспекте оптимизации может нивелироваться пробелами в других (например, в знании каких-то процессорных тонкостей). Так что да, на практике, в большинстве случаев оптимизация компилятором будет скорее всего не уступать ручной оптимизации. -- AVBtalk 21:38, 9 января 2010 (UTC)
- На самом деле всё что вы сказали было бы правильней описать "Главное преимущество ассемблера практически полностью нивелируется неискусностью и незнаниями программистов на нём". По-моему к самому языку это вообще-то мало относится. Xchgall 21:48, 9 января 2010 (UTC)
- к самому языку это вообще-то мало относится - во-первых, языки в отрыве от носителей/программистов мало что значат. То, что ассемблер - это более тонкий инструмент, не будет ничего значить, если его тонкостью некому будет воспользоваться. И наоборот: оптимизация компилятора сглаживает как неэффективность самого языка, так и неэффективность работы программистов. Соответственно, это имеет к языку прямое отношение - его преимуществом является "тонкость", но это преимущество нивелируется как низким уровнем среднего программиста, так и хорошими оптимизаторами. Во-вторых, ваша формулировка по сути говорит то же самое, что и было сказано изначально, только без детализации. Так что если в исходных утверждениях вы видите противоречие, то и в вашей формулировке оно остаётся. -- AVBtalk 23:59, 9 января 2010 (UTC)
AVB, 1-й пункт недостатков весьма неопределенный. "Могут нивелироваться", то есть, могут, а могут и не нивелироваться, то есть формально правильно, но читателю преподносится мнение, не подкрепленное фактами. В указанной Вами ссылке Касперски пишет Заключение И все же, есть области, в которых ассемблер необходим - можно даже сказать, неизбежен. В первую очередь это высокопроизводительные математические и графические библиотеки, использующие векторные инструкции типа MMX или SSE. На эффективную векторизацию данных компиляторы, увы, не способны. И на языках высокого уровня тоже надо знать, как писать. На любом языке можно написать сколь угодно неэффективную программу Пример ошибки компилятора: http://forums.topcoder.com/?module=Thread&threadID=631917&start=0&mc=21 Реальный недостаток ассемблера -- это то, что при написании на языках высокого уровня можно быстрее закодировать более эффективные алгоритмы. Поскольку источников для заявления нет, я его убираю.Mathaddict 12:09, 1 июня 2010 (UTC)
- могут и не нивелироваться - вы правы, "могут нивелироваться" не является недостатоком, недостатком является то, что это происходит как правило в случае посредственного программиста (таковых большинство) и более-менее оптимизирующего компилятора. Так что я сейчас поправлю формулировку. эффективную векторизацию данных компиляторы, увы, не способны - это утверждение может быть верно для конкретного набора конкретных версий компиляторов, но оно не является непреложной истиной в последней инстанции для всех компиляторов сейчас и в будущем. Эффективно векторизовать данные не может ещё большее количество программистов, так что паритет сохраняется. тоже надо знать, как писать - кто спорит. Однако языки высокого уровня за счёт оптимизации компилятором "прощают" большую небрежность при написании, нежели в случае языка ассемблера. И в этом вся соль пункта, на который вы взъелись. Пример ошибки компилятора - то, что в компиляторах, как и в других программах, (могут) существовать ошибки - это не новость. Но каким боком это относится к обсуждаемому пункту? Поскольку источников для заявления нет - смело. Типа, то, что я какие-то источники (может, не самые лучшие из возможных) представил - это можно смело не брать в рассчёт? -- AVBtalk 17:49, 1 июня 2010 (UTC)
Насчет будущего - википедия отражает существующее настоящее. Когда оно меняется, меняется и статья. Так что ваше высказывание о фразе из источника -- не к месту. Там к тому же очевидно, что автор говорил о достаточно хороших компиляторах. Эффективно векторизовать данные не может ещё большее количество программистов, так что паритет сохраняется. -- это высказывание такого же рода, что в игре го компьютер равен человеку, т.к. большинство людей не умеет играть в го. Моя претензия заключается в том, что из источников вовсе не вытекает то, что написано в пункте статьи (так обычно и бывает, когда источники подыскиваются задним числом), наряду с неэнциклопедическим "нивелируются", и в этом же пункте дублируется последний. Поэтому я приведу пункт в соответствие с источником.Mathaddict 03:45, 3 июня 2010 (UTC)
- ваше высказывание о фразе из источника - вы забываете, что я говорю не только о временах, но и о полноте исследованного множества компиляторов. Ведь кроме "потребительских" компиляторов вроде Borland C существуют и менее известные компиляторы с более качественными оптимизаторами, в том числе ориентированные и на векторизацию. Но даже если их не было бы, вопрос всё равно не в конкретных компиляторах "здесь и сейчас", а в принципиальной возможности. подыскиваются задним числом - но сути обсуждаемого утверждения это не меняет. приведу пункт - отсутствие встроенного оптимизатора даёт шанс оптимизирующим компиляторам (1) обойти программу на асме, написанную средним программистом, и получить более качественный результат при перекомпиляции под другую платформу (тогда как программа на асме останется незменной); своим редактированием вы порезали значимую часть утверждения про перекомпиляцию под другую (совместимую) архитектуру. -- AVBtalk 11:30, 6 июня 2010 (UTC)
- Меняет. То, что для доказательства орисса про "среднего программиста" приводится источник, в котором говорится "начинающий программист", не есть хорошо. Тогда как программа на асме останется незменной неверно: условная трансляция, самомодифицирующийся код. Из заезженного утверждения про оптимизацию под платформу вроде как следует, что Java должна быть быстрее C/C++, тогда как на практике наблюдается обратно. Вы, кажется, не понимаете основной разницы между программами на языках высокого уровня и ассемблере.Mathaddict 05:05, 9 июня 2010 (UTC)
Зачем все эти "Статьи РФ"?[править код]
Прямо не энциклопедию, а УК РФ читаю: там 2 года дадут, тут 7 лет отсидеть... Для чего эти строчки в тексте? Попугать? Может в статью об отвертках тоже написать сколько за колото-ножевые раны дают? Убрать этот бред немедленно! 93.81.238.222 18:29, 2 февраля 2010 (UTC)
- Вы правы, стоит убрать. Тут даже в "программирование" этот раздел не засунешь. -- AVBtalk 09:24, 3 февраля 2010 (UTC)
Директивы[править код]
"...директивы (команды, не переводящиеся в процессорные инструкции, а выполняемые самим ассемблером)"
Это как? А "сам ассемблер" чем выполняется? Не процессором?
- Имеются в виду, что директивы влияют в первую очередь на процесс трансляции, а на результат трансляции влияют только косвенным образом. --Grig_siren 18:34, 1 мая 2011 (UTC)
Ошибочный код[править код]
К сожалению, программный код выполняет иные действия, чем заявлено. Этот код копирует строку в видеобласть. Никакого отношения к считыванию дискеты не имеет
org 7C00h
use16
jmp code
nop
db 'hellowrd'
SectSize dw 00200h
ClustSize db 001h
ResSecs dw 00001h
FatCnt db 002h
RootSiz dw 000E0h
TotSecs dw 00B40h
Media db 0F0h
FatSize dw 00009h
TrkSecs dw 00012h
HeadCnt dw 00002h
HidnSec dw 00000h
code:
cli
mov ax, cs
mov ds, ax
mov ss, ax
mov sp, 7c00h
sti
mov ax,0b800h
mov es,ax
mov di,200
mov ah,2
mov bx,MessStr
msg_print:
mov al,[cs:bx]
mov [es:di],ax
inc bx
add di,2
cmp bx,MessEnd
jnz msg_print
loo:
jmp loo
MessStr equ $
Message db 'Hello, World!'
MessEnd equ $
--Морфеус 15:31, 14 января 2013 (UTC)
- Можете поправить описание? Я так понимаю что и именованные ячейки SectSize - HidnSec тоже в программе не нужны. Xchgall 22:06, 20 марта 2013 (UTC)
Откат правки[править код]
Откатил эту правку т.к. свои комментарии нужно высказывать на странице обсуждения + комментарий неверен. В коде используется косвеная адресация и в al будет загружен 1 байт из соответствующей ячейки памяти. Xchgall 22:09, 20 марта 2013 (UTC)
Достоинства и недостатки[править код]
Я не совсем уверен, что такая глава вообще должна быть в вики-статье. Достоинства и недостатки - это довольно субъективные понятия. Так же, в этом разделе присутствуют "Достоинства", которые таковыми назвать нельзя. Например фраза "Язык ассемблера используется для создания «прошивок» BIOS." - это не достоинство, а скорее сфера применения.
В примеры[править код]
использование директив языка ассемблера для превращения любого бинарного файла в его db HEX репрезентацию (позволяет выкладывать точные репрезентации файлов, на ресурсах, на которых выкладывать бинарные формы запрещено) (репрезентация db HEX - полностью обратимый аналог бинарного файла, собирается любым ассемблером обратно в бинарный файл)
format binary as 'txt'
dd 'db '
offs = $
itsz = $
file 'полный путь до файла, которому должна быть создана db HEX репрезентация';:0,304
size = $-offs
db size dup (0,0,0)
dollar = '$'
comma = ','
linenums = size shr 4
dd linenums dup 0
repeat size
idx = size-%
row = idx shr 4
load c byte from idx+offs
l = c/16
h = c mod 16
if h>9
h = h + 'A' - 10
else
h = h + '0'
end if
if l>9
l = l + 'A' - 10
else
l = l + '0'
end if
w = l+ h shl 8
store byte dollar at (idx + row)*itsz + offs-1
store word w at (idx + row)*itsz + offs
if idx mod 16 < 15
store byte comma at (idx + row)*itsz + offs+2
else
store word $0A0D at (idx + row + 1)*itsz + offs-2
store word 'db' at (idx + row + 1)*itsz + offs
store byte ' ' at (idx + row + 1)*itsz + offs+2
end if
end repeat
store byte '?' at $-1
Использовано лично для загрузки репрезентаций EXE и DLL, например, во вконтакте. Это будет полезный примерчик, который может помочь каждому расшарить в интернете ресурсы которые расшарить в бинарной форме нельзя, повысить доверие к любому сайту со стороны антивирусов... Дизассемблирование не единственная операция обратная ассемблированию, формирование db HEX репрезентации, такая же обратная ассемблированию операция. (Как говорится, я предложил, а Вы там поавторитетнее, посчитаете интересным добавить - добавьте) У:ProMiNick 11:17, 26 октября 2020 (UTC)
- Проставил теги
<source>
. — Vort (обс.) 08:48, 26 октября 2020 (UTC) - Против. Возражаю, поскольку, во-первых, это является ВП:ОРИССными исследованиями, и, во-вторых, не имеет никакой энциклопедической значимости, в-третьих, Википедия - не место для публикации эссе. Я уже писал Вам вот здесь, что подобные изыскания стоит публиковать в личных блогах. Судя по Вашему опыту и квалификации, а также желанию делиться ими с другими, Вам давно пора завести такой блог и публиковать в нём интересные статью (я серьёзно). Но это не значит, что каждый существующий фрагмент кода или вариант его использования должен размещаться в энциклопедию. Юрий (обс.) 08:50, 26 октября 2020 (UTC)
- @Yurakum: значит ли это, что и пример «Пример структурирования данных: создание BMP-файла к коде программы с помощью директив» из статьи надо удалять? Если да, то будет ли это кто-то делать? — Vort (обс.) 08:53, 26 октября 2020 (UTC)
- Этот пример также был написан участником У:ProMiNick, только находился в статье Ассемблер, а мной был только перенесён сюда вместе с другими кодами, когда я чистил ту статью (так как примерам место не там, а тут). А вообще я лично тоже не приветствую нахождение здесь этого примера про BMP, потому что он выходит за рамки основной цели языка ассемблера. Если будет поднят вопрос о его удалении, я проголосую "за" с уже озвученной аргументацией. Юрий (обс.) 09:01, 26 октября 2020 (UTC)
- Что насчёт остальных примеров? Они не ОРИСС? Надо ли их удалять? — Vort (обс.) 09:07, 26 октября 2020 (UTC)
- Источники ни для одного не указаны, их происхождение я не знаю. Но это не значит, что они не рабочие, и к тому же они здесь, скорее, просто для иллюстрации. Если всё удалять, мы вообще без примеров остаемся, что не очень хорошо. Юрий (обс.) 09:14, 26 октября 2020 (UTC)
- В том-то и дело. Если тщательно следовать правилам, то раздел с примерами написать будет или очень сложно, или невозможно. Но и тащить в него всё подряд тоже неправильно. Я бы предложил тривиальность в роли критерия. Это и количество примеров ограничивает и их оригинальность. — Vort (обс.) 09:34, 26 октября 2020 (UTC)
- Вот вот, я заметил пример с BMP есть. формат db репрезентации куда интереснее, чем BMP.У:ProMiNick 11:57, 26 октября 2020 (UTC)
- На счёт критерия согласен. Количество примеров, скорее, ограничивается числом рассматриваемых архитектур и операционных систем (в случае ПК). Юрий (обс.) 09:44, 26 октября 2020 (UTC)
- в качестве источника для примеров можете попробовать https://pagedout.institute, правда вам виднее степень авторитетности ресурса У:ProMiNick 12:50, 26 октября 2020 (UTC)
- Задача сложнее, чем просто найти какой угодно кусок кода в авторитетном источнике. Надо ведь, чтобы этот код своим примером показывал читателю, каким является язык ассемблера. И именно на это нужен авторитетный источник. pl:Gynvael Coldwind, кстати, похож на специалиста, источники которого подойдут для статей. Но в данном случае они просто не в тему. — Vort (обс.) 10:35, 26 октября 2020 (UTC)
- @Yurakum: ещё интересный вопрос. Если всё же найти высококачественный источник с примером, который будет представлен именно как пример, то можно ли его будет помещать в статью? Не прийдут ли защитники авторского права и не скажут ли, что это КОПИВИО? Для простых случаев аргументом может быть тривиальность примера (то есть, отсутствие творческого вклада, а, значит, и защиты авторским правом), но уверенности в этом у меня нет. — Vort (обс.) 10:52, 26 октября 2020 (UTC)
- Значит из соображений тривиальности мой пример хорош - он не использует ни одной мнемоники процессора, и являет собой пример, что ассемблер это не узкофункциональный мнемопроцессор, а ассемблер. директивы которого даже сами по себе - могучий инструмент. (А то у вас не ассемблер, а мнемопроцессор какой то выходит) У:ProMiNick 15:10, 26 октября 2020 (UTC)
А https://en.wikipedia.org/wiki/Assembly_language - авторитетный источник? где базовые элементы языка директивы данных? ассемблерные директивы? мой пример как раз на то что у вас отсутствует вовсе. Где энциклопедическое содержимое эквивалентное английской версии. Почему русская версия ассемблера мнемонический обрубыш ассемблера? У:ProMiNick 17:26, 26 октября 2020 (UTC)
- Нет, Википедия на другом языке не является авторитетным источником. Там сидят такие же участники, как и у нас тут, и они ничем не более авторитетны (это не только в плане ассемблера, а вообще).
- Но: а) в английской статье могут быть указаны ссылки на АИ, которые можно использовать; б) статья на другом языке может быть использована как основа для перевода, см. ВП:Перевод статей. Юрий (обс.) 14:37, 26 октября 2020 (UTC)
Правила[править код]
Начну с красной строки, так как это обобщённый ответ на разные сообщения. Правила Википедия:Оформление_статей/Статьи_об_информационных_технологиях#Примеры_кода говорят следующее (цитаты курсивом):
- Примеры кода приводятся чаще всего для иллюстрации подхода конкретного языка, для приведения примеров специфичных для языка конструкций или особенностей — цели не нарушаем.
- Следует избегать написания любого примера, если он не внесёт значимого вклада в фундаментальное понимание энциклопедического содержимого — поэтому, полагаю, пример кода с BMP подлежит удалению, а новый (предлагаемый выше) пример использования директив - неиспользованию, так как энциклопедической значимости они не имеют. Число "примеров программы «Hello, world!» для различных платформ ЭВМ" я бы тоже подсократил, оставив наиболее распространённые среды программирования (но не настаиваю). Коды по микроконтроллерам действительно разношёрстны, можно оставить.
- Код, не относящийся к энциклопедическому содержимому, должен быть перемещён за пределы Википедии. Викиучебник - подходящий проект Викимедиа для кода — У:ProMiNick, вот Вам и ответ, куда можно разместить все Ваши примеры. Там есть инструкции, посмотрите, пожалуйста, сами, с Викиучебником я не работал и не могу подсказать лучше того как там написано.
- Реализации исходного кода должны быть совместимы с лицензиями GFDL и CC-BY-SA (эти лицензии несовместимы с GPL) — в нашем случае это вообще труднодостижимо. Хорошие АИ — печатные книжки и журналы по Ассемблеру, но они все под ВП:КОПИВИО, а большинство ещё и ВП:САМИЗДАТ. Так как мы не ставим тут целью доказывать работоспособность приведённых примеров, а наша задача — это просто иллюстрирование фрагмента кода на языке (подошёл бы и вообще незаконченный фрагмент кода), наверное, компромиссное решение — оставить эти самописные примеры, которые есть, без указания источников.
- Не рекомендуется помещать листинг в шаблоны вида Википедия:Сворачивающиеся блоки — печалька. Но это рекомендация, не требование.
- примеры не должны быть представлены галереей в конце статьи, их нужно использовать в разделах статьи — ещё печалька. Но мне кажется, мы не сможем так это раскидать, эти примеры не относятся к какому-то отдельному разделу.
Давайте сделаем то что можем из описанного. Юрий (обс.) 14:14, 26 октября 2020 (UTC)
- Самое главное — эта страница правилом не является. У страниц-правил есть определённые отметки. Второе по важности — этот раздел касается статей об алгоритмах. Поэтому использовать его надо, скорее, не как руководство к действию, а как источник вдохновения. — Vort (обс.) 16:07, 26 октября 2020 (UTC)
- С причинами использования фрагментов кода согласен — они должны рассказывать читателю что-то новое. Правда, формализовать это, скорее всего, непросто. — Vort (обс.) 16:11, 26 октября 2020 (UTC)
- Рекомендация про сворачивающиеся блоки, скорее, относится к фрагментам, которые иллюстрируют какую-то особенность. Допустим, в тексте идёт описание возможности языка и рядом приводится фрагмент. Конечно, его в блок заворачивать не надо. Или статья про алгоритм и посреди статьи именно этот алгоритм напечатан. Тоже скрывать смысла мало. — Vort (обс.) 16:11, 26 октября 2020 (UTC)
- С лицензиями и ориссом ситуация самая нехорошая. Согласен, что лучше орисс на грани тривиальности, чем нарушение авторского права. Так как спорить со сторонниками идеального соблюдения авторских прав — занятие не из приятных. Глупая причина, но что есть, то есть. — Vort (обс.) 16:15, 26 октября 2020 (UTC)
- Она относится к тематическим руководствам. Сворачиваемые блоки в нашем случае смотрятся лучше, чем несколько страниц сплошного многобувия, и в конце статьи в таком виде им намного лучше, чем раскиданными по тексту.
- Можем сделать то что можем. В нашем случае, похоже, мы можем только удалить лишнее. )) Юрий (обс.) 16:19, 26 октября 2020 (UTC)
- Они в конце статьи потому, что иллюстрируют всю статью. Если бы иллюстрировали разделы, то были бы в разделах (хороший пример в статье C Sharp). — Vort (обс.) 16:22, 26 октября 2020 (UTC)
- Я предлагаю убрать примеры про загрузочный сектор дискеты (явно не тривиально и не относится к "Hello, world!" как таковому) и про файл BMP (это вообще нестандартное использование ассемблера). Пример добавления строки «Hello world!» в код программы лучше убрать в раздел с директивами и сделать несворачиваемым, а в раздел "Типичный формат записи команд" добавить несворачиваемый пример из 2-3 строк просто фрагмента текста программы со всеми атрибутами (метки, мнемокод, параметры, комментарий). А остальной сворачиваемый фрагмент оставить в конце статьи как иллюстрацию. Юрий (обс.) 16:28, 26 октября 2020 (UTC)
- Я не против таких изменений. Будет скорее лучше, чем хуже. — Vort (обс.) 16:37, 26 октября 2020 (UTC)
- Хорошо, займусь. Заодно тут напрашивается немного изменить структуру статьи и желательно поменять картинку, потому что на ней листинг, а не исходный код. Юрий (обс.) 16:44, 26 октября 2020 (UTC)
- Внёс оговорённые изменения и переработал статью. Юрий (обс.) 01:34, 28 октября 2020 (UTC)
- Забыл добавить: если кто-то захочет переносить удалённые примеры в Викиучебник, то они доступны по этой ссылке. Юрий (обс.) 09:31, 28 октября 2020 (UTC)
- Я не против таких изменений. Будет скорее лучше, чем хуже. — Vort (обс.) 16:37, 26 октября 2020 (UTC)
- Я предлагаю убрать примеры про загрузочный сектор дискеты (явно не тривиально и не относится к "Hello, world!" как таковому) и про файл BMP (это вообще нестандартное использование ассемблера). Пример добавления строки «Hello world!» в код программы лучше убрать в раздел с директивами и сделать несворачиваемым, а в раздел "Типичный формат записи команд" добавить несворачиваемый пример из 2-3 строк просто фрагмента текста программы со всеми атрибутами (метки, мнемокод, параметры, комментарий). А остальной сворачиваемый фрагмент оставить в конце статьи как иллюстрацию. Юрий (обс.) 16:28, 26 октября 2020 (UTC)
- Они в конце статьи потому, что иллюстрируют всю статью. Если бы иллюстрировали разделы, то были бы в разделах (хороший пример в статье C Sharp). — Vort (обс.) 16:22, 26 октября 2020 (UTC)
Вот, кстати, пример программы на Ассемблере из авторитетного источника: скрин. Юрий (обс.) 12:50, 28 октября 2020 (UTC)
Спорная формулировка[править код]
В тексте присутствует такая формулировка:
Кроме того, существуют компьютеры, реализующие в качестве машинного язык программирования высокого уровня (Форт, Лисп, Эль-76). Фактически, в таких компьютерах они выполняют роль языков ассемблера.
Если посмотреть примеры программ на этих языках по ссылкам, то у меня лично возникают сомнения, что процессоры поддерживают такие команды на уровне своих инструкций. Предлагаю привести источники или удалить. Юрий (обс.) 01:17, 28 октября 2020 (UTC)
- "далее нескольких прототипов microJava 701 дело не пошло" https://www.osp.ru/cw/2005/09/86657 http://www.chipinfo.ru/chipdir/fam/java/index.htm , но ведь до нескольких прототипов дело дошло - значит архитектура имеет место быть, а java это язык высокого уровня (и кстати java байткод без проблем формируется прямо из под ассемблера - fasmg так может, так что есть как процессоры для java байткода так и ассемблеры, конечно java байткод это не совсем java, но есть однозначное соответствие одного другому) У:ProMiNick 08:24, 28 октября 2020
- Различие в том, что ассемблер занимается трансляцией. Был код операции в виде текста, получился код операции в виде байта в памяти. Для Java же такое не пройдёт. Для начала надо скомпилировать Java в байткод и затем уже можно этот байткод выполнять (интерпретируя или напрямую). — Vort (обс.) 06:40, 28 октября 2020 (UTC)
; This example uses a very simple set of macroinstructions to generate ; the basic structures of JVM class file. ; Please refer to "The Java Virtual Machine Specification" for the detailed ; information on this file format. include 'jclass.inc' format binary as 'class' u4 0xcafebabe ; magic u2 0,49 ; minor and major version constant_pool _Code constant_utf8 'Code' _init constant_utf8 '<init>' _main constant_utf8 'main' _void_arrstr constant_utf8 '([Ljava/lang/String;)V' Test_class constant_class _Test _Test constant_utf8 'Test' Object_init constant_methodref Object_class,init_method Object_class constant_class _Object _Object constant_utf8 'java/lang/Object' init_method constant_nameandtype _init,_void _void constant_utf8 '()V' System.out constant_fieldref System_class,out_field System_class constant_class _System _System constant_utf8 'java/lang/System' out_field constant_nameandtype _out,PrintStream_type _out constant_utf8 'out' PrintStream_type constant_utf8 'Ljava/io/PrintStream;' PrintStream_println constant_methodref PrintStream_class,println_method PrintStream_class constant_class _PrintStream _PrintStream constant_utf8 'java/io/PrintStream' println_method constant_nameandtype _println,_void_str _println constant_utf8 'println' _void_str constant_utf8 '(Ljava/lang/String;)V' Integer_toString constant_methodref Integer_class,toString_method Integer_class constant_class _Integer _Integer constant_utf8 'java/lang/Integer' toString_method constant_nameandtype _toString,_str_int _toString constant_utf8 'toString' _str_int constant_utf8 '(I)Ljava/lang/String;' number constant_integer 17 end constant_pool u2 ACC_PUBLIC+ACC_SUPER ; access flags u2 Test_class ; this class u2 Object_class ; super class interfaces end interfaces fields end fields methods method_info ACC_PUBLIC, _init, _void ; public void Test() attribute _Code u2 1 ; max_stack u2 1 ; max_locals bytecode aload 0 invokespecial Object_init return end bytecode exceptions end exceptions attributes end attributes end attribute end method_info method_info ACC_PUBLIC+ACC_STATIC, _main, _void_arrstr ; public static void main(String[] args) attribute _Code u2 3 ; max_stack u2 2 ; max_locals bytecode ldc number istore 1 example_loop: iload 1 dup imul invokestatic Integer_toString getstatic System.out swap invokevirtual PrintStream_println iinc 1,-1 iload 1 ifne example_loop return end bytecode exceptions end exceptions attributes end attributes end attribute end method_info end methods attributes end attributes
- Различие в том, что ассемблер занимается трансляцией. Был код операции в виде текста, получился код операции в виде байта в памяти. Для Java же такое не пройдёт. Для начала надо скомпилировать Java в байткод и затем уже можно этот байткод выполнять (интерпретируя или напрямую). — Vort (обс.) 06:40, 28 октября 2020 (UTC)
так что именно там не пойдет под ассемблером? взято из примеров fasmg У:ProMiNick 12:29, 28 октября 2020
- Видимо, речь тут об en:High-level language computer architecture. В частности, en:Lisp machine и en:Java processor. Если переписать понятным языком, то можно и оставить. Но намекать на то, что язык высокого уровня может напрямую выполняться на процессоре (без промежуточного представления), думаю, не стоит. — Vort (обс.) 06:36, 28 октября 2020 (UTC)
lang="asm"[править код]
Коллега Vort, Ваша ссылка содержит, а эта — нет. Получается, список по второй ссылке устарел? Юрий (обс.) 16:32, 18 января 2021 (UTC)
Смотрю, что в одних блоках в статье это используется, а в других — нет. Надо как-то, видимо, привести всё к единому виду. Юрий (обс.) 16:34, 18 января 2021 (UTC)
- Там ниже написано «For accurate language codes, see complete details in the Pygments document and there are some mappings for some language names which were supported by GeSHi». Чтобы уж совсем убедиться, можно глянуть в исходники (про Pygments сказано вот тут). В самом списке, кстати, языки, а не коды.
asm
вполне соответствует "Assembly (various)", то есть «всяким ассемблерам». — Vort (обс.) 16:54, 18 января 2021 (UTC) - Не используется только в блоке, в котором не сам ассемблерный код, а его формат. Там подсветка и не нужна, так как, грубо говоря, этот блок не скомпилируется. — Vort (обс.) 16:56, 18 января 2021 (UTC)