Будет ли когда-нибудь причина писать код в чистом двоичном виде? - PullRequest
13 голосов
/ 20 февраля 2010

Была ли когда-нибудь ситуация, когда ASM просто недостаточно низкоуровневый?В конце концов, ассемблер все еще должен быть собран .Кто-нибудь когда-нибудь писал программу в двоичном формате?Мне просто интересно, есть ли теоретическая причина, почему это может быть практичным, или даже если это возможно на современных компьютерах.

Ответы [ 18 ]

1 голос
/ 20 февраля 2010

У меня не было никакого ассемблера для моего восьмибитного Atari, поэтому я написал машинный код напрямую.Чтобы запустить код из BASIC, вы должны либо написать код в виде десятичных байтов данных, либо в виде строки.(Да, на самом деле вы могли бы написать код в строке, единственный код символа из 256, который вы не могли ввести, был 155 - код для возврата. К счастью, нет 6502 инструкции машинного кода с этим значением, так что это было толькопроблема, когда ветвь оказалась на 101 байт назад (-101 = 155).)

Я до сих пор помню общий фрагмент кода для запуска таймера:

104 (pla)
169, 7 (lda #7)
162, 6 (ldx #6)
160, 10 (ldy #10)
76, 92, 228 (jmp 0xE45C)

В последние годыЯ участвовал в некоторых соревнованиях по оптимизации размеров.Несмотря на то, что большая часть кода является сборкой, вам все равно нужно точно знать, какие инструкции производит ассемблер, чтобы вы знали, сколько их байтов.Кроме того, иногда вы используете приемы, такие как использование некоторых байтов как данных и кода, или использование нескольких байтов в качестве разных инструкций в зависимости от того, введете ли вы первый байт или введете в середине инструкции.Затем вы пишете инструкции в виде байтов данных в середине кода сборки.

1 голос
/ 20 февраля 2010

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

А если серьезно, зачем кому-то делать такую ​​вещь?

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

0 голосов
/ 20 февраля 2010

ритуал дедовщины для нового члена команды.

0 голосов
/ 20 февраля 2010

Если вы создаете переводчика.Возможно, у вас есть завершенный переводчик, но не анализатор.Вы можете проверить интерпретатор, написав программу для интерпретации в чистом двоичном виде.

0 голосов
/ 20 февраля 2010

Что ж, вы могли бы использовать hex для программирования некоторых основных инструкций по загрузке в RAM или ROM вместо использования ассемблера, если вы были разработчиком чипа. Я сделал это для эротики, которую я написал.

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

0 голосов
/ 20 февраля 2010

Действительно классным примером является этот знаменитый полиглот, который, помимо прочего, является действительным DOS-файлом .COM, потому что ASCII в своем исходном коде дублируется как двоичные инструкции x86! http://ideology.com.au/polyglot/polyglot.txt

Более скучные примеры ...

Многие процессоры реализуют инструкции ISA как последовательности более примитивных микрокоманд (в основном наборов управляющих сигналов канала данных), которые "микрокодируются" в ПЗУ микрокода.

Для достаточно простого процессора вы можете написать микрокод непосредственно в двоичном формате, а не собирать его из мнемонического языка. Или, если вы перепроектируете процессор, вы, возможно, не знаете его набор микрокоманд и вам просто нужно угадать формат микрокоманд ... в этом случае вы, вероятно, также работаете в двоичном формате. В любом случае это более низкий уровень, чем на ассемблере.

Иногда код для старых процессоров, таких как 6502, использовал недокументированные инструкции, которые не имели официальной мнемоники, поэтому вам приходилось писать двоичные значения, а не инструкции по сборке.

0 голосов
/ 20 февраля 2010

Для проекта колледжа мне пришлось разработать упрощенный микроконтроллер на VHDL (язык описания аппаратного обеспечения). Чтобы проверить это, я написал чрезвычайно простую программу в двоичном виде, потому что это был наиболее удобный способ ввода программы в симулированный микроконтроллер.

0 голосов
/ 20 февраля 2010

Раньше было не слишком редко переходить из двоичного кода в ассемблер, чтобы понять дамп.

Но не используете ассемблер? Я не могу думать ни о какой причине. Ассемблер уже программирует голый металл. Единственное преимущество состоит в том, чтобы разрешить использование меток, таких как «добавить» для фактической (двоичной) инструкции. и т.д.

...