Отличная статья. Надеюсь, что автор простит меня, если я немного подушню.
На всякий случай, команда ld (полн. "LOAD") выполняется как mov из IA-32, а не как lea
Для синтаксиса с меткой ld reg, label она выполняется именно как lea, то есть загружает именно адрес, а не значение. MASM-синтаксис для mov reg, label загружал значение, хранящееся в памяти по метке.
ОС загружает бинарный образ .COM файла начиная с адреса 0x0100. Именно благодаря ORG 100h комманде процессору.
Нет. Директива ORG указывает ассемблеру, что метки нужно пересчитывать в адреса таким способом, будто код, располагающийся после директивы ORG, размещён по адресу, указанному в этой директиве. А CP/M загружает бинарный образ .COM файла просто всегда с адреса 0x100. И, что очень важно, этот адрес и является точкой входа (не увидел упоминания этого факта).
И так, идея комманды не меняется. .COM это все еще PIE-монолит (исполняемый файл независящий от точки входа).
Эээ, вообще PIE означает "position-independent executable" (исполняемый код, не привязанный к адресу загрузки) и к COM-файлам никакого отношения не имеет ни в CP/M, ни в MSDOS. Для CP/M файл будет загружен в абсолютный адрес 0x0100, так что нет никакой независимости от адреса загрузки. Для MS-DOS файл будет загружен в какой-то сегмент и тоже по абсолютному смещению 0x0100, сегмент же не важен, за него COM-программа не вылезает. Из-за независимости от сегмента с большой натяжкой COM-файл для MSDOS может считаться PIE. А насчёт "независимости от точки входа" тоже хрень, точка входа всегда по адресу 0x0100.
Насколько я знаю, идея .COM файлов для MSDOS состояла в том, что бинарным транслятором машинный код для 8080/Z80 превращается в код для 8086, а DOS эмулирует в PSP функционал CP/M, предоставляя переносимость программ без исходников.
Согласен. Только тупая нейросетка в качестве демонстрационного примера конкурентности могла предложить посчитать сумму квадратов элементов массива, и забыть хоть как-то проинициализировать эти элементы. Первый пример на Crystal не вообще не скомпилируется, пропущена инициализация data и chunk_size.
Статья сойдёт, но название чудное, тут к парсингу относится только самодельный extractValue(), в котором из техник парсинга наблюдаем indexOf() и substring().
Сложнее был ну, например, Saboteur 2, который вы упорно именуете "Саботажем", который офигителен. Он, в отличие от Robocop или Batman, нифига не линеен, и для прохождения нужно нарисовать карту, иначе в подземельях не выжить. Классная графика и атмосфера. Там тоже ниндзя, только женщина.
Я сильно подозреваю, что про 70% игр - это вы прихвастнули, я думаю, 20% вы видели из того, что было спирачено и доступно в бывшем СССР.
Ну нет. Графика важна, но в Target: Renegade привлекает не она, а крутейший мордобой. Первый удар оглушает врага, и дальше начинаешь его дубасить, второй гад сзади подходит, ты его резко ногой назад, то ли под дых, то ли по яйцам, он зажался, ты продолжаешь первого фигачить, он упал, подошёл, сел на него, и лежачего мутузишь, второй очнулся, подходит к тебе и сбивает. Потом третий с кувалдой, а ты его ногой в прыжке, он падает, роняет кувалду, ты её берёшь сам, ммм! Вон у вас на картинке одна тётка сзади держит, вторая морду начищает, такого другие игры не предлагали.
Terminator 2 - тоскливая игра. Batman: the movie, Robocop и другие игры Ocean неплохи, но они простенькие, там надо тупо запоминать, когда откуда какой враг появится, графика норм но не ох-ах.
Если ты решил купаться И с обрыва прыгнул вниз, Но в полёте передумал В речку мокрую нырять, Прекрати паденье в воду И лети обратно, вверх. Изменить своё решенье Может каждый человек.
Вообще ни разу не ответили, не вижу слов "да" или "нет". Но после вот этого
Во-первых трансцендентность Кто это основа концепции. Оно принципиально не определяется.
у меня появилась ещё более ёмкая формулировка вашей теории: "Каждый человек что-то не понимает. Давайте играть в игру, что всё непонимаемое - это не вообще разнородная хрень, а кусочки чего-то одного большого, и дадим ему имя Непонимаемый. Поскольку каждый человек что-то не понимает (любого спроси!), то Непонимаемый существует". Как такой вариант?
Пока у нас с вами получается не очень. Я пытаюсь упростить мысль, очистить от лишнего, а вы во-первых, не отвечаете на вопрос, который я задал: правильно или нет? Во-вторых, накидываете слов, которые очень перегружены смыслами: "свобода", "жизнь", "определение", "сущность", "структура". В своём ответе вы не привели ощущений, явлений и экспериментов, которые бы подтвердили наличие неведомой трансцедентной херни, но продолжаете апеллировать к процессам, происходящим в нервных системах голых обезьян, так что пока я укрепляюсь в своём понимании вашей мысли. Так правильно я понял или нет?
Ладно, чуть похоливарим. Чтобы опровергать, нужно сначала превратить вашу лирику в мысль, поэтому я буду задавать уточняющие вопросы.
Я вкратце вашу мысль понял так: есть нечто трансцедентное, с одной стороны оно разумное, с другой - больше и круче, чем вселенная. При этом мы никак не можем непосредственно в ощущениях убедиться в его наличии. Но оно точно существует, потому что иначе грустно и "жить невозможно" каким-то голым обезьянам на маленьком куске камня на окраинах одной из хренналиона галактик. Правильно?
Для тех, кто не понял, что сделал автор. Игры для ZX Spectrum распространялись вначале на кассетах, потом, с ростом популярности дисководов, которые нужно было покупать отдельно, игры стали распространяться и на дискетах. Редкие ранние игры писались на BASIC, но их производительность не очень, поэтому качественные игры делались на ассемблере для процессора Z80. Игра загружается так: вводится команда LOAD "", включается с нужного места магнитофон, и ждём 5 минут. При этом вначале загружается и автоматически выполняется короткая BASIC-программа загрузчик, которая уже загружает последующие блоки сырых байт в нужные места, и в конце стартует выполнение машинного кода. Поэтому анализ программ начинают именно с анализа их BASIC-загрузчика. Защиту программ от анализа, взлома и копирования также начинали с защиты загрузчика, для чего имелся ряд приёмов. Например, BASIC хранил числовые константы в теле программы два раза: сначала шло текстовое представление для листинга, потом - внутреннее представление для математической подсистемы BASIC. И аккуратными манипуляциями с байтами памяти можно было сделать так, что эти два представления отличаются друг от друга, смущая исследователя, который верил тому, что видел в текстовом представлении. Именно это и происходит в загрузчике, который подвернулся автору, и автор вернул загрузчику простой и ясный вид.
Большая часть философии - упражнение лингвистическое, а не логическое, попытка выжать смысл из слов. Вот и тут, результат, к которому хотят прийти, уже известен: "трансцедентное существует", после чего начинаются песни.
Пример у вас с подвохом. Из него можно подумать, что строки сравниваются по числам слева направо. Хотя на самом деле оно сортируется по сумме элементов.
При всём моём уважении к APL, эта статья - жуткое LLM-дерьмо с мерзким форматированием и тупейшим повторением "математическая абстракция". Если автор человек, то пусть объяснит, что такое "сортировка матрицы", существование которой он приписывает APL и K.
Отличная статья. Надеюсь, что автор простит меня, если я немного подушню.
Для синтаксиса с меткой
ld reg, label
она выполняется именно какlea
, то есть загружает именно адрес, а не значение. MASM-синтаксис дляmov reg, label
загружал значение, хранящееся в памяти по метке.Нет. Директива ORG указывает ассемблеру, что метки нужно пересчитывать в адреса таким способом, будто код, располагающийся после директивы ORG, размещён по адресу, указанному в этой директиве. А CP/M загружает бинарный образ .COM файла просто всегда с адреса 0x100. И, что очень важно, этот адрес и является точкой входа (не увидел упоминания этого факта).
Эээ, вообще PIE означает "position-independent executable" (исполняемый код, не привязанный к адресу загрузки) и к COM-файлам никакого отношения не имеет ни в CP/M, ни в MSDOS. Для CP/M файл будет загружен в абсолютный адрес 0x0100, так что нет никакой независимости от адреса загрузки. Для MS-DOS файл будет загружен в какой-то сегмент и тоже по абсолютному смещению 0x0100, сегмент же не важен, за него COM-программа не вылезает. Из-за независимости от сегмента с большой натяжкой COM-файл для MSDOS может считаться PIE. А насчёт "независимости от точки входа" тоже хрень, точка входа всегда по адресу 0x0100.
Насколько я знаю, идея .COM файлов для MSDOS состояла в том, что бинарным транслятором машинный код для 8080/Z80 превращается в код для 8086, а DOS эмулирует в PSP функционал CP/M, предоставляя переносимость программ без исходников.
Согласен. Только тупая нейросетка в качестве демонстрационного примера конкурентности могла предложить посчитать сумму квадратов элементов массива, и забыть хоть как-то проинициализировать эти элементы. Первый пример на Crystal не вообще не скомпилируется, пропущена инициализация data и chunk_size.
Статья сойдёт, но название чудное, тут к парсингу относится только самодельный extractValue(), в котором из техник парсинга наблюдаем indexOf() и substring().
Alone in the dark, Ultima Underworld, Wing commander privateer.
Круто.
Дизайнер шрифта - чёртов гений. В клетку 8*8 вставить буквы, у которых толщина линий 3 пикселя, и оно всё равно отлично читается.
Сложнее был ну, например, Saboteur 2, который вы упорно именуете "Саботажем", который офигителен. Он, в отличие от Robocop или Batman, нифига не линеен, и для прохождения нужно нарисовать карту, иначе в подземельях не выжить. Классная графика и атмосфера. Там тоже ниндзя, только женщина.
Я сильно подозреваю, что про 70% игр - это вы прихвастнули, я думаю, 20% вы видели из того, что было спирачено и доступно в бывшем СССР.
Ну нет. Графика важна, но в Target: Renegade привлекает не она, а крутейший мордобой. Первый удар оглушает врага, и дальше начинаешь его дубасить, второй гад сзади подходит, ты его резко ногой назад, то ли под дых, то ли по яйцам, он зажался, ты продолжаешь первого фигачить, он упал, подошёл, сел на него, и лежачего мутузишь, второй очнулся, подходит к тебе и сбивает. Потом третий с кувалдой, а ты его ногой в прыжке, он падает, роняет кувалду, ты её берёшь сам, ммм! Вон у вас на картинке одна тётка сзади держит, вторая морду начищает, такого другие игры не предлагали.
Terminator 2 - тоскливая игра. Batman: the movie, Robocop и другие игры Ocean неплохи, но они простенькие, там надо тупо запоминать, когда откуда какой враг появится, графика норм но не ох-ах.
Диззи прекрасен, у него был стиль.
Да, COPY транзакционна.
Не слушайте их, оставьте простой и ясный вариант. А ещё можно исходники на github.
Я использовал слово "непонимаемое", а вы - не познаваемое. Нужно определение хотя бы для познаваемого.
Офигенный стих Остера:
Если ты решил купаться
И с обрыва прыгнул вниз,
Но в полёте передумал
В речку мокрую нырять,
Прекрати паденье в воду
И лети обратно, вверх.
Изменить своё решенье
Может каждый человек.
Вообще ни разу не ответили, не вижу слов "да" или "нет". Но после вот этого
у меня появилась ещё более ёмкая формулировка вашей теории: "Каждый человек что-то не понимает. Давайте играть в игру, что всё непонимаемое - это не вообще разнородная хрень, а кусочки чего-то одного большого, и дадим ему имя Непонимаемый. Поскольку каждый человек что-то не понимает (любого спроси!), то Непонимаемый существует". Как такой вариант?
Пока у нас с вами получается не очень. Я пытаюсь упростить мысль, очистить от лишнего, а вы во-первых, не отвечаете на вопрос, который я задал: правильно или нет? Во-вторых, накидываете слов, которые очень перегружены смыслами: "свобода", "жизнь", "определение", "сущность", "структура". В своём ответе вы не привели ощущений, явлений и экспериментов, которые бы подтвердили наличие неведомой трансцедентной херни, но продолжаете апеллировать к процессам, происходящим в нервных системах голых обезьян, так что пока я укрепляюсь в своём понимании вашей мысли. Так правильно я понял или нет?
Ладно, чуть похоливарим. Чтобы опровергать, нужно сначала превратить вашу лирику в мысль, поэтому я буду задавать уточняющие вопросы.
Я вкратце вашу мысль понял так: есть нечто трансцедентное, с одной стороны оно разумное, с другой - больше и круче, чем вселенная. При этом мы никак не можем непосредственно в ощущениях убедиться в его наличии. Но оно точно существует, потому что иначе грустно и "жить невозможно" каким-то голым обезьянам на маленьком куске камня на окраинах одной из хренналиона галактик. Правильно?
Статью плюсанул.
Для тех, кто не понял, что сделал автор. Игры для ZX Spectrum распространялись вначале на кассетах, потом, с ростом популярности дисководов, которые нужно было покупать отдельно, игры стали распространяться и на дискетах. Редкие ранние игры писались на BASIC, но их производительность не очень, поэтому качественные игры делались на ассемблере для процессора Z80. Игра загружается так: вводится команда LOAD "", включается с нужного места магнитофон, и ждём 5 минут. При этом вначале загружается и автоматически выполняется короткая BASIC-программа загрузчик, которая уже загружает последующие блоки сырых байт в нужные места, и в конце стартует выполнение машинного кода. Поэтому анализ программ начинают именно с анализа их BASIC-загрузчика. Защиту программ от анализа, взлома и копирования также начинали с защиты загрузчика, для чего имелся ряд приёмов. Например, BASIC хранил числовые константы в теле программы два раза: сначала шло текстовое представление для листинга, потом - внутреннее представление для математической подсистемы BASIC. И аккуратными манипуляциями с байтами памяти можно было сделать так, что эти два представления отличаются друг от друга, смущая исследователя, который верил тому, что видел в текстовом представлении. Именно это и происходит в загрузчике, который подвернулся автору, и автор вернул загрузчику простой и ясный вид.
Большая часть философии - упражнение лингвистическое, а не логическое, попытка выжать смысл из слов. Вот и тут, результат, к которому хотят прийти, уже известен: "трансцедентное существует", после чего начинаются песни.
Извините
Навеяло
Был неправ, зря быканул.
Пример у вас с подвохом. Из него можно подумать, что строки сравниваются по числам слева направо. Хотя на самом деле оно сортируется по сумме элементов.
При всём моём уважении к APL, эта статья - жуткое LLM-дерьмо с мерзким форматированием и тупейшим повторением "математическая абстракция". Если автор человек, то пусть объяснит, что такое "сортировка матрицы", существование которой он приписывает APL и K.
Потому что ему LLM-ка статью сгенерировала, включая код. Этот код не скомпилируется без дженериков.