Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Центр помощи > [Assembler] Битовая операция |
Автор: Shichik 2.12.2006, 22:11 |
есть задание по Ассемблеру: В битовой строке вырезать каждый 7ой бит. как я понимаю если я введу '00', то это 30h30h, что в свою очередь 0011 0000 0011 0000 результат получится 0011 0000 0110 00? собственно нужна помощь в реализации этого алгоритма |
Автор: anwe 2.12.2006, 23:43 | ||||
Не понятно твое
И почему, если ты пишешь
По алгоритму: используй команду shrd. |
Автор: Shichik 8.12.2006, 14:25 |
Народ, помогите с конкретным кодом по заданию, а то горю |
Автор: MAKCim 8.12.2006, 14:54 |
Shichik, если хочешь, чтобы помогли, сформулируй нормально вопрос |
Автор: Shichik 8.12.2006, 22:48 |
Оригинальное задание: " в битовой строке вырезать каждый седьмой бит" как я понял мне нужно вводимую строку символов преобразовать в 2ый код, а потом уже вырезать 7ой ьит, только я не знаю как |
Автор: anwe 8.12.2006, 23:14 |
Затерай каждый седьмой бит. |
Автор: Shichik 8.12.2006, 23:17 |
я понимаю как все это сделать в теории, но вот как реализовать это на практике,я ума не иприложу, plz помогите |
Автор: anwe 9.12.2006, 02:50 |
За не имением времени напишу лишь теоретически. Берешь свободный 32-разрядный и байтовый регистры. В байтовый заносишь младший байт из строки. Из него вталкиваешь 6 бит в 32-разрядный. Потом один бит выталкиваешь "в воздух" (смешаешь на один). Далее оставшийся 1 бит вталкиваешь в 32-разрядный. Так делаешь 4 раза в цикле. Получится, что в 32-разрядном будут 4 незаполненных младших разряда. Выходишь из цикла, берешь очередной байт из строки, втолкнул 4 штуки. Полученные биты из 32-разрядного сбрасываешь в память (он теперь полный), сам регистр очищаешь. Доталкиваешь в него 2 бита из оставшихся 4-х в байтовом, затем 1 выталкиваешь из байтового, последний вталкиваешь в 32-разрядный. Далее опять сначала. Таким образом после второго прохода цикла 32-разрядный будет иметь незаполенный 1 младший бит. И поехал опять вталкивать. Для проверки конца строки, наверное, надо вводить счетчик. Организовать цикл в цикле не получится, так как каждый раз недозаполненых бит в 32-разрядном разное количество. И последнее, возможно, что в последний раз надо будет дотолкнуть 32-разрядный, чтобы его младший из втолкнутых был действительно младшим. Да! Только дошло. Я все описал для удаления 7- бита из 8. В принципе, если надо 7-й абсолютный, то есть последний, то немножечко проще (на одну команду/на один байт строки). А алгоритм такой же. |
Автор: anwe 16.12.2006, 01:24 | ||
|