Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2011, 16:21   #1
Leshiy1
Форумчанин
 
Аватар для Leshiy1
 
Регистрация: 24.09.2009
Сообщений: 104
По умолчанию Биты

Здравствуйте всем.
Задача такая: выделить в 16-битной последовательности четыре группы бит
три группы по 5 бит и одна из 1 бита.
Число у меня такое: 1010101111100000
Надо выделить как: 10101 01111 10000 0

Первая группа 10101
Вторая группа 01111
Третья группа 10000
Четвертая группа: 0
Код:
.286
Data    segment
x             dw      0ABE0h ; исх. число
str01       db      16 dup(?),13,10,'$' ;
maska     dw      ?
Data    ends
Stack_ segment stack
	dw 100 dup(?)
Stack_ ends
Code Segment 
       Assume  cs:Code,ds:Data,ss:Stack_
BitCh  proc   near
       pusha
       lea        si,str01
       mov      ax,x
       mov      maska,8000h
       mov      cx,16
cycl:   test     ax,maska
       jz          is0
       mov     Byte Ptr[si],'1'
       jmp      mm
is0:   mov    Byte Ptr[si],'0'
mm:    inc    si
       shr        maska,1
       loop     cyc
       popa
       ret
BitCh  Endp
Write   proc   near
        pusha
        lea       dx,str01   ; адр. матрицы в si
        mov    ah,9h        ; строки матрицы
        int       21h           ; на экран
        popa
        ret
Write   endp
Bit16_z proc   far    ; головная программа    
push    ds                   ; стандартная 
xor      ax,ax                ; инициализация 
push     ax                   ; ассемблерной
mov      ax,data           ; программы
mov      ds,ax      
call       BitCh
call       Write
mov      ax,x       ; x -> ax,dx
mov      dx,ax
and       ax,1Fh     ; выделили 3 гр. -> ax
mov      cl,5
shl        ax,cl         ; преместили ее на место 2 гр. -> ax
shr       dx,cl         ; преместили 2гр. на место 3 гр. -> dx
and      dx,1Fh     ; выделили 2 гр. -> dx
or        ax,dx         ; объединили 3 гр. и 2 гр. вместе -> ax
and    x,0FC00h   ; выделили 1 гр. вместе с 15р.(4гр.)-> x
or        x,ax     ; объед. 4гр., 1 гр., 3 гр. и 2 гр. вместе -> x
call      BitCh
call      Write
ret
Bit16_z endp
Code    ends
end     Bit16_z    ; Bit16_z - это точка входа в программу
Помогите переделать программный код
Leshiy1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зеркально поменять местами биты. Си. Аnтоn Помощь студентам 0 09.12.2010 16:22
С помощью какой команды можно разделить двоичное число на биты? Корделия Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 17.11.2009 21:56
Байты и биты Karp_13 Общие вопросы Delphi 9 10.11.2009 00:33
Как перевести биты в мегабайты? Юзер7 Свободное общение 7 19.06.2009 17:27
Сбросить 3,5,7 биты veter_s_morya Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 20.05.2008 09:43