it-юмор :: geek (Прикольные гаджеты. Научный, инженерный и айтишный юмор)

it-юмор geek 
it-юмор,geek,Прикольные гаджеты. Научный, инженерный и  айтишный юмор
Подробнее

it-юмор,geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор
Еще на тему
Развернуть
И 50к+ строк асемблера
Любой С-код проходит стадию ассемблера.
nonnname nonnname 16.09.201903:34 ответить ссылка -0.6
С добрым утром. Уже несколько десятков лет, как не проходит - за ненадобностью.
dadv dadv 16.09.201906:37 ответить ссылка -2.7
Что, прям в машинные коды делает?
Проходит. Только незаметно.
nonnname nonnname 16.09.201906:50 ответить ссылка -0.1
> Что, прям в машинные коды делает?

Когда дело доходит до кодогенерации под целевой процессор - да, прямо в машинные коды.

> Проходит. Только незаметно.

Нет. Это было на заре развития, когда компилятор C генерировал ассемблерный листинг и скармливал его ассемблеру для кодогенерации. Это время давно прошло.
dadv dadv 16.09.201908:01 ответить ссылка 0.1
Я конечно может хуйню сморожу, но разве сам машинный код это не есть ассемблер? Напиши любую хуйню на сях, да хоть простой хелло ворлд, скомпилируй, на выходе мы получим исполняемый файл, в зависимости от процессора, операционной системы он будет разного формата, тем не менее открой его через хекс редактор и мы увидем опкоды ассемблера.
ivdos ivdos 16.09.201909:40 ответить ссылка -0.1
Нет, машинный (бинарный) код != ассемблер. Опкоды это машинный код, да, но не ассемблер.

Вообще "ассемблер" это жаргонизм, если это слово используют, подразумевая "язык ассемблера".

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

А непосредственно (макро-)ассемблер это программа, которая транслирует программу на своём языке (языке ассемблера) в объектный код. В комплекте с ассемблером обычно поставляется компоновщик, который позволяет объединять сгенерированные ассемлером файлы объектного кода в библиотеки. А так же редактор связей (линкер), который из объектного кода и, возможно, библиотек создаёт исполняемый файл.
dadv dadv 16.09.201909:51 ответить ссылка 0.7
Ну я как бы сильно в теорию не вдавался, однако у меня была необходимость править уже скомпилированный файл, за неимением сорцов правил прямо внутри, искал код кейвы, ну в общем типичный код инжект, только напрямую. Тогда я с головой ушел в изучение ассемблерных кодов, да и сайтик https://godbolt.org/ помог. Но свою задачу выполнил и баг исправил.
ivdos ivdos 16.09.201910:03 ответить ссылка 0.1
Машинный код и ассемблерный листинг - разное. Они однозначно сопоставимые, но всё-таки инструкция "nop" и байт в файле "0x90" даже внешне не похожи.
Они даже однозначно не сопоставимые, только в одну сторону. Из машинного кода невозможно дизассемблировать имена переменных (которые в ассемблере есть), символьных констант и вообще макросов. И многое другое. Бывает даже так, что одному машинному коду соответствует несколько разных ассемблерных команд (синонимы бывают).
dadv dadv 16.09.201911:32 ответить ссылка 0.0
это тогда не просто ассемблер, а макроассемблер.
я в своё время писал на х86-ассемблере напрямую в debug.com, там всё было вполне однозначно.
Есть символьные инструкции языка ассемблера, а есть машинные коды, им соответствующие и это *разные* вещи.
dadv dadv 16.09.201911:33 ответить ссылка 0.0
Машинный код - это ноли и единички, ассемблер - это уже более высокоуровневый язык программирования.
"компилятор C генерировал ассемблерный листинг и скармливал его ассемблеру для кодогенерации" - имеется в виду, что раньше ты писал код на С (что-то типа

int x = 0; x = x+1;),

он переваривал его в ассемблер (что-то типа

org 100h
mov dx,msg
mov ah,9
int 21h
mov ah,4Ch
int 21h
msg db 'Hello, World!',0Dh,0Ah,'$'),

который потом превращался в машинный код, который я записать не могу, но выглядит он как-то так:

00100101
10100100
01110101
...


Сейчас же С просто сразу все превращает в 0 и 1.
На каком моменте происходит оптимизация кода?
На уровне ЯВУ невозможно, потому что оптимизации зависят от процессора. На уровне машинного кода?
Оптимизаций есть много разных. Есть и те, которые на уровне C, они прописаны в стандарте.

Например, если программа выполняет арифметические действия без побочных эффектов и результат записывает в переменную и потом никогда её не читает (локальная переменная функции и выход из функции после вычислений), то всё это вычисление можно соптимизировать нафик.

Оптимизации, которые зависят от процессора, выполняются непосредственно перед кодогенерацией. Вообще у компилятора дофига разных этапов обработки исходника: лексический анализ, семантический, оптимизации разные. Кодогенерация самый последний этап непосредственно компиляции. Потом там ещё полученный объектный код может причёсывать, выкидывая из него статические глобальные переменные, к которым нет обращений и тому подобное.
dadv dadv 16.09.201915:05 ответить ссылка 0.0
Для тебя есть квест: поправить страницу в Википедии https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80
А именно часть "Компили́ровать — проводить трансляцию машинной программы с предметно-ориентированного языка на машинно-ориентированный язык"
Сам, всё сам.
dadv dadv 16.09.201911:34 ответить ссылка 0.0
Только зарегистрированные и активированные пользователи могут добавлять комментарии.
Похожие темы

Похожие посты
One morning you wake up find out you have access to God’s developer console. What’s the first thing you do with this power?
Discussion
♦ 154 +	W 479	& Share
^ BEST COMMENTS ▼
I like forks • 5h
hehe3301 • 7h
sudo rm -rf oceans/*/contents/
*.plástic
sudo rm -rf people/*/*.cáncer sudo rm -rf v
подробнее»

it-юмор geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор без перевода it humor geek it юмор

One morning you wake up find out you have access to God’s developer console. What’s the first thing you do with this power? Discussion ♦ 154 + W 479 & Share ^ BEST COMMENTS ▼ I like forks • 5h hehe3301 • 7h sudo rm -rf oceans/*/contents/ *.plástic sudo rm -rf people/*/*.cáncer sudo rm -rf v
¿i
OR IS IT TESTING ME?
Й