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

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

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

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

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

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

Здравствуйте всем.
Задача тfкая: В заданой 16-битной
двоичной последовательности выделены 4 группы бит - 3 группы по 5 бит
и одна из 1-го бита. Надо переставить 1 и 3 группу местами. 3 поставить на место первой, первую на место третьей.

1 01010 11111 00000 число

4 1 2 3 группы

Код:
.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     cycl
       popa
       ret
BitCh  Endp
Write   proc   near
        pusha
        lea       dx,str01   
        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       
mov      dx,ax
and       ax,1Fh     
mov      cl,10
shl       ax,cl         
shr       dx,cl         
and       ax,1Fh     
or        ax,dx         
and    x,0FC00h   
or        x,ax     
call      BitCh
call      Write
ret
Bit16_z endp
Code    ends
end     Bit16_z
Ставит 1 группу на место третьей, как поставить 3 на место первой

Последний раз редактировалось Stilet; 15.01.2011 в 18:58.
Leshiy1 вне форума Ответить с цитированием
Старый 15.01.2011, 18:58   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Оффтоп: Что означает эта _Т в названии?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.01.2011, 19:07   #3
Leshiy1
Форумчанин
 
Аватар для Leshiy1
 
Регистрация: 24.09.2009
Сообщений: 104
По умолчанию

Эта Т в названии .........
Leshiy1 вне форума Ответить с цитированием
Старый 16.01.2011, 19:02   #4
Ant1971on
Пользователь
 
Регистрация: 20.07.2010
Сообщений: 52
По умолчанию

Так пойдет ?
Код:
 	...

	MOV AX,X		;исходное число
	MOV BX,AX		;сделаем в BX его копию
	MOV CL,10		;для сдвигов
	SHR BX,CL               ;первую группу -> на место третьей
	AND BX,0000000000011111b;обнулим остальные биты
	MOV DX,BX		;сохраним в DX
	
	MOV BX,AX		;восстановим исходное число
	SHL BX,CL		;третью группу -> на место первой
	AND BX,0111110000000000b;обнулим остальные биты
	
	OR DX,BX                ;объединим

	AND AX,1000001111100000b;в AX обнулим перемещаемые биты	
	OR AX,DX	        ;результат в AX
	
	...
Ant1971on вне форума Ответить с цитированием
Ответ


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