, ror и rol во флаг переноса тоже засовывают. А иначе мой вариант бы не заработал
#define iB(by) (\
((by&0x01)<<7) |\
((by&0x02)<<5) |\
((by&0x04)<<3) |\
((by&0x08)<<1) |\
((by&0x10)>>1) |\
((by&0x20)>>3) |\
((by&0x40)>>5) |\
((by&0x80)>>7))
#define invert_size 256
static BYTE invert[invert_size]=
{
iB(0 ),iB(1 ),iB(2 ),iB(3 ),iB(4 ),iB(5 ),iB(6 ),iB(7 ),
iB(8 ),iB(9 ),iB(10 ),iB(11 ),iB(12 ),iB(13 ),iB(14 ),iB(15 ),
iB(16 ),iB(17 ),iB(18 ),iB(19 ),iB(20 ),iB(21 ),iB(22 ),iB(23 ),
iB(24 ),iB(25 ),iB(26 ),iB(27 ),iB(28 ),iB(29 ),iB(30 ),iB(31 ),
iB(32 ),iB(33 ),iB(34 ),iB(35 ),iB(36 ),iB(37 ),iB(38 ),iB(39 ),
iB(40 ),iB(41 ),iB(42 ),iB(43 ),iB(44 ),iB(45 ),iB(46 ),iB(47 ),
iB(48 ),iB(49 ),iB(50 ),iB(51 ),iB(52 ),iB(53 ),iB(54 ),iB(55 ),
iB(56 ),iB(57 ),iB(58 ),iB(59 ),iB(60 ),iB(61 ),iB(62 ),iB(63 ),
iB(64 ),iB(65 ),iB(66 ),iB(67 ),iB(68 ),iB(69 ),iB(70 ),iB(71 ),
iB(72 ),iB(73 ),iB(74 ),iB(75 ),iB(76 ),iB(77 ),iB(78 ),iB(79 ),
iB(80 ),iB(81 ),iB(82 ),iB(83 ),iB(84 ),iB(85 ),iB(86 ),iB(87 ),
iB(88 ),iB(89 ),iB(90 ),iB(91 ),iB(92 ),iB(93 ),iB(94 ),iB(95 ),
iB(96 ),iB(97 ),iB(98 ),iB(99 ),iB(100),iB(101),iB(102),iB(103),
iB(104),iB(105),iB(106),iB(107),iB(108),iB(109),iB(110),iB(111),
iB(112),iB(113),iB(114),iB(115),iB(116),iB(117),iB(118),iB(119),
iB(120),iB(121),iB(122),iB(123),iB(124),iB(125),iB(126),iB(127),
iB(128),iB(129),iB(130),iB(131),iB(132),iB(133),iB(134),iB(135),
iB(136),iB(137),iB(138),iB(139),iB(140),iB(141),iB(142),iB(143),
iB(144),iB(145),iB(146),iB(147),iB(148),iB(149),iB(150),iB(151),
iB(152),iB(153),iB(154),iB(155),iB(156),iB(157),iB(158),iB(159),
iB(160),iB(161),iB(162),iB(163),iB(164),iB(165),iB(166),iB(167),
iB(168),iB(169),iB(170),iB(171),iB(172),iB(173),iB(174),iB(175),
iB(176),iB(177),iB(178),iB(179),iB(180),iB(181),iB(182),iB(183),
iB(184),iB(185),iB(186),iB(187),iB(188),iB(189),iB(190),iB(191),
iB(192),iB(193),iB(194),iB(195),iB(196),iB(197),iB(198),iB(199),
iB(200),iB(201),iB(202),iB(203),iB(204),iB(205),iB(206),iB(207),
iB(208),iB(209),iB(210),iB(211),iB(212),iB(213),iB(214),iB(215),
iB(216),iB(217),iB(218),iB(219),iB(220),iB(221),iB(222),iB(223),
iB(224),iB(225),iB(226),iB(227),iB(228),iB(229),iB(230),iB(231),
iB(232),iB(233),iB(234),iB(235),iB(236),iB(237),iB(238),iB(239),
iB(240),iB(241),iB(242),iB(243),iB(244),iB(245),iB(246),iB(247),
iB(248),iB(249),iB(250),iB(251),iB(252),iB(253),iB(254),iB(255)
};
#define asize 8
static BYTE array_to_invert[asize]={0xff,0,0,0,0xff,0,0,0xf0};
// BYTE* by=array_to_invert;
_asm
{
mov edi, offset invert
mov esi, offset array_to_invert
mov ebx, 0 ;индекс в array_to_invert , идём с начала
mov ecx, asize/2 ;индекс в array_to_invert , идём с конца
mov eax,0
mov edx,0
L0:
mov al, byte ptr [esi+ebx] ;берём очередной байт
mov dl, byte ptr [esi+ecx+asize/2-1] ;
mov al, byte ptr [edi+eax] ;инверсия байта
mov dl, byte ptr [edi+edx] ;
mov byte ptr [esi+ebx], dl ;кладём взад (перекрёстно)
mov byte ptr [esi+ecx+asize/2-1], al ;
inc ebx
loop L0 ;dec ecx
};