Автор работы: Пользователь скрыл имя, 11 Января 2011 в 19:34, лекция
Язык ассемблера - это один из самых старых из всех существующих языков программирования. Когда-то это был один из основных языков программирования, без знания которого нельзя было заставить компьютер сделать что-либо полезное. Появились более удобные средства общения с компьютером. Но в отличии от других языков ассемблер не умирал, более того он это не смог сделать в принципе.
PUSH источник - запись значения источника в вершину стека. В этом случае если необходимо сохранить необходимый адрес
POP приемник - запись значения из вершины стека по месту, указанному операндом приемником. Значение при этом «снимается» с вершины стека.
PUSHA и PUSHA W- команда групповой записи в стек. По этой команде в стек последовательно записываются регистры ax, cx, dx, bx, sp, bp, si, di. Разница этих двуух команд в разрядности используемых регистров (16 или 32 разрядных регистров)
POPA, POPAW— групповое извлечение из стека, обратная предыдущим операция.
PUSH- сохранения регистров флагов в стеке.
PUSHFW- сохраняет в стеке регистр флагов flags или eflags
POPF и POPFW— обратная предыдущим операция извлечения регистра флагов из стека.
Команда обмена XCHG
Двунаправленная пересылка данных. Команда меняет между собой значения двух регистров или регистра и ячейки памяти. XCHG ax,bx XCHG al,bl
Работа с адресами и указателями
lea приемник, источник - загрузка исполнительного адреса. удобна для работы со строками.
В отличие от команды mov с операцией OFFSET операнд источник может быть индексированным.
Например,
mov di, 5
lea bx, tab[di]
lds приемник, источник - регистр указателя в регистр сегмента данных ds. Это загрузка указателя и регистра сегмента данных( загрузка указателя с использованием регистра ds)
Например,
h fddhere
lds bx, h_f
аналогично операции
mov bx, offset h_f
movax,seg here
mov ds, ax
где SEG - операция, которая возвращает номер блока адреса переменной.
В этой операции
исключается использование
les приемник, источник -загрузка указателя в регистр дополнительного сегмента данных es/ lgs приемник, источник — загрузка указателя в регистр дополнительного сегмента данных gs. lfs приемник, источник - . загрузка указателя в регистр дополнительного сегмента данных fs. lss приемник, источник - . загрузка указателя в регистр сегмента стека ss.
Команда Lea похожа на команду mov тем, что также производит пересылку. Однако эта команда производит пересылку не данных, а эффективного адреса (т.е. смещения данных относительно начала сегмента данных) в регистр, указанный операндом назначения.
Команды ввода-вывода в порт
В этом случае ввод-вывод осуществляется на уровне BIOS напрямую с оборудованием. in аккумулятор, порт out порт, аккумулятор
где аккумулятор - регистр al при обмене байтами или регистр ax при обмене словами.
порт десятичное значение от 0 до 256
В качестве операнда «порт» можно использовать регистр dx.
Лекция 5. Арифметические команды.
Арифметические команды работают с двумя типами чисел:
Целые двоичные числа - это число, закодированное в двоичной системе счисления. Размерность может составлять 8, 16 и 32 бита. Знак целого числа определяется тем, как интерпретируется старший бит в представлении числа. Среди арифметических команд есть только две команды, которые учитывают старший бит, это imul и idiv/ В остальных случаях сам программист должен следить за старшим битом. Диапазон значений двоичных чисел:
Формат двоичных чисел: числоb (01001100b)
Например:
mov ax, 01001ЮОЪ
addax,01001b
Десятичные числа:
Десятичные числа - специализированный вид представления числовой информации, в основу которого положен принцип кодирования каждой десятичной цифры числа группой из четырех бит. При этом каждый байт числа содержит одну или две десятичные цифры в так называемом двоично-десятичном коде (BCD - Binary-Coded Decimal). Например:
Десятичные числа могут представляться в двух форматах и заканчиваются буквой D:
Хотя мы в данном случае и говорим о десятичных числах для МП - это двоичные числа. Поэтому при работе с десятичными числами, если вы забываете о внутреннем представлении чисел и не учитываете это при вычислениях, могут возникать ошибки. Поэтому данные, если они десятичные то необходимо скорректировать с помощью специальных команд. Шестнадцатеричные цифры от 0 до F и заканчиваются буквой H.
Литерал - строка букв, цифр, символов заключенных в кавычки или апострофы.
Команды сложения
ADD приемник, источник - сложить два операнда, приемник = приемник +источник При сложении используется флаг CF.
Для получения точного результата используется команда ADC, которая учитывает флаг переноса.
ADC приемник, источник — сложить с переносом.
результат следующий
приемник= приемник + источник + значение CF
При выполнении команды сложения устанавливаются следующие флаги:
OF=1, если при сложении 2-х чисел одного знака результат превышает диапазон допустимых значений в обратном коде, а сам приемником меняет знак SF и OF имеют смысл при сложении чисел со знаком, AF - для десятичных чисел.
Команды вычитания.
Как таковой команды вычитания в МП не существует, это команда сложения двух чисел, одно их которых в дополнительном коде. SUB - вычесть SBB - вычесть с заемом. Формат команды следующий:
SUB приемник, источник приемник= приемник- источник SBB приемник, источник
приемник = приемник - источник- заем (флаг CF) Нельзя вычитать содержимое одной ячейки из другой. Устанавливаются флаги:
Коррекция результат вычитания 2-х десятичных чисел, как и сложения выполняется командами AAS и DAS. AAS - преобразует содержимое регистра AL в правильную неупакованную десятичную цифру.
DEC приемник
Это команда уменьшения приемника (регистра общего назначения или ячейки памяти) на 1.
Команды умножения.
Для умножения чисел без знака предназначена команда
MUL источник
Для умножения чисел со знаком предназначена команда
IMUL источник
где источник - регистр общего назначения или ячейка памяти размером в байт или слово. В качестве второго операнда команды MUL и IMUL используют содержимое регистра AL (при операциях над байтами) или регистра AX (при операциях над словами). Произведение имеет двойной размер и возвращается следующим образом:
Умножение байтов возвращение 16-битовое произведение в регистрах AH (старший байт) и AX (младший байт).
Умножение слов возвращает 32-битовое произведение в регистрах DX(старшее слово) и AX (младшее слово) По завершении исполнения этих команд флаги переноса CF и переполнения OF показывают, какая часть произведения существенна для операций.
После исполнения команды MUL флаги CF и OF равны 0, если старшая половина произведения равна 0; в противном случае оба этих флага равны 1. После исполнения команды IMUL флаги CF и OF равны 0, если старшая половина произведения представляет собой лишь расширение знака младшей половины. В противном случае они равны 1.
Команда деления
Команда DIV выполняет деление чисел без знака
DIV источник
Команда IDIV выполняет деление чисел со знаком
IDIV источник
где источник - делитель размером в байт или слово, находящееся в регистре общего назначения или ячейки памяти. Делимое должно иметь двойной размер; оно извлекается из регистров AH и AL (при делении на 8-битовое число) или из регистров DX и AX (при делении на 16-битвое число). Результаты возвращаются следующим образом: Если операнд-источник представляет собой байт, то частное возвращается в регистре AL, а остаток в регистре AH. Если операнд-источник представляет собой слово, то частное возвращается в регистре AX, а остаток - в регистре DX.
Обе команды оставляют состояние флагов неопределенными, но если частное не помещается в регистре - приемнике (AL или AX), то МП сообщает об этот как «Прерывание типа 0 (деление на 0).
Переполнение результата деления возникает в следующих случаях:
При делении слов со знаком частное лежит вне диапазона от -32768 до 32767
Лекция (6,7). Команды манипулирования битами.
Все команды манипулирования битами делятся три типа:
Логические команды
and источник, приемник -операция логического умножения. Команда выполняет поразрядное логическую операцию И (конъюнкция) Результат записывается в приемник.
ог источник, приемник -операция логического сложения. Команда выполняет поразрядное логическую операцию ИЛИ (дизъюнкция) Результат записывается в приемник. хог источник, приемник -операция логического исключающего сложения. Команда выполняет поразрядное логическую операцию исключающего сложения Результат записывается в приемник.
хог ax,ax; ax=0