Ассемблерные головоломки или может ли машина понимать естественный язык


подготовка регистра AH в работе (предварительный вариант)


Опс! Сразу два байта вылетают в штрафбат. Это 00h и F7h. Черт возьми! Как же быть? Надо подумать… А что если вычислить значение не все сразу, а по частям? Короче говоря, нужно разложить F700h на ряд слагаемых, каждое из которых находилось бы в заданном интервале. Точнее даже не интервале, а каждый байт, входящий в слово, удовлетворял бы условию 80h >
x >
1Fh. Чем не головоломка? Любители математики легко найдут строгое решение, а всем остальным придется довольствоваться методом перебора. Вот, например, если от F700h шесть раз отнять по 292Ah, останется всего 4, которые можно накрутить обычным DEC AX (впрочем, в данном случае "крутить" совершенно необязательно, поскольку при AH == 9, значение регистра AL игнорируется). В общем, наш аналог MOV AX, 9 будет выглядеть так:

00000000: 2D 2A 29                     sub       ax,0292A

00000003: 2D 2A 29                     sub       ax,0292A

00000006: 2D 2A 29                     sub       ax,0292A

00000009: 2D 2A 29                     sub       ax,0292A

0000000C: 2D 2A 29                     sub       ax,0292A

0000000F: 2D 2A 29                     sub       ax,0292A

00000012: 48                           dec       ax

00000013: 48                           dec       ax

00000014: 48                           dec       ax

00000015: 48                           dec       ax



Содержание раздела