Мнемоника арифметических команд
Команда ADD имеет следующий формат в мнемонике ассемблера: ADD dest,src, где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; src – второй операнд, который может иметь любой режим адресации, если первый операнд имеет регистровую адресацию, или иметь регистровую или непосредственную адресацию, если первый операнд адресует данные в памяти. Эта команда складывает значение второго операнда со значением первого операнда, результат сложения помещается в первый операнд. Команда ADD изменяет значения флагов переполнения (OF), знака (SF), нуля (ZF), дополнительного переноса (AF), переноса (CF) и четности (PF). Флаг переполнения устанавливается, если при выполнении операции произошло переполнение (результат сложения не вмещается в размер операндов). Флаг знака устанавливается, если в результате выполнения операции получилось отрицательное число. Флаг нуля устанавливается, если результатом операции является ноль. Флаг дополнительного переноса устанавливается, если при сложении байт осуществлен перенос из 3-го бита. Флаг переноса устанавливается, если при сложении осуществлен перенос из старшего бита. Флаг четности устанавливается, если количество единичных битов в младшем байте результата операции четное.
Команда ADD имеет следующие форматы машинных кодов: 1) сложение операнда в памяти или в регистре с операндом в регистре
2) сложение непосредственного операнда с содержимым аккумулятора
3) сложение непосредственного операнда с операндом в регистре или в памяти
Примеры использования команды ADD:
Команда ADC имеет следующий формат в мнемонике ассемблера: ADC dest,src, где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; src – второй операнд, который может иметь любой режим адресации, если первый операнд имеет регистровую адресацию, или иметь регистровую или непосредственную адресацию, если первый операнд адресует данные в памяти. Эта команда складывает содержимое своих операндов и содержимое флага переноса (CF), результат сложения помещается в первый операнд. Содержимое регистра флагов при выполнении команды ADC изменяется аналогично тому, как это было при выполнении команды ADD.
Команда ADC имеет следующие форматы машинных кодов: 1) сложение операнда в памяти или в регистре с операндом в регистре
2) сложение непосредственного операнда с содержимым аккумулятора
3) сложение непосредственного операнда с операндом в регистре или в памяти
Примеры использования команды ADC:
Команда INC имеет следующий формат в мнемонике ассемблера: INC dest, где операнд dest может иметь любой режим адресации, кроме непосредственной. Эта команда увеличивает на 1 (инкрементирует) значение своего операнда. Содержимое регистра флагов (кроме флага CF) при выполнении команды INC изменяется аналогично тому, как это было при выполнении команды ADD. Команда INC не изменяет состояние флага переноса. Команда INC имеет следующие форматы машинных кодов: 1) инкрементирование 16-разрядного регистра
2) инкрементирование регистра или ячейки памяти
Примеры использования команды INC:
Команда AAA не имеет операндов. Эта команда корректирует содержимое регистра AL, которое рассматривается как результат сложения двух одноразрядных десятичных чисел, представленных ASCII кодами. Команда AAA проверяет младшую тетраду (младшую шестнадцатеричную цифру) в AL. Если значение этой тетрады больше 9 или флаг AF имеет значение 1, то к регистру AL прибавляется 6, а к регистру AH прибавляется 1, флаги AF и CF устанавливаются в 1. Кроме того, во всех случаях AAA записывает 0 в старшую тетраду AL.
Команда AAA имеет следующий формат машинного кода: Пример использования команды AAA:
Команда DAA не имеет операндов. Эта команда корректирует содержимое регистра AL, которое рассматривается как результат сложения двух чисел, представленных двоично-десятичными кодами. Если младшая тетрада регистра AL имеет значение большее 9 или флаг AF установлен в 1, то команда DAA прибавляет 6 к содержимому регистра AL и устанавливает флаг AF в 1. Далее, если старшая тетрада регистра AL содержит значение большее, чем 9, или флаг CF установлен в 1, то команда DAA прибавляет 60 h к содержимому AL и устанавливает флаг CF в 1. Данная команда изменяет флаги AF, CF, PF, SF и ZF. Команда DAA имеет следующий формат машинного кода: Пример использования команды DAA:
Команда SUB имеет следующий формат в мнемонике ассемблера: SUB dest,src, где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; src – второй операнд, который может иметь любой режим адресации, если первый операнд имеет регистровую адресацию, или иметь регистровую или непосредственную адресацию, если первый операнд адресует данные в памяти. Эта команда вычитает значение второго операнда из значения первого операнда, результат вычитания помещается в первый операнд. Команда SUB изменяет значения флагов OF, SF, ZF, AF, CF и PF. Флаг дополнительного переноса устанавливается, если при вычитании байт осуществлен заем из 3-го бита. Флаг переноса устанавливается, если при вычитании осуществлен заем из старшего бита.
Команда SUB имеет следующие форматы машинных кодов: 1) вычитание операнда в памяти или в регистре из операнда в регистре
2) вычитание непосредственного операнда из содержимого аккумулятора
3) вычитание непосредственного операнда из операнда в регистре или в памяти
Примеры использования команды SUB:
Команда SBB имеет следующий формат в мнемонике ассемблера: SBB dest,src, где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; src – второй операнд, который может иметь любой режим адресации, если первый операнд имеет регистровую адресацию, или иметь регистровую или непосредственную адресацию, если первый операнд адресует данные в памяти. Эта команда вычитает содержимое второго операнда и содержимое флага CF (заем) из содержимого первого операнда, результат вычитания помещается в первый операнд. Содержимое регистра флагов при выполнении команды SBB изменяется аналогично тому, как это было при выполнении команды SUB. Команда SBB имеет следующие форматы машинных кодов: 1) вычитание операнда в памяти или в регистре из операнда в регистре
2) вычитание непосредственного операнда из содержимого аккумулятора
3) вычитание непосредственного операнда из операнда в регистре или в памяти
Примеры использования команды SBB:
Команда DEC имеет следующий формат в мнемонике ассемблера: DEC dest, где операнд dest может иметь любой режим адресации, кроме непосредственной.
Эта команда уменьшает на 1 (декрементирует) значение своего операнда. Содержимое регистра флагов (кроме флага CF) при выполнении команды DEC изменяется аналогично тому, как это было при выполнении команды SUB. Команда DEC не изменяет состояние флага переноса. Команда DEC имеет следующие форматы машинных кодов: 1) декрементирование 16-разрядного регистра
2) декрементирование регистра или ячейки памяти
Примеры использования команды DEC:
Команда CMP имеет следующий формат в мнемонике ассемблера: CMP dest,src, где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; src – второй операнд, который может иметь любой режим адресации, если первый операнд имеет регистровую адресацию, или иметь регистровую или непосредственную адресацию, если первый операнд адресует данные в памяти. Эта команда предназначена для сравнения своих операндов. Действия, выполняемые командой CMP, во всем аналогичны действиям команды SUB, за тем лишь исключением, что результат вычитания ни куда не помещается, а изменяются только флаги. Команда CMP имеет следующие форматы машинных кодов: 1) сравнение операнда в памяти или в регистре и операнда в регистре
2) сравнение непосредственного операнда с содержимым аккумулятора
3) сравнение непосредственного операнда с операндом в регистре или в памяти
Примеры использования команды CMP:
Команда AAS не имеет операндов. Эта команда корректирует содержимое регистра AL, которое рассматривается как результат вычитания двух одноразрядных десятичных чисел, представленных ASCII кодами. Команда AAS проверяет младшую тетраду в AL. Если значение этой тетрады больше 9 или флаг AF имеет значение 1, то из содержимого регистра AL вычитается 6, а из содержимого регистра AH вычитается 1, флаги AF и CF устанавливаются в 1. Кроме того, во всех случаях AAS записывает 0 в старшую тетраду AL. Команда AAS имеет следующий формат машинного кода:
Пример использования команды AAS:
Команда DAS не имеет операндов. Эта команда корректирует содержимое регистра AL, которое рассматривается как результат вычитания двух чисел, представленных двоично-десятичными кодами. Если младшая тетрада регистра AL имеет значение большее 9 или флаг AF установлен в 1, то команда DAS вычитает 6 из содержимого регистра AL и устанавливает флаг AF в 1. Далее, если старшая тетрада регистра AL содержит значение большее, чем 9, или флаг CF установлен в 1, то команда DAS вычитает 60 h из содержимого AL и устанавливает флаг CF в 1. Данная команда изменяет флаги AF, CF, PF, SF и ZF. Команда DAS имеет следующий формат машинного кода: Пример использования команды DAS:
Команда MUL имеет следующий формат в мнемонике ассемблера: MUL src, где src – операнд-множитель, имеющий любой режим адресации, кроме непосредственной. Эта команда умножает беззнаковое множимое (байт или слово) на беззнаковый множитель (байт или слово соответственно). Старший бит мно-жимого и множителя при этом рассматривается как бит данных, а не как знаковый бит. При умножении байт множимое находится в регистре AL, произведение в регистре AX, а при умножении слов – множимое в регистре AX, произведение в паре регистров DX: AX. Команда MUL воздействует на флаги CF и OF (флаги AF, PF, SF, ZF не определены). Флаги CF и OF устанавливаются, если старшая часть произведения (AH или DX в зависимости от вида умножения) не равна 0. В противном случае эти флаги сбрасываются. Команда MUL имеет следующий формат машинного кода:
Примеры использования команды MUL:
Команда IMUL имеет следующий формат в мнемонике ассемблера: IMUL src, где src – операнд-множитель, имеющий любой режим адресации, кроме непосредственной. Эта команда умножает знаковое множимое (байт или слово) на знаковый множитель (байт или слово соответственно). Старший бит множимого и множителя при этом рассматривается как знаковый бит. При умножении байт множимое находится в регистре AL, произведение в регистре AX, а при умножении слов – множимое в регистре AX, произведение в паре регистров DX: AX. Команда IMUL воздействует на флаги CF и OF (флаги AF, PF, SF, ZF не определены). Флаги CF и OF устанавливаются, если младшая часть произведения (AL или AX в зависимости от вида умножения) равна максимальному положительному числу, которое может в ней разместиться (7F h и 7FFF h соответственно), или старшая часть произведения (AH или DX в зависимости от вида умножения) не равна максимальному беззнаковому числу, которое может в ней разместиться (0FF h и 0FFFF h соответственно). В противном случае эти флаги сбрасываются. Команда IMUL имеет следующий формат машинного кода:
Примеры использования команды IMUL:
Команда AAM не имеет операндов. Эта команда корректирует содержимое регистра AX, которое рассматривается как результат умножения двух одноразрядных десятичных чисел, представленных ASCII кодами. Однако до выполнения умножения в этих числах должны быть обнулены старшие тетрады. Команда AAM делит содержимое регистра AL на 10, частное помещается в AH, а остаток от деления – в AL. Команда AAM изменяет флаги PF, SF и ZF. Команда AAM имеет следующий формат машинного кода: Пример использования команды AAM:
Команда DIV имеет следующий формат в мнемонике ассемблера: DIV src, где src – операнд-множитель, имеющий любой режим адресации, кроме непосредственной. Эта команда делит беззнаковое делимое (слово или двойное слово) на беззнаковый делитель (байт или слово соответственно). Старший бит множимого и множителя при этом рассматривается как бит данных, а не как знаковый бит. При делении на байт делимое находится в регистре AX, частное помещается в AL, а остаток от деления – в AH. При делении на слово делимое находится в паре регистров DX: AX, частное помещается в AX, а остаток от деления в DX. После выполнения команды DIV флаги CF, OF, AF, PF, SF, ZF не определены. Если частное слишком велико для того, чтобы поместиться в регистре (AL или AX), то при выполнении команды DIV происходит программное прерывание INT 0h. Во избежание этой ситуации рекомендуется перед выполнением деления осуществлять проверку делителя на неравенство нулю. Другое правило, обеспечивающее благоприятные условия для выполнения деления, заключается в следующем: если делитель - байт, то его значение должно быть больше, чем старший байт (AH) делимого; если делитель – слово, то его значение должно быть больше, чем старшее слово (DX) делимого. Команда DIV имеет следующий формат машинного кода:
Примеры использования команды DIV:
Команда IDIV имеет следующий формат в мнемонике ассемблера: IDIV src, где src – операнд-множитель, имеющий любой режим адресации, кроме непосредственной. Эта команда во всем аналогична команде DIV, с тем лишь исключением, что ее операнды рассматриваются как числа со знаком. При этом знак остатка всегда совпадает со знаком делимого. Команда IDIV имеет следующий формат машинного кода:
Примеры использования команды IDIV:
Команда AAD не имеет операндов. Эта команда корректирует содержимое регистра AX, которое рассматривается как делимое перед выполнением деления двухразрядного числа, представленного ASCII кодами своих цифр. Перед выполнением коррекции старшие тетрады AH и AL должны быть обнулены. Команда AAD умножает содержимое регистра AH на 10 и прибавляет полученное число к содержимому AL, при этом AH обнуляется. Команда AAD изменят флаги PF, SF и ZF. Команда AAD имеет следующий формат машинного кода: Пример использования команды AAD:
Команда NEG имеет следующий формат в мнемонике ассемблера: NEG dest, где операнд dest может иметь любой режим адресации, кроме непосредственной. Эта команда изменяет знак своего операнда путем построения его дополнительного кода. Команда NEG изменят флаги AF, CF, OF, SF, PF и ZF так же, как команда SUB при вычитании операнда dest из 0. Команда NEG имеет следующий формат машинного кода:
Примеры использования команды NEG:
Команда CBW не имеет операндов. Ее выполнение заключается в том, что байт в AL расширяется до слова в AX расширением знакового бита. При этом значение регистра флагов не изменяется. Команда CBW имеет следующий формат машинного кода: Примеры использования команды CBW:
Команда CWD не имеет операндов. Ее выполнение заключается в том, что слово в AX расширяется до двойного слова в DX: AX расширением знакового бита. При этом значение регистра флагов не изменяется. Команда CWD имеет следующий формат машинного кода: Примеры использования команды CWD:
СОДЕРЖАНИЕ РАБОТЫ 1. Ознакомиться с теоретическим материалом. 2. С помощью программы debug исследовать выполнение всех арифметических команд с любым возможным типом их операндов. 3. В соответствии со своим вариантом решить поставленные задачи и с помощью DEBUG установить правильность их решения.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|