- •История развития эвм
- •Особенности архитектуры современной вычислительной машины
- •Общее устройство компьютера и особенности архитектуры
- •Архитектура памяти эвм
- •Виртуальная память
- •Система адресации
- •Принципы обмена информацией с внешними устройствами
- •Процессор
- •Сегменты процессора
- •Регистры процессора
- •Специальные средства отладчика
- •Машинная адресация
- •Требования языка ассемблера
- •Директивы
- •Инициализация программы
- •Ассемблирование и выполнение программ
- •Директивы определения данных
- •Непосредственные операнды
- •Различия между программами в ехе и сом-файлах
- •Логика и организация программы
- •Флаговый регистр
- •Команды условного перехода
- •Расширенные операции пересылки
- •Команды логических операций: and, or, xor, test, not
- •Арифметические команды
Команды условного перехода
Типы данных, над которыми выполняются
арифметические операции и операции сравнения определяют какими командами
пользоваться: беззнаковыми или знаковыми. Беззнаковые данные используют
все биты как биты данных; характерным примером являются символьные строки:
имена, адреса и натуральные числа. В знаковых данных самый левый бит
представляет собой знак, причем если его значение равно нулю, то число
положительное, и если единице, то отрицательное. Многие числовые значения
могут быть как положительными так и отрицательными.
В качестве примера предположим, что регистр AX содержит 11000110, а
BX - 00010110. Команда
CMP AX,BX
сравнивает содержимое регистров AX и BX. Если данные беззнаковые, то
значение в AX больше, а если знаковые - то меньше.
для беззнаковых данных есть переходы по состояниям равно, выше или ниже, а
для беззнаковых - равно, больше или меньше. Переходы по проверкам флагов
переноса, переполнения и паритета имеют особое назначение. Ассемблер
транслирует мнемонические коды в объектный код независимо от того, какую
из двух команд вы применили. Однако, команды JAE и JGE являясь явно
одинаковыми, проверяют различные флаги.
Расширенные операции пересылки
Процедура 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.