Курс лекций по программированию на языке ассемблера. Макурина Т.А. - 8 стр.

UptoLike

Составители: 

8
4. Дополнительный сегмент данных. Неявно алгоритмы выполнения машинных
команд предполагают, что обрабатываемые ими данные расположены в сегменте
данных, адрес которого находятся в сегментном регистре ds. Если программе
недостаточно одного сегмента данных, то она имеет возможность использовать еще
три дополнительных сегмента данных es, gs,fs.
Регистры состояния и управления
В МП включены несколько регистров, которые содержат информацию о состоянии как самого
МП, так и программы, команды которой в данный момент загружены на конвейер.
регистр флагов eflsgs/flags
регистр указателя команды eip/ip
Используя эти регистры, можно получить информацию о результатах выполнения команд
программы и влиять на состояние самого МП.
Регистр флаговрегистр разрядностью 32-16 бит..
31 21 20 19 18 17 16 15 14 13
12
11 10 09 08 07 06 05 04 03 02 01 00
0 … ID VIP VIF AC VM RF 0 NT IOPL OF DF IF TF SF ZF 0 AF 0 PF 1 CF
Рассмотрим некоторые наиболее часто используемые в программах любого языка
программирования флаги.
Все флаги можно разделить на три группы:
1. 8 флагов состояния
. Эти флаги могут изменяться после выполнения машинных команд,
таких как арифметические операции (сложение, вычитание и т.д.), операции сравнения и
т.д. После формирования регистра флагов, их можно использовать для анализа результата и
изменения хода выполнения программы в зависимости от полученного результата.
2. 1 флаг управления (df), который используется цепочными командами (работа со строками).
3. 5 системных флагов, управляющих вводом/выводом, маскируемыми прерываниями,
отладкой, переключением между задачами и виртуальным режимом i8086. Не
рекомендуется прикладным программам модифицировать без необходимости эти флаги,
т.к. в большинстве случаев это приводит к прерываниям работы программы.
мнем
оника
флага
флаг номер
бита
содержание и назначение
1. cf флаг переноса 0 1-арифметическая операция произвела перенос из
старшего бита результата. Старшим является 7-й, 15-й
или 31-й бит в зависимости от размерности операнда.
0 – переноса нет
2. pf флаг паритета 2 1 – 8 младших разрядов результата содержат четное
число единиц
0 – 8 младших разрядов результата содержат нечетное
число единиц.
3. af вспомогательный
флаг переноса
4 Используется для команд, работающих с BCD-
числами. Фиксирует факт заема из младшей тетрады
результата.
1- в результате операции сложения был
произведен перенос из разряда 3 в старший
разряд или при вычитании был заем в разряд 3
младшей тетрады из значения в старшей
тетраде.
2- 0 – переносов и заемов не
было.
4. zf флаг нуля 6 1-результат нулевой
0- результат не нулевой
5. sf флаг знака 7 Отражает состояние старшего бита результата (биты
7, 15 или 31 для 8-, 16- или 32-разрядных операндов,
соответственно )
1-старший бит результата равен 1
0 – старший бит результата равен 0
6. of флаг 11 флаг of используется для фиксирования факта потери
               4. Дополнительный сегмент данных. Неявно алгоритмы выполнения машинных
                  команд предполагают, что обрабатываемые ими данные расположены в сегменте
                  данных, адрес которого находятся в сегментном регистре ds. Если программе
                  недостаточно одного сегмента данных, то она имеет возможность использовать еще
                  три дополнительных сегмента данных es, gs,fs.
                                   Регистры состояния и управления
     В МП включены несколько регистров, которые содержат информацию о состоянии как самого
     МП, так и программы, команды которой в данный момент загружены на конвейер.
        • регистр флагов eflsgs/flags
        • регистр указателя команды eip/ip
     Используя эти регистры, можно получить информацию о результатах выполнения команд
     программы и влиять на состояние самого МП.
     Регистр флагов – регистр разрядностью 32-16 бит..
31   …   21        20         19     18      17    16   15   14     13    11   10   09   08   07   06   05   04   03   02   01   00
                                                                    12
0    …   ID        VIP        VIF   AC      VM     RF   0    NT    IOPL   OF   DF   IF   TF   SF   ZF   0    AF   0    PF   1    CF
     Рассмотрим некоторые наиболее часто используемые в программах любого языка
     программирования флаги.
     Все флаги можно разделить на три группы:
        1. 8 флагов состояния. Эти флаги могут изменяться после выполнения машинных команд,
           таких как арифметические операции (сложение, вычитание и т.д.), операции сравнения и
           т.д. После формирования регистра флагов, их можно использовать для анализа результата и
           изменения хода выполнения программы в зависимости от полученного результата.
        2. 1 флаг управления (df), который используется цепочными командами (работа со строками).
        3. 5 системных флагов, управляющих вводом/выводом, маскируемыми прерываниями,
           отладкой, переключением между задачами и виртуальным режимом i8086. Не
           рекомендуется прикладным программам модифицировать без необходимости эти флаги,
           т.к. в большинстве случаев это приводит к прерываниям работы программы.
         №       мнем                       флаг             номер                  содержание и назначение
                 оника                                        бита
                 флага
              1.   cf                флаг переноса             0     1-арифметическая операция произвела перенос из
                                                                     старшего бита результата. Старшим является 7-й, 15-й
                                                                     или 31-й бит в зависимости от размерности операнда.
                                                                     0 – переноса нет
              2.         pf          флаг паритета             2     1 – 8 младших разрядов результата содержат четное
                                                                     число единиц
                                                                     0 – 8 младших разрядов результата содержат нечетное
                                                                     число единиц.

              3.         af         вспомогательный            4     Используется для команд, работающих с BCD-
                                      флаг переноса                  числами. Фиксирует факт заема из младшей тетрады
                                                                     результата.
                                                                         1- в результате операции сложения был
                                                                             произведен перенос из разряда 3 в старший
                                                                             разряд или при вычитании был заем в разряд 3
                                                                             младшей тетрады из значения в старшей
                                                                             тетраде.
                                                                         2- 0 – переносов и заемов не было.
              4.         zf               флаг нуля            6         1-результат нулевой
                                                                         0- результат не нулевой
              5.         sf               флаг знака           7     Отражает состояние старшего бита результата (биты
                                                                     7, 15 или 31 для 8-, 16- или 32-разрядных операндов,
                                                                     соответственно )
                                                                         1-старший бит результата равен 1
                                                                         0 – старший бит результата равен 0
              6.         of                 флаг              11     флаг of используется для фиксирования факта потери
                                                                          8