Как кодировать текст ASCII в инструкциях двоичного кода операции?

Мне ничего не нужно освежать. Обычно я спрашиваю, как можно закодировать строку данных в сегменте данных двоичного файла для выполнения на голом железе< /а>.

Цель? Скажем, я пишу загрузчик, и мне нужно определить статические данные, используемые в файле, чтобы представить строку для перемещения по адресу памяти, например, с Проблема Genesis TMSS.

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

Проблема в том, как мне кодировать строки/символы/глифы в двоичном коде для кодирования в коде операции M68000k? Я прочитал руководство, ссылки и т. д., и ни один из них не коснулся этого (из того, что я прочитал).

Скажем, я хочу закодировать move.l #'SEGA', $A14000. Я бы получил этот результирующий код операции (не учитывая, как кодировать символы ASCII):

0010 1101 0100 0010 1000 0000 0000 0000

Полубайт 1 = ДЛИТЕЛЬНОЕ ПЕРЕМЕЩЕНИЕ, Полубайт 2 = РЕЖИМ АДРЕСАЦИИ ПАМЯТИ, Следующие три байта равны адресу.

Мой вопрос в том, могу ли я кодировать каждую строку в буквальном ASCII для каждого символа как часть предыдущего фрагмента инструкции MAM?

В этот момент я запутался и надеялся, что кто-нибудь может знать, как кодировать текст данных в инструкции.


person Baby Wonder    schedule 02.01.2014    source источник
comment
Вы пишете свой собственный ассемблер? Если это так, вы, вероятно, можете посмотреть кодировку целочисленных констант в руководстве программиста M68000 (например, #'SEGA' должно совпадать с #0x53454741). Если вы просто пишете ассемблерный код, который компилируется с помощью существующего ассемблера, то почему бы просто не позволить этому ассемблеру разобраться с кодированием инструкций?   -  person Michael    schedule 03.01.2014
comment
Какой? Нет. Я стремлюсь писать код на самом низком уровне, возможном для архитектуры (т.е. машинного кода). Я не использую ассемблер, и все дело в кодировании символов. Я пишу коды операций в двоичном формате с нуля; ни сборки, ни написания ассемблера; просто кодирование в двоичном коде M68000.   -  person Baby Wonder    schedule 04.01.2014
comment
Что ж, просмотр дизассемблированного кода и чтение справочного руководства программиста M68000, возможно, помогут вам разобраться в этих вещах. Но на самом деле нет никакого преимущества в написании машинного кода вручную по сравнению с написанием кода на ассемблере. Это не позволит вам делать что-либо на более низком уровне; просто написание точно такого же кода займет намного больше времени.   -  person Michael    schedule 04.01.2014
comment
@Michael Я понимаю, но выполнение в двоичном формате дает лучшее представление о том, как будет работать микросеквенсор и как устроена вся сущность чипа (например, да или нет, 1 или 0, триггеры, транзисторы и т. д.) . Спасибо.   -  person Baby Wonder    schedule 07.01.2014


Ответы (1)


Что ж, у меня был опыт программирования на 4 разных языках ассемблера, и Motorola M68HC11 — один из них. По моему опыту, ASCII используется только для целей отображения. ЦП на низком уровне обрабатывает все как двоичные значения, он не может отличить символы ASCII от других символов. Хотя более высокие языки ассемблера, такие как x86, поддерживают такие инструкции, как AAA (ASCII настраивается для добавления), что гарантирует, что после добавления двух чисел ASCII результат все еще является допустимым номером ASCII. Так что в основном это зависит от ассемблера, если ассемблер поддерживает инструкцию move.l #'SEGA', $A14000, это может сработать, но поскольку вы не используете ассемблер и напрямую пишете коды операций, вам нужно кодировать ascii в двоичный код, Например, число ascii '1' (0x31) будет закодировано как 0000 0000 0011 0001 в 16-битном представлении. Также по моему опыту нет машинного кода, который мог бы перемещать всю строку. SO в микрокоде извлекается первый символ, затем копируется в адрес назначения, затем извлекается второй символ и копируется во второе место и т. д. Предполагая, что размер инструкции составляет 32 бита и поддерживается режим непосредственной адресации, первые два полубайта будут предложите инструкцию перемещения и тип немедленной адресации, следующие два полубайта будут символом в двоичной кодировке, а оставшиеся будут адресом, на который вы хотите его скопировать. Надеюсь это поможет

person user3164563    schedule 06.01.2014
comment
Таким образом, вы в основном говорите, что я просто кодирую каждый символ, используя эквивалент ASCII как часть инструкции? Это то, что я ДУМАЛ, но я не был уверен, как к этому относились во всех отношениях. Я знаю, что нет различия между ASCII и двоичным кодом, но я не уверен, что просто расшифрую каждый символ в его эквиваленте ASCII (например, что, если я перемещаю что-то намного более длинное, что занимает 16 символов?). Другая проблема, с которой я столкнулся, заключается в том, что я не знаю, ГДЕ именно кодировать строковые данные/символы в двоичной инструкции кода операции (т.е. после режима адресации, перед назначением и т. д.). - person Baby Wonder; 07.01.2014
comment
Насколько я читал, руководство Motorola 68000 не объясняет, как и где кодировать представления символов ASCII в инструкции (по крайней мере, я не понял). - person Baby Wonder; 07.01.2014