Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
экзамен эвм2.docx
Скачиваний:
8
Добавлен:
23.09.2019
Размер:
66 Кб
Скачать
☆
  1. Логика и организация программы

  1. Флаговый регистр

Регистр флагов  состоит из 16 бит, из них используются только 9.

Это регистр состояния процессора. Биты регистра состояния устанавливаются или очищаются в зависимости от результата исполнения предыдущей команды и используются некоторыми командами процессора. Биты регистра состояния могут также устанавливаться и очищаться специальными командами процессора. Отдельные биты флагов представляют одиночными буквами o, d, i, t, s, z, a, p, c или двумя буквами of, df, if, tf, sf, zf, af, pf и cf. CF — флаг переноса при арифметических операциях. Содержит перенос из старшего бита после арифметических операций, а так же последний бит при сдвигах или циклических сдвигах. PF — флаг четности результата, показывает четность младших восьмибитовых данных (1 – четное, 0 – нечетное). AF — флаг дополнительного переноса. Содержит перенос из 3 бита для 8-битовых данных, используется для специальных арифметических операций. ZF — флаг нулевого результата. Показывает результат арифметических операций и операций сравнения (0 – ненулевой, 1 – нулевой результат). SF — флаг знака (совпадает со старшим битом результата, 0 – плюс, 1 - минус). TF — флаг пошагового режима (используется при отладке). IF — флаг разрешения аппаратных прерываний. DF — флаг направления при строковых операциях. Обозначает левое или правое направление пересылки или сравнения строковых данных. OF — флаг переполнения. Указывает на переполнение старшего бита при арифметических командах.

  1. Команды условного перехода

  2. Расширенные операции пересылки

Пересылки непосредcтвенных данных в регистр, пересылки данных из памяти в регистр, пересылки содержимого регистра в память и пересылки содержимого oдного регистра в другой, во всех случаях длина данных огpаничена одним или двумя байтами и не предусмотрена пересылка данных из одной области памяти непосредственно другую область.

В EXE-программе, приведенной на рис., сегмент данных cодержит три девятибайтовых поля, NAME1, NAME2, NAME3. Цель программы - переслать данные из поля NAME1 в поле NAME2 и переслать данные из поля NAME2 в поле NAME3. Так как эти поля имеют длину девять байт каждая, то для пересылки данных кроме простой команды MOV потребуются еще другие команды. Процедура BEGIN инициализирует сегментные регистры и затем вызывает процедуры B10MOVE и C10MOVE. B10MOVE пересылает содержимое поля NAME1 в поле NAME2. Процедура начинает с самого левого байта в поле NAME1 и в цикле пересы лает затем второй байт, третий и т.д. Рис. Расширенные операции пересылки.

NAME1: A B C D E F G H I | | | | | | | | | NAME2: J K L M N O P Q R Для продвижения в полях NAME1 и NAME2 в регистр CX заносится значение 9, а регистры SI и DI используются в качестве индексных. Две команды LEA загружают относительные aдреса полей NAME1 и NAME2 в регистры SI и DI:

LEA SI,NAME1 ;Загрузка относительных адресов LEA DI,NAME2 ; NAME1 и NAME2 Для пересылки содержимого первого байта из поля NAME1 в первый байт поля NAME2 используются адреса в регистрах SI и DI. kвадратные скобки в командах MOV обозначают, что для доступа к памяти используется адрес в регистре, указанном в квадратных cкобках. Таким образом, команда MOV AL,[SI] означает: использовать адрес в регистре SI (т.е.NAME1) для пересылки соответствующего байта в регистр AL. А команда MOV [DI],AL означает: пересылать содержимое регистра AL по адресу, лежащему в регистре DI (т.е. NAME2). Следующие команды увеличивают значения регистров SI и DI и уменьшают значение в регистре SH. Если в регистре CX не нулевое значение, управление передается на следующий цикл (на метку B20).Так как содержимое регистров SI и DI было увеличено на 1, то следующие команды MOV будут иметь дело с адресами NAME1+1 и NAME2+1. Цикл продолжается таким образом, пока не будет передано содержимое NAME1+8 и NAME2+8. Процедура C10MOVE аналогична процедуре B10MOVE с двумя исключениями: она пересылает данные из поля NAME2 в поле NAME3 и использует команду LOOP вместо DEC и JNZ.