- •Лекция №33 Адресация регистров и ячеек памяти в ассемблере. Основные команды языка ассемблер.
- •Адресация регистров и ячеек памяти в ассемблере
- •1.1 Непосредственная адресация
- •1.2 Прямая адресация регистров мпп
- •1.3 Адресация ячеек оп
- •Основные команды ассемблера
- •2.1 Команды пересылки данных
- •2.2 Арифметические команды
- •2.4 Команды приращения
- •2.5 Команды умножения
- •2.3 Команды сложения, вычитания и сравнения
- •2.6 Команды деления
- •2.7 Логические команды
- •2.8 Команды безусловной передачи управления
- •2.9 Команды перехода к подпрограмме и выхода из подпрограммы
- •2.10 Команда перехода к подпрограмме: calLopr
- •2.11 Команда выхода из подпрограммы
- •2.12 Команды условной передачи управления
- •2.13 Команды управления циклами
- •2.14 Команды прерывания
Основные команды ассемблера
По назначению можно выделить команды (в скобках приводятся примеры мнемонических кодов операций команд ассемблера ПК типа IBMPC):
□ выполнения арифметических операций (ADD и ADC— сложения и сложения с переносом, SUB и SBB— вычитания и вычитания с заемом, MUL и IMUL— умножения без знака и со знаком, DIV и IDIV— деления без знака и со знаком, СМР — сравнения и т. д.);
□ выполнения логических операций (OR,AND,NOT,XOR,TEST и т. д.);
Основные команды ассемблера:
пересылки данных (MOV— переслать, XCHG— обменять, IN— ввести в микропроцессор, OUT— вывести из микропроцессора и т. д.);
передачи управления (ветвления программы: JMP— безусловного перехода, CALL— вызова процедуры, RET— возврата из процедуры, J* — условного перехода, LOOP— управления циклом и т. д.);
обработки строк символов (MOVS— пересылки, CMPS — сравнения, LODS—загрузки, SCAS— сканирования. Эти команды обычно используются с префиксом (модификатором повторения)REP;
прерывания работы программы (INT— программные прерывания, INTO— условного прерывания при переполнении, IRET— возврата из прерывания);
управления микропроцессором (ST* и CL* — установки и сброса флагов, HLT—останова, WAIT— ожидания, NOP— холостого хода и т. д.).
2.1 Команды пересылки данных
□ MOVdst,src— пересылка данных (move— переслать из srcвdst).
Пересылает1: один байт (если src и dst имеют формат байта) или одно слово (если src и dst имеют формат слова) между регистрами или между регистром и памятью, а также заносит непосредственное значение в регистр или в память.
Операнды dst и src должны иметь одинаковый формат — байт или слово.
Src могут иметь тип: г (register) — регистр, m(memory) — память, і (impedance) — непосредственное значение. Dst могут быть типа г, т. Нельзя в одной команде использовать операнды: rsegm совместно с І; два операнда типа m и два операнда типа rsegm). Операнд і может быть и простым выражением:
movАХ, 15б*10Н
movАХ, (152 + 101В) / 15
и т. п.
Вычисление выражения выполняется только при трансляции. Флаги не меняет.
PUSHsrc— занесение слова в стек (push— протолкнуть; записать в стек изsrc). Помещает в вершину стека содержимо еsrc— любого 16-битового регистра (в том числе и сегментного) или двух ячеек памяти, содержащих 16-битовое слово. Флаги не меняются;
POPdst— извлечение слова из стека (pop— вытолкнуть; считать из стека в dst). Снимает слово с вершины стека и помещает его вdst— любой 16-битовый регистр (в том числе и сегментный) или в две ячейки памяти. Флаги не меняются.
В командах PUSH и POP операнды dst и src могут быть только типов гит.
В книге для отображения операндов команд приняты обычное обозначение орг и семантические обозначения src (source— источник) и dst (destination— приемник).
2.2 Арифметические команды
Операнды могут быть двоичные (8 или 16 бит, целые, со знаком или без знака), двоично-десятичные (от 1 до 255 байт, без знака, в упакованном или распакованном (ASCII-коды) форматах). Машина не обращает внимания на формат и обращается с ними формально, как с двоичными числами в дополнительном коде. Но для десятичной арифметики после операции требуется коррекция (операции только над одним байтом).
