68k как сложить / вычесть отдельные байты?

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

например:

        ORG $1000
START:             
        MOVE.B  str,D0
        ADD.B   #$20,D0
        MOVE.B  D0,str

str     DC.B   'ASDF'
        END    START     

Я пытаюсь превратить "ASDF" в "asdf", но мой текущий код позволяет мне указывать только первый байт "ASDF", который равен "A", поэтому моя результирующая строка теперь "aDSF", как мне сделать это так, что байты движутся на D,S и F? есть ли конкретная команда для этого?

заранее спасибо

1 ответ

Решение

Немного можно только 0 или же 1, 0 и 1 - единственные цифры в числах base2.

xor - это добавление без переноса из младших бит в старшие биты. Это помогает? Тем не менее, тело вопроса не соответствует названию.


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

  • "Цифра" обычно означает десятичную или шестнадцатеричную цифру: 0-9 или 0x0-0xF

  • "Бит" всегда означает одно значение 0 или 1. Название этого вопроса не соответствует тому, что вы, похоже, задаете в теле.

  • "Строка" обычно означает последовательность байтов ASCII (или UTF8, или UTF16), которая кодирует печатаемую строку. например char *str="Hello World!"; (т.е. не произвольный двоичный файл.) Вы можете сказать "строку байтов", что, по-видимому, является тем, о чем вы говорите.

  • "Массив" - это последовательность элементов, например uint8_t arr={0xA2, 0x02, 0x15, 0xFF}; Похоже, это то, о чем вы говорите: массив байтов.

Пожалуйста, измените ваш вопрос, чтобы повторить его, если вы не намеревались спрашивать об отдельных битах.


Похоже, у вас есть последовательность байтов, и вы хотите добавить одно и то же значение к каждому байту. Для этого вам понадобится цикл, так как для m68k не установлена ​​инструкция SIMD , согласно Google. Команда SIMD может выполнять несколько однобайтовых операций добавления параллельно на каждый байт векторного регистра. (как х86 PADDB векторная инструкция, которую можно использовать после трансляции 0x20 на все 16 элементов векторного регистра.)

Добавление SIMD - это добавление с разрывами при переходе от младших бит к старшим битам на границах элементов.

Другие вопросы по тегам