Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Assembler] Битовая операция, вырезание каждого 7 бита 
:(
    Опции темы
Shichik
Дата 2.12.2006, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 6.10.2006

Репутация: нет
Всего: нет



есть задание по Ассемблеру: В битовой строке вырезать каждый 7ой бит.

как я понимаю если я введу '00', то это 30h30h, что в свою очередь 0011 0000 0011 0000
результат получится 0011 0000 0110 00? 
собственно нужна помощь в реализации этого алгоритма
PM MAIL   Вверх
anwe
Дата 2.12.2006, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



Не понятно твое
Цитата
если я введу '00', то это 30h30h

И почему, если ты пишешь 
Цитата
каждый 7ой бит
то в своем примере удаляешь не понятно что?
По алгоритму: используй команду shrd.
PM MAIL   Вверх
Shichik
Дата 8.12.2006, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 6.10.2006

Репутация: нет
Всего: нет



Народ, помогите с конкретным кодом по заданию, а то горю

Это сообщение отредактировал(а) Shichik - 8.12.2006, 14:28
PM MAIL   Вверх
MAKCim
Дата 8.12.2006, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 6
Всего: 207



Shichik,
если хочешь, чтобы помогли, сформулируй нормально вопрос


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Shichik
Дата 8.12.2006, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 6.10.2006

Репутация: нет
Всего: нет



Оригинальное задание: " в битовой строке вырезать каждый седьмой бит"
как я понял мне нужно вводимую строку символов преобразовать  в 2ый код, а потом уже вырезать 7ой ьит, только я не знаю как 
PM MAIL   Вверх
anwe
Дата 8.12.2006, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



Затерай каждый седьмой бит.
PM MAIL   Вверх
Shichik
Дата 8.12.2006, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 6.10.2006

Репутация: нет
Всего: нет



 я понимаю как все это сделать в теории, но вот как реализовать это на практике,я ума не иприложу, plz помогите
PM MAIL   Вверх
anwe
Дата 9.12.2006, 02:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



За не имением времени напишу лишь теоретически.
Берешь свободный 32-разрядный и байтовый регистры. В байтовый заносишь младший байт из строки. Из него вталкиваешь 6 бит в 32-разрядный. Потом один бит выталкиваешь "в воздух" (смешаешь на один). Далее оставшийся 1 бит вталкиваешь в 32-разрядный.
Так делаешь 4 раза в цикле. Получится, что в 32-разрядном будут 4 незаполненных младших разряда. Выходишь из цикла, берешь очередной байт из строки, втолкнул 4 штуки. Полученные биты из 32-разрядного сбрасываешь в память (он теперь полный), сам регистр очищаешь. Доталкиваешь в него 2 бита из оставшихся 4-х в байтовом, затем 1 выталкиваешь из байтового, последний вталкиваешь в 32-разрядный. Далее опять сначала.
Таким образом после второго прохода цикла 32-разрядный будет иметь незаполенный 1 младший бит. И поехал опять вталкивать. Для проверки конца строки, наверное, надо вводить счетчик. Организовать цикл в цикле не получится, так как каждый раз недозаполненых бит в 32-разрядном разное количество.
И последнее, возможно, что в последний раз надо будет дотолкнуть 32-разрядный, чтобы его младший из втолкнутых был действительно младшим.

Да! Только дошло. Я все описал для удаления 7- бита из 8. В принципе, если надо 7-й абсолютный, то есть последний, то немножечко проще (на одну команду/на один байт строки). А алгоритм такой же.
PM MAIL   Вверх
anwe
Дата 16.12.2006, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



Код

    .model tiny
    .code
    .386
    org 100h
start: 
    movzx    ecx,len
    mov    eax,ecx
    shr    eax,2
    xor    edx,edx
    mov    ebp,1
    mov    ebx,7
    div    ebx
    mov    esi,eax
    lea    ebx,m
    lea    edi,mn
    xor    eax,eax
l1:
    movzx    edx,byte ptr [ebx]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l11
    mov    dword ptr [edi],eax
    jmp    v
l11:
    movzx    edx,byte ptr [ebx+1]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l12
    mov    dword ptr [edi],eax
    jmp    v
l12:
    movzx    edx,byte ptr [ebx+2]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l13
    mov    dword ptr [edi],eax
    jmp    v
l13:
    movzx    edx,byte ptr [ebx+3]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l21
    mov    dword ptr [edi],eax
    jmp    v
l21:
    movzx    edx,byte ptr [ebx+4]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,3
    mov    dword ptr [edi],eax
    xor    eax,eax
    inc    edi
    inc    ebp
    shld    eax,edx,3
    dec    ecx
    jnz    l22
    mov    dword ptr [edi],eax
    jmp    v
l22:
    movzx    edx,byte ptr [ebx+5]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l23
    mov    dword ptr [edi],eax
    jmp    v
l23:
    movzx    edx,byte ptr [ebx+6]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l24
    mov    dword ptr [edi],eax
    jmp    v
l24:
    movzx    edx,byte ptr [ebx+7]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l25
    mov    dword ptr [edi],eax
    jmp    v
l25:
    movzx    edx,byte ptr [ebx+8]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l31
    mov    dword ptr [edi],eax
    jmp    v
l31:
    movzx    edx,byte ptr [ebx+9]
    shl    edx,24
    shld    eax,edx,1
    mov    dword ptr [edi],eax
    inc    edi
    inc    ebp
    xor    eax,eax
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l32
    mov    dword ptr [edi],eax
    jmp    v
l32:
    movzx    edx,byte ptr [ebx+10]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l33
    mov    dword ptr [edi],eax
    jmp    v
l33:
    movzx    edx,byte ptr [ebx+11]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l34
    mov    dword ptr [edi],eax
    jmp    v
l34:
    movzx    edx,byte ptr [ebx+12]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l41
    mov    dword ptr [edi],eax
    jmp    v
l41:
    movzx    edx,byte ptr [ebx+13]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,4
    mov    dword ptr [edi],eax
    inc    edi
    inc    ebp
    xor    eax,eax
    shld    eax,edx,2
    dec    ecx
    jnz    l42
    mov    dword ptr [edi],eax
    jmp    v
l42:
    movzx    edx,byte ptr [ebx+14]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l43
    mov    dword ptr [edi],eax
    jmp    v
l43:
    movzx    edx,byte ptr [ebx+15]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l44
    mov    dword ptr [edi],eax
    jmp    v
l44:
    movzx    edx,byte ptr [ebx+16]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l45
    mov    dword ptr [edi],eax
    jmp    v
l45:
    movzx    edx,byte ptr [ebx+17]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l51
    mov    dword ptr [edi],eax
    jmp    v
l51:
    movzx    edx,byte ptr [ebx+18]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,1
    mov    dword ptr [edi],eax
    inc    edi
    inc    ebp
    xor    eax,eax
    shld    eax,edx,5
    dec    ecx
    jnz    l52
    mov    dword ptr [edi],eax
    jmp    v
l52:
    movzx    edx,byte ptr [ebx+19]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l53
    mov    dword ptr [edi],eax
    jmp    v
l53:
    movzx    edx,byte ptr [ebx+20]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l54
    mov    dword ptr [edi],eax
    jmp    v
l54:
    movzx    edx,byte ptr [ebx+21]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l61
    mov    dword ptr [edi],eax
    jmp    v
l61:
    movzx    edx,byte ptr [ebx+22]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,5
    mov    dword ptr [edi],eax
    inc    edi
    inc    ebp
    xor    eax,eax
    shld    eax,edx,1
    dec    ecx
    jnz    l62
    mov    dword ptr [edi],eax
    jmp    v
l62:
    movzx    edx,byte ptr [ebx+23]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l63
    mov    dword ptr [edi],eax
    jmp    v
l63:
    movzx    edx,byte ptr [ebx+24]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l64
    mov    dword ptr [edi],eax
    jmp    v
l64:
    movzx    edx,byte ptr [ebx+25]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l65
    mov    dword ptr [edi],eax
    jmp    v
l65:
    movzx    edx,byte ptr [ebx+26]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l71
    mov    dword ptr [edi],eax
    jmp    v
l71:
    movzx    edx,byte ptr [ebx+27]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,2
    mov    dword ptr [edi],eax
    inc    edi
    inc    ebp
    xor    eax,eax
    shld    eax,edx,4
    dec    ecx
    jnz    l72
    mov    dword ptr [edi],eax
    jmp    v
l72:
    movzx    edx,byte ptr [ebx+28]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l73
    mov    dword ptr [edi],eax
    jmp    v
l73:
    movzx    edx,byte ptr [ebx+29]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l74
    mov    dword ptr [edi],eax
    jmp    v
l74:
    movzx    edx,byte ptr [ebx+30]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    dec    ecx
    jnz    l75
    mov    dword ptr [edi],eax
    jmp    v
l75:
    movzx    edx,byte ptr [ebx+31]
    shl    edx,24
    shld    eax,edx,1
    shl    edx,2
    shld    eax,edx,6
    mov    dword ptr [edi],eax
    dec    ecx
    jnz    l76
    jmp    v
l76:
    inc    edi
    add    ebx,32
    xor    ebp,ebp
    dec    esi
    jns    l1
v:
    lea    ebx,mn
    mov    ecx,ebp
lv:
    mov    eax,[ebx]
    push    eax
    shr    eax,16
    push    ax
    xchg    ah,al
    call    print_all
    pop    ax
    call    print_all
    pop    eax
    push    ax
    xchg    ah,al
    call    print_all
    pop    ax
    call    print_all
    add    ebx,4
    loop    lv
    ret
print_all:
    mov    dh,al
    and    dh,0Fh
    shr    al,4
    call    print_n
    mov    al,dh
print_n:
    cmp    al,10
    sbb    al,69h
    das
    mov    dl,al
    mov    ah,2
    int    21h
    ret

m    db    1,5,15,120
len    db    $-m
x    dd    31
mn:
end    start

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1024 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.