Pull to refresh

Comments 10

Говорят, что самое сложное - это сделать просто. Видимо, есть следующий уровень - просто объяснить. С моей точки зрения - удалось.👏

Пнули АМД зачем-то

16 регистров — это вдвое больше, чем было в x86 (8). Для большинства функций хватает, особенно с учётом XMM/YMM.

Причина ограничения — не спешка, а обратная совместимость. AMD расширяла существующий x86, а не проектировала с нуля. Больше регистров = длиннее кодировка инструкций, ломается плотность кода.

ARM64 и RISC-V имеют 31-32 регистра, но там изначально другая философия (фиксированная длина инструкций).

Да и не спешил АМД никуда. Альтернатива интаниум. Когда Бобик сдох Интел просто скопировала АМД 64

Одно не исключает другого. Когда я изучаю ассемблер для arm64, то в шоке насколько удобнее программировать. Как и из-за числа регистров, так из-за очень продуманной системы команд (двойные загрузки, условные команды).

Когда Бобик сдох Интел просто скопировала АМД 64

Не «скопировал», а «лицензировал».

По началу было интересно, но дойдя до особенностей, понял, что тут что-то не так. Вспомнилось как учили в универе Ассемблер, писали лабы и даже чет на экранчик с микрухи выводили. Что-то не совсем понятно, чем Особенности в Go отличаются от обычного поведения ассемблера:

  1. Никто Вам не гарантирует, что флаги сбрасывают, очищать их после своих действий просто правило хорошего тона. Ведь не понятно, а когда вы флаг прочитаете, надо ли оно Вам вообще.

  2. Сохранение состояния Вашей программы -- Ваша забота, это Вам не высокоуровневый язык программирования, функции, классы и т.д. Это как глобальные переменные, они по сути такие и есть. Просто некоторые вы сможете только прочитать.

  3. Тут все просто, выполняя команду меняются состояния регистров, не всегда, но если это происходит в описании команды это описано и всегда известно, что регистр может поменяться. А как известно Флаги -- это биты в определенном регистре...

Складывается впечатление, что никогда не работали с ассемблером.

Смысл статьи — дать понятие об ассемблере, тем кто работал только с Го. Это и об ассемблере и об Го-ассемблере статья.

Посиотите на Грамоте.ру. Это допустимый вариант.

Я когда-то тоже довольно долго возился с асм-простынями, потом посмотрел на godbolt.org, что выдают компиляторы C/C++, и понял, что нет смысла. По соотношению "скорость кода/скорость разработки" гораздо эффективнее подтюнить сишный код, чтобы компилятор выдал около-оптимальный асм, чем пытаться писать идеально вручную. Также код получается компактнее/читабельнее/переносимее, и какого-то ужасного UB в небольших функциях вы скорее всего не наловите.
Рассматривайте это как шейдеры/кернелы CUDA - их же пишут на диалекте Си даже те, кто Си не любит. А куда денешься, нет шейдеров на Го, и шейдерный ассемблер существовал недолго.

Sign up to leave a comment.

Information

Website
ruvds.com
Registered
Founded
Employees
11–30 employees
Location
Россия
Representative
ruvds