Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обработка битовых строк на Ассемблере

21K
15 ноября 2006 года
Enough
7 / / 14.11.2006
Помогите, пожалуйста, если не с реализацией, то хотя бы с алгоритмом.
Задача следующая: С клавиатуры вводится строка символов. Требуется в битовой строке, содержащей ASCII-коды введенных символов, вырезать все последовательности '0000'.
Заранее спасибо!
242
16 ноября 2006 года
Оlga
2.2K / / 04.02.2006
приведи конкретный пример того что тебе надо сделать, например ввели строку 5 байт 'ABCDE', '$' <- конец строки доллар, какой результат ты хочешь увидеть? вырезать значит если в последователности 5 байт и мы вырезали - 5 байт превращается в .. ?
21K
16 ноября 2006 года
Enough
7 / / 14.11.2006
На самом деле не суть важно, что мы будем выводить в конце. Есть 2 варианта: допустим, что после обрабоки мы вырезали 12 бит, осталось 5*8-12=28 бит, которые влезают в 4 байта. Тогда 1 вариант - 4 бита последнего байта забить нулями и вывести закодированные 4 символа, или 2 вариант - вывесли 3 символа, а последний байт оставить в покое.
261
17 ноября 2006 года
ahilles
1.5K / / 03.11.2005
в чём именно проблема
21K
17 ноября 2006 года
Enough
7 / / 14.11.2006
[QUOTE=ahilles]в чём именно проблема[/QUOTE]
Как искать 0000 вроде догнал, а вот как вырезать - ...
261
18 ноября 2006 года
ahilles
1.5K / / 03.11.2005
а 0000 в двоичной системе или в шестнадцатеричной
0000b или 0000h
21K
18 ноября 2006 года
Enough
7 / / 14.11.2006
В двоичной, т.е. вырезать по 4 бита
261
19 ноября 2006 года
ahilles
1.5K / / 03.11.2005
если не суть важно что мы будем выводить в конце делай циклические сдвиги
допустим было так
10000111b после циклического сдвига будет так
mov al,10000111b
rol al, 5h
после чего в al 11110000b что и требовалось
как перенести биты из других байтов я надеюсь что ты додумаешься сам, если что обращайся
21K
19 ноября 2006 года
Enough
7 / / 14.11.2006
Ну то, что без циклических сдвигов не обойтись, это понятно. На самом деле вся моя проблема состоит именно в том, чтобы переносить биты из следующих байтов, т.е., другими словами, вырезать по 4 нуля. И пример 10000111b не очень удачный, возьмем другой 10100001, после 7 циклич сдвигов получим 11010000, если теперь каким-то образом вместо 4 нулей вдвинуть 4 бита из следующего байта, то будет неправильно, потому что должно быть не 1101, а 1011. Ведь мы должны провернуть 8 раз, чтобы порядок не нарушить...
7
21 ноября 2006 года
@pixo $oft
3.4K / / 20.09.2006
Не надо циклических сдвигов.Для этого есть 2 хорошие команды:
-ShLD <Op1>,<Op2>,<Shifts>-сдвигает Shifts битов из Op2 в Op1 влево(биты Op1 двигаются влево,биты Op2 не меняются)
-ShRD <Op1>,<Op2>,<Shifts>-сдвигает Shifts битов из Op2 в Op1 вправо(биты Op1 двигаются вправо,биты Op2 не меняются)

Также есть операции копирования/установки/получения битов(я их щас не помню,если хочешь,выложу для тебя,или сам у к.-л. спроси)
21K
25 ноября 2006 года
Enough
7 / / 14.11.2006
А как быть на границе байтов, если один кончается на 00, а другой начинается на 00?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог