[СП] Справочник команд (Всякие мелочи)
Описание файла
Файл "[СП] Справочник команд" внутри архива находится в папке "Всякие мелочи". Документ из архива "Всякие мелочи", который расположен в категории "". Всё это находится в предмете "системное программирование" из 4 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "системное программирование" в общих файлах.
Онлайн просмотр документа "[СП] Справочник команд"
Текст из документа "[СП] Справочник команд"
ADD Целочисленное сложение
Команда ADD осуществляет сложение первого и второго операндов. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сложения. Второй операнд не изменяется. В качестве операндов можно указывать регистр (кроме сегментного) или ячейку памяти, а в качестве второго операнда еще и непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Команда воздействует на флаги OF, SF, ZF, AF, PF и CF.
AND Логическое И
Команда AND осуществляет логическое (побитовое) умножение первого операнда на второй. Исходное значение первого операнда (приемника) теряется, замещаясь результатом умножения. В качестве операндов можно указывать регистр (кроме сегментного) или ячейку памяти, а в качестве второго операнда еще и непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами. Команда воздействует на флаги SF, ZF и PF.
Правила побитового умножения:
Первый олеранд-бит 0 1 0 1
Второй операнд-бит 0 0 1 1
Бит результата 0 0 0 1
CALL Вызов процедуры
Команда CALL передает управление процедуре (подпрограмме), сохранив перед этим в стеке адрес возврата. Команда RET, которой обычно заканчивается процедура, забирает из стека адрес возврата и возвращает управление на команду, следующую за командой CALL. Команда CALL имеет 4 модификации:
1) вызов прямой ближний (в пределах текущего программного сегмента);
2) вызов прямой дальний (вызов процедуры, расположенной в другом
программном сегменте);
3) вызов косвенный ближний;
4) вызов косвенный дальний.
Команда CALL прямого ближнего вызова заносит в стек смещение точки возврата в текущем программном сегменте и модифицирует IP так, чтобы в нем содержалось смещение точки перехода в том же программном сегменте. Необходимое для вычисления этого смещения расстояние до точки перехода содержится в коде команды, который занимает 3 байта (код операции E8h и смещение к точке перехода).
Команда CALL прямого дальнего вызова заносит в стек два слова - сначала сегментный адрес текущего программного сегмента, а затем (выше, в слово с меньшим адресом) смещение точки возврата в текущем программном сегменте. Далее модифицируются регистры IP и CS: в IP помещается смещение точки перехода в том сегменте, куда осуществляется переход, а в CS - сегментный адрес этого сегмента. Обе эти величины берутся из кода команды, который занимает 5 байт (код операции 9Ah, относительный адрес вызываемой процедуры и се сегментный адрес).
Косвенные вызовы отличаются тем, что адрес перехода извлекается не из кода команды, а из ячеек памяти или регистров; в коде команды содержится информация о том, где находится адрес перехода. Поэтому длина кода команды зависит от используемого способа адресации.
CBW Преобразование байта в слово
Команда CBW заполняет регистр АН знаковым битом числа, находящегося в регистре AL, что дает возможность выполнять арифметические операции над исходным операндом-байтом как над словом в регистре АХ. Команда не имеет параметров и не воздействует на флаги процессора.
CLC Сброс флага переноса
Команда CLC сбрасывает флаг переноса CF в регистре флагов. Команда не имеет параметров и не воздействует на остальные флаги процессора.
CLD Сброс флага направления
Команда CLD сбрасывает флаг DF в регистре флагов, устанавливая прямое (в порядке возрастания адресов) направление выполнения операций со строками. Команда не имеет параметров и не воздействует на остальные флаги процессора.
CLI Сброс флага прерываний
Команда CLI сбрасывает флаг IF в регистре флагов, запрещая все аппаратные прерывания. Прерывания будут оставаться запрещенными до установки флага IF командой sti. На программные прерывания (команду int) флаг не действует. Команда не имеет параметров и не воздействует на остальные флаги процессора.
CMC Инвертирование флага переноса
Команда CMC изменяет значение флага CF в регистре флагов на обратное. Команда не имеет параметров и не воздействует на остальные флаги процессора.
СМР Сравнение
Команда СМР выполняет вычитание второго операнда из первого. В соответствии с результатом вычитания устанавливаются состояния флагов CF, PF, AF, ZF, SF и OF.
Сами операнды не изменяются. Таким образом, если команду сравнения записать в общем виде:
cmp операнд_1, операнд_2
то ее действие можно условно изобразить следующим образом:
операнд_1 - операнд_2 -> флаг процессора
В качестве операндов можно указывать регастр (кроме сегментного) или ячейку памяти, а в качестве второго операнда еще и непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Обычно вслед за командой СМР
стоит одна из команд условных переходов, анализирующих состояние флагов процессора
(je - переход, если равно; jne - переход, если не равно, и т. д.).
CMPS Сравнение строк
CMPSB Сравнение строк по байтам
CMPSW Сравнение строк по словам
Команды предназначены для операций над строками (строкой называется последовательность байтов или слов с любым содержимым). Они сравнивают по одному элементу каждой строки, осуществляя вычитание второго операнда из первого и устанавливая в соответствии с результатом вычитания флаги CF, PF, AF, ZF, SF и OF. Первый операнд адресуется через DS:SI, второй - через ES:DI. Операцию сравнения можно условно изобразить следующим образом:
(DS:SI) - (ES:DI) —> флаги процессора
После каждой операции сравнения регистры SI и DI получают положительное
(если флаг DF=0) или отрицательное (если флаг DF=l) приращение. Величина
приращения составляет 1 или 2 в зависимости от размера сравниваемых элементов.
Вариант команды CMPS имеет формат
cmps строка_1, строка_2
(что не избавляет от необходимости инициализировать регистры DS:SI и ES:DI адресами строк строка_1 и строка_2 соответственно). В этом формате возможна замена сегмента первой строки:
cmps ES:строка_1, строка_2
Рассматриваемые команды могут предваряться префиксами повторения REPE/REPZ (повторять, пока элементы равны, т. с. до первого неравенства) и REPNE/REPNZ (повторять, пока элементы не равны, т. е. до первого равенства). В любом случае выполняется не более СХ операций над последовательными элементами.
После выполнения рассматриваемых команд регистры SI и DI указывают на ячейки памяти, находящиеся за теми (если DF=0) или перед теми (если DF=l) элементами строк, на которых закончились операции сравнения.
CWD Преобразование слова в двойное слово
Команда CWD заполняет регистр DX знаковым битом содержимого регистра АХ, преобразуя тем самым 16-разрядное число со знаком в 32-разрядное. Команду удобно использовать для преобразования 2-байтового делимого в 4-байтовое (двойное слово) при делении на 16-разрядный операнд. Команда не имеет параметров и не воздействует на флаги процессора.
DEC Декремент (уменьшение на 1)
Команда DEC вычитает 1 из операнда, в качестве которого можно указывать регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Операнд интерпретируется как число без знака. Команда воздействует на флаги OF, SF, ZF, AF и PF.
DIV Деление целых беззнаковых чисел
Команда DIV выполняет деление целого числа без знака, находящегося в регистрах АХ (в случае деления на байт) или DX:AX (в случае деления на слово), на операнд источник (целое число без знака). Размер делимого в два раза больше размеров делителя и остатка.
Для 1-байтовых операций делимое помещается в регистр АХ; после выполнения операции частное записывается в регистр AL, а остаток - в регистр АН.
Для 2-байтовых операций делимое помещается в регистры DX:AX (в DX - старшая часть, в АХ - младшая); после выполнения операции частное записывается в регистр АХ, а остаток - в регистр DX.
В качестве операнда-делителя можно указывать регистр данных или ячейку памяти; не допускается деление на непосредственное значение. Если делитель равен нулю или если частное не помещается в назначенный регистр, возбуждается прерывание через вектор 0. Команда не воздействует на флаги процессора.
INC Инкремент (увеличение на 1)
Команда INC прибавляет 1 к операнду, в качестве которого можно указывать регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Операнд интерпретируется как число без знака. Команда воздействует на флаги OF, SF, ZF, AF и PF.
INT Программное прерывание
Команда INT инициирует в процессоре процедуру прерывания, в результате которой правление передается на программу обработки прерывания с номером n, который указан в качестве операнда команды INT. В стек прерываемого процесса (текущей программы) заносится содержимое регистра флагов, сегментного регистра CS и указателя команд IP, после чего в регистры IP и CS передается содержимое двух слов из вектора прерывания типа п (расположенных по адресам 0:n*4 и 0:n*4+2). Команда INT сбрасывает флаг IF.
LEA Загрузка исполнительного адреса
Команда LEA загружает в регистр, указанный в команде в качестве первого операнда, относительный адрес второго операнда. В качестве первого операнда следует указывать регистр общего назначения, в качестве второго - ячейку памяти. Команда lea reg,mem
по своему результату эквивалентна команде:
mov reg,offset mem
Команда не воздействует на флаги процессора.
LOOP Циклическое выполнение, пока содержимое СХ не равно нулю
Команда LOOP выполняет декремент содержимого регистра СХ и, если оно не равно нулю, осуществляет переход на указанную метку вперед или назад в том же сегменте команд в диапазоне -128...+127 байт. Содержимое регистра СХ рассматривается как целое число без знака, поэтому максимальное число повторений группы, включенных в цикл команд, составляет 65 536 (если перед входом в цикл СХ=0). Команда не воздействует на флаги процессора.
MOV Пересылка данных
Команда MOV замещает первый операнд (приемник) вторым (источником). При этом исходное значение первого операнда теряется. В зависимости от описания операндов пересылается слово или байт. Если операнды описаны по-разному или режим адресации не позволяет однозначно определить размер операнда, для уточнения размера передаваемых данных в команду следует включить один из атрибутных операторов byte ptr или word ptr. Команда не воздействует на флаги процессора. В зависимости от использованных режимов адресации команда MOV осуществляет пересылки следующих видов:
• из регистра общего назначения в регистр общего назначения;
• из ячейки памяти в регистр общего назначения;
• из регистра общего назначения в ячейку памяти;
• непосредственный операнд в регистр общего назначения;
• непосредственный операнд в ячейку памяти;
• из регистра общего назначения в сегментные регистры;
• из сегментного регистра в регистр общего назначения;
• из сегментного регистра в ячейку памяти.
Запрещены пересылки из ячейки памяти в ячейку памяти (для этого предусмотрена команда MOVS), а также загрузка сегментного регистра непосредственным значением. Нельзя также непосредственно переслать содержимое одного сегментного регистра в другой.
MOVS Пересылка данных из строки в строку
MOVSB Пересылка байта данных из строки в строку
MOVSW Пересылка слова данных из строки в строку
Команды предназначены для операций над строками (строкой называется последовательность байтов или слов памяти с любым содержимым). Они пересылают по одному элементу строки, который может быть байтом или словом. Первый операнд (приемник) адресуется через ES:DI, второй (источник) - через DS:SI. Операцию пересылки можно условно изобразить следующим образом:
(DS:SI) -» (ES:DI)
После каждой операции пересылки регистры SI и DI получают положительное (если флаг DF=0) или отрицательное (если флаг DF=l) приращение. Величина приращения составляет 1 или 2 в зависимости от размера пересылаемых элементов. Вариант команды MOVS имеет формат:
movs строка_1, строка_2
(что не избавляет от необходимости инициализировать регистры ES:DI и DS:SI адресами
строк cmpoKajt и cmpom_2; операнды лишь позволяют ассемблеру определить по описанию полей данных cmpom_l и строка_2 размерность пересылаемых данных - байт или слово). В этом формате возможна замена сегмента второй строки:
movs строка_1, ES: строка_2
Рассматриваемые команды могут предваряться префиксом повторения REP (повторять СХ раз). После выполнения рассматриваемых команд регистры SI и D1 указывают на ячейки памяти, находящиеся за теми (если DF=0) или перед теми (если DF=1) элементами строк, на которых закончились операции пересылки. Команды не воздействует на флаги процессора.
MUL Умножение целых беззнаковых чисел
Команда MUL выполняет умножение целого беззнакового числа, находящегося в регистре AL (в случае умножения на байт) или АХ (в случае умножения на слово), на операнд-источник (целое число без знака). Размер произведения в два раза больше размера сомножителей.