Page 228 - 4503
P. 228

h’31’  ,  вміст  якого  00011010.  Значення  ознаки  С  до  операції
           зсування дорівнює 1.
                У  результаті  виконання  команди  rrf  h’31’  вміст
           регістру  став  іншим  —  b’10001101’,  а  ознака  С  набула
           значення 0.
                Знаючи такі особливості операцій циклічного зсування,
           ми  можемо  перед  їх  викликом  онулити  значення  С,  а  потім
           здійснити  відповідну команду:

                bcf         STATUS,  C  ;            погашення  біту
           ;перенесення
                rrf h’31’, f   ; зсування вправо

                Внаслідок застосування цього фрагменту у регістрі h’31’
           опиниться число b’00001101’, а ознака С матиме значення 0.
                Якщо  є  потреба  в  онуленні  кількох  старших  бітів
           регістра,  то  його  можна  здійснити  шляхом  кількаразового
           виконання щойно наведеного програмного фрагменту.  Вміст
           регістра  h’31’  буде поступового очищатися: зліва у нього за
           кожний  виклик  представленого  фрагменту  буде  заходити  0:
           00001101 →00000110→00000011→00000001→00000000.
                Звісно  це  можна  робити  циклом,    вказавши  відповідну
           кількість  проходів  по  ньому,  тобто  кількість  викликів
           вказаного програмного фрагменту.
                Значно  більшу  цікавість  може  викликати  задача
           перевірки кількості 1 (або 0) в певному регістрі.
                Задача  7.2    У  регістрі  h’21’  зберігається  певне
           поточне  значення  стану  групи  перемикачів.  Ввімкнутим
           перемикачам    відповідає  значення  1,  розімкнутим  0.  Слід
           знайти  кількість  ввімкнутих перемикачів.





                                         228
   223   224   225   226   227   228   229   230   231   232   233