Можно ли программировать в двоичном коде?
название действительно говорит все это. Мой друг сказал мне, что знает кого-то, кто может программировать в двоичном коде. Я никогда не слышал о ком-то программировании в двоичном формате, и несколько быстрых поисков Google не вернули ничего полезного. Поэтому я решил обратиться к сообществу SO. У кого-нибудь есть информация о программировании в двоичном формате и, если возможно, быстрый пример Hello World. Спасибо заранее.
6 ответов
конечно. Его чаще называют код. Это в основном язык ассемблера без мнемонических устройств. Кто-то, кто очень хорошо знает сборку, может запрограммировать машинный код с дополнительными усилиями, ссылаясь на списки кодов операций (например,x86) по мере необходимости.
сделал бы я это? Нет. Даже сборка полезна только в редких случаях, и нет причин (помимо демонстрации ваших навыков) отклонять сборщик'ы помочь.
Так как вы спросили о hello world, вы должны проверить в этой статье. Он показывает, как он написал, а затем оптимизировал программу x86 ELF для ее вывода. Первоначально он был написан в в NASM изменить в hex редакторе.
это очень можно запомнить код эквивалентно инструкция по сборке. На самом деле, при написании кода на языке ассемблера, часто случается видеть шестнадцатеричный код через монитор машинного кодаs,дизассемблерs,списки сборки, etc. В результате, со временем некоторые инструкции можно запомнить в их шестнадцатеричной форме без каких-либо дополнительных усилие.
- на рисунке виден монитор 6502 ROM, где шестнадцатеричный код и мнемоника сборки показаны бок о бок.
второй навык, который вам понадобится, - это перевести шестнадцатеричный код в двоичный из ума, что очень легко с трюком, который я объясню немного. Но очень легко запомнить двоичный эквивалент всех шестнадцатеричных цифр, из которых есть 16 из них, в конце концов (не так много, не так ли это?).
предположим, что это 1988 год, и мы потратили почти десятилетие на портирование 8-битных видеоигр на разные платформы для жизни, и, следовательно, запомнили следующее 6502 код - инструкции это соответствует инструкциям по сборке:
OPCODE HEX
LDA # 0xA9 0x44
STA 0x85 0x44
STA (),Y 0x91 0x44
LDY # 0xA0 0x44
(или в другой жизни, представьте, что это 1974, нас зовут Пол Аллен, мы на самолете в Бостон, и мы должны написать загрузчик для Altair 8800 с ручкой и бумага!--11-->)
с вышеуказанными кодами операций запомнил только, мы можем написать следующее код используя только ручку и бумагу:
0xA9 0x00 0x85 0x01 0xA9 0x02 0x85 0x02 0xA0 0x00 0xA9 0x01 0x91 0x01
на самом деле выше, является следующее ассемблерный код в мнемонической форме:
LDA #00
STA
LDA #02
STA
LDY #00
LDA #01
STA (), Y
- приведенный выше код помещает белый пиксель в левом верхнем углу экрана в 6502asm.com ассемблер / эмулятор, продолжайте и попробуйте!
если вы запомнили каждая шестнадцатеричная цифра в двоичном виде, вы могли бы написать весь код в двоичном формате.
но если вы их не запомнили или не знаете, что такое двоичная форма, их легко преобразовать со следующим трюком:
1 1 1 1
| | | |
v v v v
8 + 4 + 2 + 1
| | | +---> 2^0 * 1 Ex: 13 is 8 + 4 + 0 + 1
| | +-------> 2^1 * 1 1 1 0 1 -> 1101 (0xD)
| +-----------> 2^2 * 1 Ex: 7 is 0 + 4 + 2 + 1
+---------------> 2^3 * 1 0 1 1 1 -> 0111 (0x7)
который помогает писать код в двоичном формате на лету:
LDA #00 -> 0xA9 0x00 -> 10101001 00000000
STA -> 0x85 0x01 -> 10000101 00000001
LDA #02 -> 0xA9 0x02 -> 10101001 00000010
STA -> 0x85 0x02 -> 10000101 00000010
LDY #00 -> 0xA0 0x00 -> 10100000 00000000
LDA #01 -> 0xA9 0x01 -> 10101001 00000001
STA (),Y -> 0x91 0x01 -> 10010001 00000001
С некоторым ретро-вычислительным духом и мотивацией веселиться, мы могли бы на самом деле написать весь код в двоичном формате без записи промежуточного лестница.
ну, конечно, вы можете написать двоичный файл для машинного кода, а затем ввести машинный код через шестнадцатеричную клавиатуру в компьютер. Я собрал компьютер на основе TMS1100.
простая программа для отображения 5 на шестнадцатеричном светодиоде будет 0001000 0000101 0000001, написанная в двоичном формате, преобразованном в машинный код, который будет 8 5 1 . Затем эта программа запустится и отобразит 5 на светодиоде.
вы можете следовать этой процедуре для гораздо более сложных программ, используя TMS1100 и я думаю, программирование в двоичном формате.
на самом деле, я думаю, что это очень сытно и полезно если вы заинтересованы в математике и программировании.
для храбрых сердца: вы можете попробовать получить изображение mikeos floppy и запустить монитор.программа бин. Он позволяет вводить шестнадцатеричные опкоды вручную и выполнять их. Например (как указано в документах), введите следующие инструкции:
BE0790 E8FD6F C3 4D00$
произведет одиночный M
на экране.
для этого больше нет необходимости, но это было сделано. Было время,когда код можно было ввести в систему в двоичном формате с передней консоли. Он был подвержен ошибкам.
У меня была очень короткая программа uudecoe, закодированная в ASCII, которая могла быть префиксом файла UUEncoded. Полученный файл будет самораспаковывающимся и может быть отправлен по электронной почте. Я ожидал, что машинный код был сделан вручную. Я не могу найти его, и он мне не нужен, даже если я мог.
есть некоторые эзотерические языки программирования. Они используются в качестве экспериментов и довольно непрактичны, но один, называемый BrainF**k (да, это действительно реальная вещь), использует восемь разных символов для изменения значений байтов. Эти языки настолько близки, насколько это возможно.