Помогите пожалуйсто кто может. задача такова: есть таблица 4*4 в ней стоят 2 точки, допустим так: 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 (1-точка) 1-ая строка старшие биты в ах ; 2-ая - 9-12 биты и т. д. нужно повернуть эту таблицу на 90 градусов 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 так чтобы 1-ая строка старшие биты в ах ; 2-ая - 9-12 биты и т. д.
Ну вариантов тут может быть несколько: Вариант 1. Ролим биты исходной таблицы по столбцам и заталкиваем последовательно в новую таблицу: Код (Text): ;исходная таблица в ax xor dx,dx mov ecx,16 .loop: rol ax,4 ;берем биты столбца ххх1 ххх2 ххх3 ххх4 rcl dx,1 ;заталкиваем в строку х1234 <- dec ecx jz .end test ecx,3 ;крутим 4 раза, затем переходим к след.столбцу jnz .loop shr ax,1 ;переход к др.столбцу хх1x хх2x хх3x хх4x -> ххх1 ххх2 ххх3 ххх4 jmp .loop .end mov ax,dx Вариант 2. Если единичек в таблице мало, то можно искать единички и менять их индекс с учетом разворота на 90: Код (Text): ;исходная таблица в eax xor edx,edx .loop: bsf ecx,eax ;находим единицу, в ecx - номер бита 0..15 mov ebx,1 jz .end ;больше нет единиц shl ebx,ecx xor eax,ebx ;зануляем единицу в исходной таблице mov ebx,ecx ;индекс = yyxx, хх - позиция в строке справа налево, yy - номер строки снизу вверх or ecx,3 ;yy11 xor ecx,ebx ;00zz, где zz - инверсия позиции xx 0..3 -> 3..0 shr ebx,2 ;00yy lea ebx,[ebx+ecx*4] ;zzyy - сделали разворот на 90 bts edx,ebx ;пишем "точку" в новую таблицу jmp .loop .end: mov eax,edx Вариант 3. Можно использовать метод перестановки бит (группировки\раздвижки, инверсии) при умножении на специально выбранные магик-намберы. Но в данном сл. это скорее экзотика (лень возиться