Обработка битовых строк на Ассемблере
Задача следующая: С клавиатуры вводится строка символов. Требуется в битовой строке, содержащей ASCII-коды введенных символов, вырезать все последовательности '0000'.
Заранее спасибо!
приведи конкретный пример того что тебе надо сделать, например ввели строку 5 байт 'ABCDE', '$' <- конец строки доллар, какой результат ты хочешь увидеть? вырезать значит если в последователности 5 байт и мы вырезали - 5 байт превращается в .. ?
На самом деле не суть важно, что мы будем выводить в конце. Есть 2 варианта: допустим, что после обрабоки мы вырезали 12 бит, осталось 5*8-12=28 бит, которые влезают в 4 байта. Тогда 1 вариант - 4 бита последнего байта забить нулями и вывести закодированные 4 символа, или 2 вариант - вывесли 3 символа, а последний байт оставить в покое.
в чём именно проблема
Как искать 0000 вроде догнал, а вот как вырезать - ...
0000b или 0000h
В двоичной, т.е. вырезать по 4 бита
допустим было так
10000111b после циклического сдвига будет так
mov al,10000111b
rol al, 5h
после чего в al 11110000b что и требовалось
как перенести биты из других байтов я надеюсь что ты додумаешься сам, если что обращайся
Ну то, что без циклических сдвигов не обойтись, это понятно. На самом деле вся моя проблема состоит именно в том, чтобы переносить биты из следующих байтов, т.е., другими словами, вырезать по 4 нуля. И пример 10000111b не очень удачный, возьмем другой 10100001, после 7 циклич сдвигов получим 11010000, если теперь каким-то образом вместо 4 нулей вдвинуть 4 бита из следующего байта, то будет неправильно, потому что должно быть не 1101, а 1011. Ведь мы должны провернуть 8 раз, чтобы порядок не нарушить...
-ShLD <Op1>,<Op2>,<Shifts>-сдвигает Shifts битов из Op2 в Op1 влево(биты Op1 двигаются влево,биты Op2 не меняются)
-ShRD <Op1>,<Op2>,<Shifts>-сдвигает Shifts битов из Op2 в Op1 вправо(биты Op1 двигаются вправо,биты Op2 не меняются)
Также есть операции копирования/установки/получения битов(я их щас не помню,если хочешь,выложу для тебя,или сам у к.-л. спроси)
А как быть на границе байтов, если один кончается на 00, а другой начинается на 00?