Команды пересылки данных

Команды пересылки данных на языке ассемблер

Сохрани ссылку в одной из сетей:

Для удобства практического применения и отражения их специфики команды данной группы удобнее рассматривать в соответствии с их функциональным назначением, согласно которому их можно разбить на следующие группы команд:

  • пересылки данных общего назначения
  • ввода-вывода в порт
  • работы с адресами и указателями
  • преобразования данных
  • работы со стеком

Команды пересылки данных общего назначения

К этой группе относятся следующие команды:

mov

xchg

mov – это основная команда пересылки данных. Она реализует самые разнообразные варианты пересылки.

Отметим особенности применения этой команды:

  • командой mov нельзя осуществить пересылку из одной области памяти в другую. Если такая необходимость возникает, то нужно использовать в качестве промежуточного буфера любой доступный в данный момент регистр общего назначения.
  • К примеру, рассмотрим фрагмент программы для пересылки байта из ячейки fls в ячейку fld:
    masmmodel   small.datafls     db      5fld     db      ?.codestart:…        mov     al,fls        mov     fld,al        …end     start
  • нельзя загрузить в сегментный регистр значение непосредственно из памяти. Поэтому для выполнения такой загрузки нужно использовать промежуточный объект. Это может быть регистр общего назначения или стек. Если вы посмотрите листинги 3.1 и 5.1, то увидите в начале сегмента кода две команды mov, выполняющие настройку сегментного регистра ds. При этом из-за невозможности загрузить впрямую в сегментный регистр значение адреса сегмента, содержащееся в предопределенной переменной @data, приходится использовать регистр общего назначения ax;
  • нельзя переслать содержимое одного сегментного регистра в другой сегментный регистр. Это объясняется тем, что в системе команд нет соответствующего кода операции. Но необходимость в таком действии часто возникает. Выполнить такую пересылку можно, используя в качестве промежуточных все те же регистры общего назначения. Вот пример инициализации регистра es значением из регистра ds:
  • Но есть и другой, более красивый способ выполнения данной операции — использование стека и команд push и pop:
            push    ds      ;поместить значение регистра ds в стек        pop     es      ;записать в es число из стека
  • нельзя использовать сегментный регистр cs в качестве операнда назначения. Причина здесь простая. Дело в том, что в архитектуре микропроцессора пара cs:ip всегда содержит адрес команды, которая должна выполняться следующей. Изменение командой mov содержимого регистра cs фактически означало бы операцию перехода, а не пересылки, что недопустимо.

Для двунаправленной пересылки данных применяют команду xchg.

Для этой операции можно, конечно, применить последовательность из нескольких команд mov, но из-за того, что операция обмена используется довольно часто, разработчики системы команд микропроцессора посчитали нужным ввести отдельную команду обмена xchg. Естественно, что операнды должны иметь один тип. Не допускается (как и для всех команд ассемблера) обменивать между собой содержимое двух ячеек памяти. К примеру,

        xchg    ax,bx   ;обменять содержимое регистров ax и bx        xchg    ax,word ptr [si]        ;обменять содержимое регистра ax                ;и слова в памяти по адресу в [si]

Команды ввода-вывода в порт

На уроке 6 при обсуждении вопроса о том, где могут находиться операнды машинной команды, мы упоминали порт ввода- вывода.

Посмотрите на рис. 1. На нем показана сильно упрощенная, концептуальная схема управления оборудованием компьютера.

Рис. 1. Концептуальная схема управления оборудованием компьютера

Как видно из рис. 1, самым нижним уровнем является уровень BIOS, на котором работа с оборудованием ведется напрямую через порты. Тем самым реализуется концепция независимости от оборудования. При замене оборудования необходимо будет лишь подправить соответствующие функции BIOS, переориентировав их на новые адреса и логику работы портов.

Принципиально управлять устройствами напрямую через порты несложно. Сведения о номерах портов, их разрядности, формате управляющей информации приводятся в техническом описании устройства.

Необходимо знать лишь конечную цель своих действий, алгоритм, в соответствии с которым работает конкретное устройство, и порядок программирования его портов.

То есть, фактически, нужно знать, что и в какой последовательности нужно послать в порт (при записи в него) или считать из него (при чтении) и как следует трактовать эту информацию. Для этого достаточно всего двух команд, присутствующих в системе команд микропроцессора:

in аккумулятор,номер_порта — ввод в аккумулятор из порта с номером номер_порта;

out порт,аккумулятор — вывод содержимого аккумулятора в порт с номером номер_порта. 

Команды работы с адресами и указателями памяти

При написании программ на ассемблере производится интенсивная работа с адресами операндов, находящимися в памяти. Для поддержки такого рода операций есть специальная группа команд, в которую входят следующие команды:

lea назначение,источник — загрузка эффективного адреса;

lds назначение,источник — загрузка указателя в регистр сегмента данных ds;

les назначение,источник — загрузка указателя в регистр дополнительного сегмента данных es;

lgs назначение,источник — загрузка указателя в регистр дополнительного сегмента данных gs;

lfs назначение,источник — загрузка указателя в регистр дополнительного сегмента данных fs;

lss назначение,источник — загрузка указателя в регистр сегмента стека ss.

Команда lea похожа на команду mov тем, что она также производит пересылку. Однако, обратите внимание, команда lea производит пересылку не данных, а эффективного адреса данных (то есть смещения данных относительно начала сегмента данных) в регистр, указанный операндом назначение.

Часто для выполнения некоторых действий в программе недостаточно знать значение одного лишь эффективного адреса данных, а необходимо иметь полный указатель на данные. Вы помните, что полный указатель на данные состоит из сегментной составляющей и смещения.

Все остальные команды этой группы позволяют получить в паре регистров такой полный указатель на операнд в памяти. При этом имя сегментного регистра, в который помещается сегментная составляющая адреса, определяется кодом операции. Соответственно, смещение помещается в регистр общего назначения, указанный операндом назначение.

Но не все так просто с операндом источник. На самом деле, в команде в качестве источника нельзя указывать непосредственно имя операнда в памяти, на который мы бы хотели получить указатель.

Предварительно необходимо получить само значение полного указателя в некоторой области памяти и указать в команде получения полного адреса имя этой области. Для выполнения этого действия необходимо вспомнить директивы резервирования и инициализации памяти.

При применении этих директив возможен частный случай, когда в поле операндов указывается имя другой директивы определения данных (фактически, имя переменной). В этом случае в памяти формируется адрес этой переменной.

Какой адрес будет сформирован (эффективный или полный), зависит от применяемой директивы. Если это dw, то в памяти формируется только 16-битное значение эффективного адреса, если же dd — в память записывается полный адрес.

Размещение этого адреса в памяти следующее: в младшем слове находится смещение, в старшем — 16-битная сегментная составляющая адреса.

Например, при организации работы с цепочкой символов удобно поместить ее начальный адрес в некоторый регистр и далее в цикле модифицировать это значение для последовательного доступа к элементам цепочки. В листинге 1 производится копирование строки байт str_1 в строку байт str_2.

В строках 12 и 13 в регистры si и di загружаются значения эффективных адресов переменных str_1 и str_2.

В строках 16 и 17 производится пересылка очередного байта из одной строки в другую. Указатели на позиции байтов в строках определяются содержимым регистров si и di. Для пересылки очередного байта необходимо увеличить на единицу регистры si и di, что и делается командами сложения inc (строки 18, 19). После этого программу необходимо зациклить до обработки всех символов строки. 

Листинг 1. Копирование строки

Необходимость использования команд получения полного указателя данных в памяти, то есть адреса сегмента и значения смещения внутри сегмента, возникает, в частности, при работе с цепочками.

В строке 14 листинга 1 в двойном слове full_pnt формируются сегментная часть адреса и смещение для переменной str_1. При этом 2 байта смещения занимают младшее слово full_pnt, а значение сегментной составляющей адреса — старшее слово full_pnt. В строке 14 командой les эти компоненты адреса помещаются в регистры bx и es. 

Источник: http://works.doklad.ru/view/Dz05LRR9RAw.html

Системный интегратор

Команды MOV, MOVW, LD, LDI, LDD, LDS, ST, STD, STS, LPM, SPM, IN, OUT, PUSH и POP позволяют пересылать данные между регистрами общего назначения (РОН) и регистрами ввода/вывода (РВВ), памятью данных (ОЗУ), памятью программ FLASH, стеком.

Копирует содержимое регистра Rr в регистр Rd

MOVW Rd, Rr

Копирует содержимое регистровой пары Rr+1:Rr в регистровую пару Rd+1:Rd. Rd и Rr четные регистры.

Загрузка константы в РОН

LDI Rd, K

Загружает 8-битное число в РОН. Работает только со старшей половиной регистров общего назначения.

Загрузка в РОН из ОЗУ

LD Rd, X | LD Rd,Y | LD Rd, Z

Косвенное чтение. Загружает в РОН один байт из ОЗУ по адресу который содержится в индексном регистре.

LD Rd, X+ | LD Rd, Y+ | LD Rd, Z+

Косвенное чтение с постинкрементом. Загружает в РОН один байт из ОЗУ по адресу который содержится в индексном регистре. После пересылки байта содержимое индексного регистра увеличивается на 1.

LD Rd, -X | LD Rd, -Y | LD Rd, -Z

Косвенное чтение с преддекрементом. Загружает в РОН один байт из ОЗУ по адресу который содержится в индексном регистре, причем до пересылки байта содержимое индексного регистра уменьшается на 1.

LDD Rd, Y+q | LDD Rd, Z+q

Косвенное относительное чтение. Загружает в РОН один байт из ОЗУ по адресу который вычисляется как сумма содержимого индексного регистра и константы q.

LDS Rd, k

Непосредственное чтение. Загружает в РОН один байт из ОЗУ по адресу заданному двухбайтовой константой k.

Запись в ОЗУ из РОН

ST X, Rr | ST Y, Rr | ST Z, Rr

Косвенная запись. Сохраняет содержимое РОН в памяти данных по адресу который содержится в индексном регистре.

ST X+, Rr | ST Y+, Rr | ST Z+, Rr

Косвенная запись с постинкрементом. Сохраняет содержимое РОН в памяти данных по адресу который содержится в индексном регистре. После пересылки байта содержимое индексного регистра увеличивается на 1.

ST -X, Rr | ST -Y, Rr | ST -Z, Rr

Косвенная запись с преддекрементом. Сохраняет содержимое РОН в памяти данных по адресу который содержится в индексном регистре, причем до пересылки байта содержимое индексного регистра уменьшается на 1.

STD Y+q, Rr | LDD Z+q, Rr

Косвенная относительная запись. Сохраняет содержимое РОН в памяти данных по адресу который вычисляется как сумма содержимого индексного регистра и константы q.

STS k, Rr

Непосредственная запись. Сохраняет содержимое РОН в памяти данных по адресу заданному двухбайтовой константой k.

Чтение и запись Flash памяти

LPM

Загружает один байт из адресного пространства памяти программ в регистр общего назначения R0. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z.

LPM Rd, Z

Загружает один байт из адресного пространства памяти программ в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z.

LPM Rd, Z+

Загружает один байт из адресного пространства памяти программ в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z. После пересылки байта содержимое регистра Z увеличивается на 1.

SPM

Эта команда может выполнять стирание отдельной страницы памяти программ, запись страницы памяти программ, а также изменение ячеек защиты блока загрузчика.

Чтение и запись РВВ

IN Rd, A

Пересылка значения из РВВ в РОН.

OUT A, Rr

Пересылка значения из РОН в РВВ.

Стековые операции

PUSH Rr

Сохранение байта в стеке.

POP Rd

Извлечение байта из стека.

Источник: http://integrator.adior.ru/index.php/proshivki/455

Большая Энциклопедия Нефти и Газа

Cтраница 1

Команды пересылки данных осуществляют обмен данными между регистрами или между регистрами и памятью. Основные команды этой группы имеют обозначение MOV или MVI.

По команде MOV происходит пересылка содержимого одного регистра в другой, или содержимого регистра в память, или содержимого памяти в регистр. Например, по команде MOV В, Н происходит передача числа из регистра Н в регистр В.

По команде MVI осуществляется непосредственная запись числа в – аккумулятор, регистр или память. Например, команда MVI В, 35 позволяет непосредственно записать число 35 ( в шестнадцатеричном коде) в регистр В.  [1]

Команды пересылки данных из одной области памяти в другую MVC, MVN, MVZ и MV1 похожих команд в других классах не имеют.  [2]

Команды пересылки данных из одной области памяти в другую МУС, MVN, MVZ и MVI похожих команд в других классах не имеют.  [3]

Команды пересылок данных осуществляют пересылки байтов и слов между адресным пространством и регистрами канала, а также между адресными пространствами, загружают данные, непосредственно представленные в команде.  [5]

Команды пересылки данных осуществляют обмен данными и адресами между регистрами и ячейками памяти или портами ввода-вывода. В табл. 3.3 эти команды разделены на четыре подгруппы: команды общего назначения, команды ввода-вывода, команды пересылки адреса и команды пересылки флагов.  [6]

Пример описания команды.  [7]

Команды пересылки данных, возможно, следовало бы называть командами копирования, потому что практически они осуществляют перемещение именно копии данных.

Так, например, одна из этих команд перемещает данные из аккумулятора в область памяти. После выполнения данной команды и в области памяти, и в аккумуляторе находятся одни и те же данные.

Очень редко в ходе выполнения команды пересылки данных разрушаются данные, находящиеся в исходном месте.  [8]

Команды пересылки данных предназначены для пересылки содержимого операнда-источника на место операнда-приемника. Существует четыре группы команд пересылки данных: общего назначения, ввода / вывода, логического адреса, признаков.  [9]

Команды пересылки данных не требуют выполнения никаких операций над операндами. Источником и приемником могут быть внутренние регистры процессора, ячейки памяти или устройства ввода / вывода. АЛУ в данном случае не используется.  [10]

Команды пересылки данных занимают очень важное место в системе команд любого процессора.  [11]

Какие функции выполняюткоманды пересылки данных. Содержимое каких областей участвует в их реализации.  [12]

Код операции вкоманде пересылки данных задает источник данных и способ адресации. Адресация может быть одного из трех видов: непосредственная, прямая и косвенная.  [13]

Третья группа команд – команды внутренней пересылки данных – дает возможность перемещать целиком слова или байты при требуемых в большинстве программ внутренних пересылках данных. Кроме того, команды этого типа позволяют выполнять сдвиговые операции над битами одного слова.  [14]

Как и любая другая команда, команда пересылки данных состоит из двух частей: кода операции и адресной части. Во всех командах пересылки данных должны быть указаны как источник, так и место назначения данных.  [15]

Страницы:      1    2    3    4

Источник: http://www.ngpedia.ru/id96226p1.html

Команды пересылки данных FPU

Источник: https://infopedia.su/11xc459.html

Команды пересылки данных – pdf

СИСТЕМА КОМАНД МИКРОПРОЦЕССОРА 1 2 Классификация процессоров по типу системы команд ПРОЦЕССОР Процессор – это важнейшая часть любой компьютерной системы, именно на нём и происходит вся вычислительная деятельность

Подробнее

Лабораторная работа 3 РАБОТА С ФАЙЛАМИ В MS-DOS Цели работы: ознакомиться с основными функциями работы файлами. Ход выполнения лабораторной работы должен быть отражен в отчете. Отчет должен содержать титульный

Подробнее

Министерство образования и науки Российской Федерации Федеральное агентство по образованию Южно-Уральский государственный университет Кафедра «Автоматика и управление» 004.43 В858 Вставская Е.В. ПРОГРАММИРОВАНИЕ

Подробнее

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

Подробнее

Защищённый режим. Глава 1. Обзор режимов микропроцессоров IA-32. Процессоры IA-32 могут работать в четырёх режимах: режиме реальных адресов, защищённом режиме, режиме виртуального процессора 8086 и режиме

Подробнее

Лабораторная работа 3 Операции ввода/вывода в Ассемблере Цель работы 1. Изучение способов ввода по прерыванию INT 21H и 16H 2. Изучение процедур вывода по прерыванию INT 21H 3. Ввод/вывод по прерыванию

Подробнее

Глава 3 Введение в язык ассемблера В этой главе…! Представление данных! Основы языка ассемблера! Разработка программы на языке ассемблера! Работа в DOS под Windows NT! Инструментальные средства! Пример

Подробнее

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ВОЛОГОДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ КАФЕДРА «УПРАВЛЯЮЩИЕ И ВЫЧИСЛИТЕЛЬНЫЕ СИСТЕМЫ» ПРОГРАММИРОВАНИЕ НА АССЕМБЛЕРЕ Методические указания к лабораторным

Подробнее

М.Ю. Смоленцев Программирование на языке Ассемблера для 32/64-разрядных микропроцессоров семейства 80×86 Учебное пособие часть 2 Иркутск 2009 УДК 004.43 ББК 32.973-018.7 С 50 С 50 Смоленцев М.Ю. Программирование

Подробнее

МОСКОВСКИЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ (МАДИ) К.Н. МЕЗЕНЦЕВ ИСПОЛЬЗОВАНИЕ ЯЗЫКА АССЕМБЛЕРА И ЯЗЫКА СЦЕНАРИЕВ УЧЕБНОЕ ПОСОБИЕ МОСКОВСКИЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ ГОСУДАРСТВЕННЫЙ

Подробнее

Протокол обмена счетчиков модели ГАММА 3 (И2). 1. Интерфейсы счетчиков. Счетчики ГАММА 3 имеют 2 интерфейса: RS-485 и оптический интерфейс (оптопорт). Интерфейсы мультиплексируемые и не могут работать

Подробнее

Средства BIOS Функции DOS вывода на экран позволяют перенаправлять вывод в файл, но не позволяют вывести текст в любую позицию экрана и не позволяют изменить цвет текста. DOS предполагает, что для более

Подробнее

Министерство образования и науки Российской Федерации Государственное образовательное учреждение КАЗАНСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ им. А.Н.ТУПОЛЕВА Б.А. Старостин Специальные

Подробнее

Рекомендации по составлению алгоритма программы ввода/вывода Целью лабораторных работ по курсу «Цифровые процессоры и обработка сигналов» («ЦПиОС») является разработка программы для процессора TMS320C4x

Подробнее

Процессы, системные вызовы rkondakov@ya.ru Кондаков Р.В. Стандарты SUS (Single UNIX Specification) /bin/sh /usr/bin/vi /usr/bin/c99 «POSIX is an acronym for Portable Operating System Interface» ( http://www.opengroup.org/austin/papers/posix_faq.html)

Подробнее

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ТАГАНРОГСКИЙ ПОЛИТЕХНИЧЕСКИЙ ИНСТИТУТ – ФИЛИАЛ ФЕДЕРАЛЬНОГО ГОСУДАРСТВЕННОГО БЮДЖЕТНОГО ОБРАЗОВАТЕЛЬНОГО УЧРЕЖДЕНИЯ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

Подробнее

1 УДК 004.42 UDC УДК 004.42 КОМПЛЕКСНАЯ КОЛЬЦЕВАЯ СИСТЕМА ЗАЩИТЫ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ОТ НЕЛИЦЕНЗИОННОГО ИСПОЛЬЗОВАНИЯ Частикова Вера Аркадьевна к.т.н., доцент COMPREHENSIVE RING SYSTEM OF PROGRAM

Подробнее

Лекции по ЭВМ Пронкин Ю. Н. 2010 Конспект лекций Ю. Н. Пронкина для студентов 1-2 курсов механико-математического факультета МГУ, отделения механики. Составили студенты механико-математического факультета

Подробнее

Описание протоколов обмена верхнего уровня с приборами «Dymetic-5121», «Метран-333» 1. Введение Прибор обеспечивает связь на физическом уровне по асинхронным линиям связи в полудуплексном режиме «Мультиточка»

Подробнее

Программные уязвимости на стыке аппаратуры и программного обеспечения Лекция 1. Исполнение процессов в Linux, binutils, gdb, трассировка программ. IA 32 char * buf = “x90x90x90x90x90x90x90x90x90x90”

Подробнее

Задачи для самостоятельного решения Звездочкой помечены задачи повышенного уровня сложности. Команда пересылки 1. Даны две переменных а (тип integer) и b (тип byte). Присвоить b значение а. Вывести на

Подробнее

Работа с файлами Программа во время работы хранит данные в оперативной памяти. Эти данные представлены в виде переменных, структур, массивов и т.д. Данные могут поступать из за пределов программы. Процесс

Подробнее

Оглавление Предисловие… 1 Несколько советов… 2 Ответы на некоторые вопросы… 3 ЧАСТЬ I. ЗНАКОМЬТЕСЬ: АССЕМБЛЕР… 7 Глава 1. Первая программа… 9 1.1. Шестнадцатеричная система счисления… 9 1.2.

Подробнее

Блочный ввод/вывод Блочный ввод/вывод используется для сохранения данных, с которыми позже будет работать та же самая программа. Этот способ ввода/вывода используется только с двоичными файлами. В процессе

Подробнее

Компьютерные сети ПРАКТИЧЕСКАЯ РАБОТА 1.3 НАСТРОЙКА ПРОТОКОЛОВ TCP/IP В ОС WINDOWS Цель работы: 1. Изучить порядок конфигурирования сетевых протоколов в ОС Windows. 2. Изучить принципы адресации компьютеров

Подробнее

(Продолжение. Начало 4 11/2001) Микроконтроллеры? Это же просто! Сопряжение со светодиодными индикаторами типа АЛС318 АЛС318 наиболее удобный для рассмотрения многоразрядный 7-сегментный светодиодный индикатор.

Подробнее

Carnegie Mellon Машинный уровень 3 Основы информатики. Архитектура ЭВМ и язык Ассемблера goo.gl/x7evf На основе CMU 15-213/18-243: IntroducPon to Computer Systems goo.gl/tddvv Лекция 6, 18 марта, 2013

Подробнее

Учреждение образования «Могилевский государственный университет продовольствия» ПРОГРАММА ВСТУПИТЕЛЬНОГО ИСПЫТАНИЯ по микропроцессорной технике для абитуриентов, на основе среднего специального образования

Подробнее

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ, МЕХАНИКИ И ОПТИКИ Ю.В. Китаев ЛАБОРАТОРНЫЕ

Подробнее

ББК 32.973-8 УДК 4.432 Бурдаев О. В., Иванов М. А., Тетерин И. И. Ассемблер в задачах защиты информации / Под ред. И. Ю. Жукова – М.: КУДИЦ- ОБРАЗ, 22. – 32 с. ISBN 5-93378-38-3 В книге рассмотрен язык

Подробнее

Администрирование локальных сетей Тема 5. Протоколы семейства TCP/IP Основные вопросы лекции Сетевой уровень взаимодействия. Маршрутизируемые протоколы, их преимущества. Структура стека протоколов TCP/IP.

Подробнее

ОБРАЗ МЫШЛЕНИЯ ДИЗАССЕМБЛЕР IDA Pro ТОМ I ОПИСАНИЕ ФУНКЦИЙ ВСТРОЕННОГО ЯЗЫКА IDA Pro Аннотация Подробный справочник по функциям встроенного языка, интерфейсу и архитектуре дизассемблера IDA Pro 4.01 с

Подробнее

ЛАБОРАТОРНАЯ РАБОТА 2. «ИЗУЧЕНИЕ ОПТИМИЗИРУЮЩЕГО КОМПИЛЯТОРА» Цели работы 1. Изучение основных функций оптимизирующего компилятора, и некоторых примеров оптимизирующих преобразований и уровней оптимизации.

Подробнее

Лабораторная работа 2 Разработка и отладка алгоритмов и программ с использованием указателей 1. ЦЕЛЬ РАБОТЫ: приобретение практических навыков работы с указателями. 2. ОСНОВНЫЕ ПОНЯТИЯ Указатель это переменная,

Подробнее

АССЕМБЛЕР И ПРОГРАММИРОВАНИЕ ДЛЯ IBM PC Под редакцией Еpшова В.Г. ОГЛАВЛЕНИЕ ========== Предисловие переводчика Предисловие 1. Введение в семейство персональных компьютеров IBM PC Введение Биты и байты

Подробнее

Сергей Фельдман Cистемное программирование на персональном компьютере издание второе, дополненное и исправленное Рекомендуется в качестве дополнительного учебного пособия студентам высших учебных заведений

Подробнее

старые антиотладочные приемы на новый лад крис касперски ака мыщъх новое, как говориться, это хорошо забытое старое. антиотладочные приемы времен ms-dos и debug.com возвращаются, чтобы снова работать в

Подробнее

РАБОТА 2 ЗАПИСЬ И ВЫПОЛНЕНИЕ ПРОСТЫХ ПРОГРАММ Цель работы. 1. Знакомство с форматом команд и этапами их выполнения. 2. Изучение команд пересылки данных и арифметических команд. 3. Исследование простейших

Подробнее

противодействие дизассемблеру во сне и наяву или семь советов начинающему программисту крис касперски ака мыщъх, no-email введение чтобы выжить в этом агрессивном мире и защитить свою программу от взлома,

Подробнее

Министерство образования Республики Беларусь Учреждение образования «Полоцкий государственный университет» МЕТОДИЧЕСКИЕ УКАЗАНИЯ к лабораторным работам по дисциплине «Низкоуровневое программирование» для

Подробнее

секреты покорения эльфов крис касперски ака мыщъх, no e-mail если загрузить исполняемый файл в hex-редактор, мы увидим цифры. много цифр. можно нажать на ноль, наслаждаясь как машинный код стирается под

Подробнее

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное автономное учреждение высшего профессионального образования “Казанский (Приволжский) федеральный университет” Институт

Подробнее

1 Вопросы к тесту по курсу «Архитектура ЭВМ и систем» (331) 1. Научные и технические предпосылки создания ЭВМ (16) 1. Определите понятия: Вычислительная система, Архитектура ЭВМ (системы), Система. 2.

Подробнее

Список возможных ошибок Windows при подключении к VPN-серверу СФУ. Ошибка 602 Ошибка 602: Указанный порт уже открыт. Возникает в случае неправильной настройки параметров подключения или из-за проблем VPN-клиента

Подробнее

Санкт-Петербургский государственный инженерно-экономический университет. Кафедра вычислительных систем и программирования Основы исследование безопасности программного обеспечения Составитель: Федоров

Подробнее

Приведение адресного пространства операндов контроллера Delta серии к адресному пространству протокола Modbus. Оглавление Адресация регистров Modbus панели оператора серии LSIT 07… 2 Соответствие операндов

Подробнее

Лекция 4 IP-сети Компьютерные сети Контрольные вопросы Формат кадра Ethernet Функции концентратора, коммутатора Какую топологию физическую и логическую представляет собой сеть, построенная на витой паре

Подробнее

Управление памятью Управление памятью с точки зрения процесса Адресное пространство процесса Управление адресным пространством Отображаемые в память файлы Динамические библиотеки Адресное пространство

Подробнее

Теория и технология программирования Основы программирования на Лекция 13. Области действия и времена жизни Глухих Михаил Игоревич, к.т.н., доц. mailto: glukhikh@mail.ru Основные понятия Область действия

Подробнее

Работа с файлами в библиотеке Qt Типовая последовательность работы с файлом Стандартный диалог выбора файла Класс файла Потоки данных 1 Использование перегруженных операций для работы с потоками Типовая

Подробнее

186 Секция 6. Компьтерная инженерия УДК 004.052.4 Мохначёв В.В., Елагин И.А., Теплинский С.В. Донецкий национальный технический университет кафедра компьютерной инженерии E-mail: vlad230596@mail.ru, progressifff@gmail.com

Подробнее

Операционные системы Лекция 11 Файловые системы. Файлы. Каталоги. 11.1 Файлы Требования к хранению информации: возможность хранения больших объемов данных информация должна сохраняться после прекращения

Подробнее

Глава 4. Форматы команд и данных В этой главе вводятся основные определения и рассматриваются важные базовые понятия, которые будут необходимы для дальнейшего изучения архитектуры ЭВМ. С этой целью будут

Подробнее

Ошибки подключения к Интернету и их решение. Windows XP Ошибка 691 – «Доступ запрещен, поскольку такое имя пользователя или пароль недопустимы в этом домене.» Решение проблемы: Убедитесь, что при вводе

Подробнее

Процессы и потоки Операционные системы Лекция 2 Ульяновск, УлГТУ, кафедра «Информационные системы» 1 / 12 Модель процесса Четыре программы, работающие в многозадачном режиме а); концептуальная модель четырех

Подробнее

Государственный комитет Российской федерации по высшему образованию Ульяновский политехнический институт ПРОГРАММИРОВАНИЕ НА АССЕМБЛЕРЕ ПЕРСОНАЛЬНЫХ ЭВМ КЛАССА IBM/PC-XT В ОПЕРАЦИОННОЙ СИСТЕМЕ MS/DOS Сборник

Подробнее

1. Сеть ARPANET появилась в году. 1959 1969 1979 2. Интернет – это сеть. локальная региональная глобальная корпоративная 3. Возможность использования сетевых ресурсов и предоставление ресурсов собственного

Подробнее

Modbus и DNP3: Сравнение Эффективности Коммуникаций Обзорная Статья Control Microsystems Сентябрь 2009 Целью данной статьи является сравнение эффективности двух SCADA протоколов: Modbus и DNP3. Используя

Подробнее

Windows 2000 / 2003 / 2008 / 7 Windows 2000 32-битовая многозадачная операционная система для микропроцессоров типа Intel (продолжает линию NT). Основные цели системы: переносимость безопасность соответствие

Подробнее

Тема 3. Индикация Урок 3.1. Сегментный светодиодный индикатор 3.1.1. Устройство сегментного индикатора Мы уже познакомились со светодиодом одним из наиболее часто используемых индикаторов. Обычным светодиодом

Подробнее

техника написания переносимого shell-кода крис касперски ака мыщъх shell-код никогда заранее не знает куда попадет, поэтому он должен уметь выживать в любых условиях, автоматически адаптируясь под конкретную

Подробнее

Питер Абель АССЕМБЛЕР И ПРОГРАММИРОВАНИЕ ДЛЯ IBM PC Технологический институт Британская Колумбия Peter Abel IBM PC ASSEMBLER LANGUAGE AND PROGRAMMING British Columbia Institute of Technology ОГЛАВЛЕНИЕ

Подробнее

1. Установка драйвера терминала. Включите компьютер и дождитесь окончания загрузки операционной системы. Перед тем, как подключать терминал к Вашему компьютеру, проведите процедуру установки программного

Подробнее

Имена, связывание, проверка типов и области действия Введение Императивные языки абстракция архитектуры фон Неймана Память Процессор Переменные и их атрибуты Область действия, срок жизни, проверка типов,

Подробнее

СПЕЦПРИБОР ОКП 43 7132 ПРИБОР ПОЖАРНЫЙ УПРАВЛЕНИЯ ППУ0149-1-1 «ЯХОНТ-ППУ» Описание протокола обмена по интерфейсу RS485 СПР.425532.001 Д1 г.казань 2009 1 СПР.425532.001 Д1 1. Общие положения. Протокол

Подробнее

Наборы средств для взлома 325 Наборы средств для взлома П оследняя глава книги посвящена вопросу о получении полного контроля над компьютером. Полный контроль это когда хакер на другой стороне планеты

Подробнее

КУРС «ОО ПК и сетей» Лекция Персональный компьютер IBM PC (Принципы выполнения программ). 29 ноября 2012 г. Архитектура IBM PC 1 Intel 4004 29 ноября 2012 г. Архитектура IBM PC 2 Структурная схема микропроцесс

Подробнее

Источник: https://docplayer.ru/46761266-Komandy-peresylki-dannyh.html

FE23 – Справочник x86 – Команды пересылки данных

Источник: http://looch-disasm.narod.ru/refe27.htm

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}
");let k=document.querySelector(".flat_pm_modal[data-id-modal=\""+a.ID+"\"]");if(-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(k,d):jQuery(k).html(b+d),"px"==a.how.popup.px_s)e.bind(h,()=>{e.scrollTop()>a.how.popup.after&&(e.unbind(h),f.unbind(i),j())}),void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{e.unbind(h),f.unbind(i),j()});else{let b=setTimeout(()=>{f.unbind(i),j()},1e3*a.how.popup.after);void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{clearTimeout(b),f.unbind(i),j()})}f.on("click",".flat_pm_modal .flat_pm_crs",()=>{jQuery.arcticmodal("close")})}if(void 0!==a.how.outgoing){let b,c="0"==a.how.outgoing.indent?"":" style=\"bottom:"+a.how.outgoing.indent+"px\"",e="true"==a.how.outgoing.cross?"":"",f=jQuery(window),g="scroll.out"+a.ID,h=void 0===flatPM_getCookie("flat_out_"+a.ID+"_mb")||"false"!=flatPM_getCookie("flat_out_"+a.ID+"_mb"),i=document.createElement("div"),j=jQuery("body"),k=()=>{void 0!==a.how.outgoing.cookie&&"false"==a.how.outgoing.cookie&&h&&(jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show"),j.on("click",".flat_pm_out[data-id-out=\""+a.ID+"\"] .flat_pm_crs",function(){flatPM_setCookie("flat_out_"+a.ID+"_mb",!1)})),(void 0===a.how.outgoing.cookie||"false"!=a.how.outgoing.cookie)&&jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show")};switch(a.how.outgoing.whence){case"1":b="top";break;case"2":b="bottom";break;case"3":b="left";break;case"4":b="right";}jQuery("body > *").eq(0).before("
"+e+"
");let m=document.querySelector(".flat_pm_out[data-id-out=\""+a.ID+"\"]");-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(m,d):jQuery(m).html(e+d),"px"==a.how.outgoing.px_s?f.bind(g,()=>{f.scrollTop()>a.how.outgoing.after&&(f.unbind(g),k())}):setTimeout(()=>{k()},1e3*a.how.outgoing.after),j.on("click",".flat_pm_out .flat_pm_crs",function(){jQuery(this).parent().removeClass("show").addClass("closed")})}countMode&&(flat_count["block_"+a.ID]={},flat_count["block_"+a.ID].count=1,flat_count["block_"+a.ID].click=0,flat_count["block_"+a.ID].id=a.ID)}catch(a){console.warn(a)}}function flatPM_start(){let a=flat_pm_arr.length;if(0==a)return flat_pm_arr=[],void jQuery(".flat_pm_start, .flat_pm_end").remove();flat_body=flat_body||jQuery("body"),!flat_counter&&countMode&&(flat_counter=!0,flat_body.on("click","[data-flat-id]",function(){let a=jQuery(this),b=a.attr("data-flat-id");flat_count["block_"+b].click++}),flat_body.on("mouseenter","[data-flat-id] iframe",function(){let a=jQuery(this),b=a.closest("[data-flat-id]").attr("data-flat-id");flat_iframe=b}).on("mouseleave","[data-flat-id] iframe",function(){flat_iframe=-1}),jQuery(window).on("beforeunload",()=>{jQuery.isEmptyObject(flat_count)||jQuery.ajax({async:!1,type:"POST",url:ajaxUrlFlatPM,dataType:"json",data:{action:"flat_pm_ajax",data_me:{method:"flat_pm_block_counter",arr:flat_count}}})}).on("blur",()=>{-1!=flat_iframe&&flat_count["block_"+flat_iframe].click++})),flat_userVars.init();for(let b=0;bflat_userVars.textlen||void 0!==a.chapter_sub&&a.chapter_subflat_userVars.titlelen||void 0!==a.title_sub&&a.title_subc&&cc&&c>d&&(b=flatPM_addDays(b,-1)),b>e||cd||c-1!=flat_userVars.referer.indexOf(a))||void 0!==a.referer.referer_disabled&&-1!=a.referer.referer_disabled.findIndex(a=>-1!=flat_userVars.referer.indexOf(a)))&&(c=!0),c||void 0===a.browser||(void 0===a.browser.browser_enabled||-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser))&&(void 0===a.browser.browser_disabled||-1==a.browser.browser_disabled.indexOf(flat_userVars.browser)))){if(c&&void 0!==a.browser&&void 0!==a.browser.browser_enabled&&-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser)&&(c=!1),!c&&(void 0!==a.geo||void 0!==a.role)&&(""==flat_userVars.ccode||""==flat_userVars.country||""==flat_userVars.city||""==flat_userVars.role)){flat_pm_then.push(a),flatPM_setWrap(a),flat_body.hasClass("flat_pm_block_geo_role")||(flat_body.addClass("flat_pm_block_geo_role"),flatPM_ajax("flat_pm_block_geo_role")),c=!0}c||(flatPM_setWrap(a),flatPM_next(a))}}}let b=jQuery(".flatPM_sticky");b.each(function(){let a=jQuery(this),b=a.data("height")||350,c=a.data("top");a.wrap("
");let d=a.parent()[0];flatPM_sticky(this,d,c)}),debugMode||countMode||jQuery("[data-flat-id]:not([data-id-out]):not([data-id-modal])").contents().unwrap(),flat_pm_arr=[],jQuery(".flat_pm_start, .flat_pm_end").remove()}

1)

 Команда: FLD источник
 Назначение: Загрузить вещественное число в стек

Команда помещает в стек содержимое источника (32-, 64- или 80-битная переменная или ST(n)). Команда FLD ST(0) делает копию вершины стека.

2)

 Команда: FST приемник
 Назначение: Скопировать вещественное число из стека
 Команда: FSTP приемник
 Назначение: Считать вещественное число из стека

Копирует ST(0) в приемник (32- или 64-битную переменную или пустой ST(n) в случае FST; 32-, 64- или 80-битную переменную или пустой ST(n) в случае FSTP). FSTP после этого выталкивает число из стека (помечает ST(0) как пустой).

3)

 Команда: FILD источник
 Назначение: Загрузить целое число в стек

Преобразовывает целое число со знаком из источника (16-, 32- или 64-битная переменная) в вещественный формат и помещает в вершину стека.

4)

 Команда: FIST приемник
 Назначение: Скопировать целое число из стека
 Команда: FISTP приемник
 Назначение: Считать целое число из стека

Преобразовывает число из вершины стека в целое со знаком и записывает его в приемник (16- или 32-битная переменная для FIST; 16-, 32- или 64-битная переменная для FISTP). FISTP после этого выталкивает число из стека (помечает ST(0) как пустой).

5)

 Команда: FXCH приемник
 Назначение: Обменять местами два регистра стека

Обмен местами содержимого регистра ST(0) и приёмника (регистр ST(n)). Если операнд не указан, обменивается содержимое ST(0) и ST(1).

Базовая арифметика FPU

Сопроцессор использует шесть основных типов арифметических команд:

Fxxx Используются ST(1) и ST(0). Первый операнд берется из верхушки стека (источник), второй – следующий элемент стека. Результат выполнения команды записывается в стек.
Fxxx память Источник берется из памяти, приемником является верхушка стека ST(0). Указатель стека ST не изменяется, команда действительна только для операндов с одинарной и двойной точностью.
FIxxx память Аналогично предыдущему типу команды, но операндами могут быть 16- или 32-битовые целые числа.
пр, ист. Fxxx ST, ST(i) Для этого типа регистр ST(i) является источником, а ST(0) – верхушка стека – приемником. Указатель стека не изменяется.
Fxxx ST(i), ST Для этого типа регитр ST(0) является источником, а ST(i) – приемником. Указатель стека не изменяется.
FxxxP ST(i), ST Регистр ST(i) – приемник, регистр ST(0) – источник. После выполнения команды источник ST(0) извлекается из стека.

Строка “xxx” может принимать следующие значения:

ADD Сложение

SUB Вычитание

SUBR Обратное вычитание, уменьшаемое и вычитаемое

меняются местами

MUL Умножение

DIV Деление

DIVR Обратное деление, делимое и делитель меняются местами

1)

 Команда: FADD приемник,источник
 Назначение: Сложение вещественных чисел
 Команда: FADDP приемник,источник
 Назначение: Сложение вещественных чисел с выталкиванием из стека
 Команда: FIADD источник
 Назначение: Сложение целых чисел

Команда выполняет сложение источника и приемника и помещает результат в приемник. Команда FADDP после этого выталкивает ST(0) из стека (помечает ST(0) как пустой и увеличивает ТОР на один). Команды сложения могут принимать следующие формы:

· FADD источник, когда источником является 32- или 64-битная переменная, а приемником — ST(0);

· FADD ST(0),ST(n), FADD ST(n),ST(0), FADDP ST(n),ST(0), когда источник и приемник заданы явно в виде регистров FPU;

· FADD без операндов — эквивалентно FADD ST(0),ST(1); FADDP без операндов — эквивалентно FADDP ST(1),ST(0);

· FIADD источник, когда источником является 16- или 32-битная переменная, содержащая целое число, а приемником — ST(0).

2)

 Команда: FSUB приемник,источник
 Назначение: Вычитание вещественных чисел
 Команда: FSUBP приемник,источник
 Назначение: Вычитание с выталкиванием из стека
 Команда: FISUB источник
 Назначение: Вычитание целых чисел

Выполняет вычитание источника из приемника и сохраняет результат в приемнике. Команда FSUBP после этого выталкивает ST(0) из стека (помечает ST(0) как пустой и увеличивает ТОР на один). Команды вычитания могут принимать следующие формы:

· FSUB источник, когда источником является 32- или 64-битная переменная, содержащая вещественное число, а приемником — ST(0);

· FSUB ST(0),ST(n), FSUB ST(n),ST(0), FSUBP ST(n),ST(0), когда источник и приемник заданы явно в виде регистров FPU;

· FSUB без операндов — эквивалентно FSUB ST(0),ST(1); FSUBP без операндов — эквивалентно FSUBP ST(1),ST(0);

· FISUB источник, когда источником является 16- или 32-битная переменная, содержащая целое число, а приемником — ST(0).

Если один из операндов — бесконечность, результат — бесконечность соответствующего знака. Если оба операнда — бесконечности одного знака, результат не определен (происходит исключение «недопустимая операция»).

3)

 Команда: FSUBR приемник,источник
 Назначение: Обратное вычитание вещественных чисел
 Команда: FSUBRP приемник,источник
 Назначение: Обратное вычитание с выталкиванием
 Команда: FISUBR источник
 Назначение: Обратное вычитание целых чисел

Команды эквивалентны FSUB/FSUBP/FISUB , но выполняют вычитание приемника из источника, а не источника из приемника.

4)

 Команда: FMUL приемник,источник
 Назначение: Умножение вещественных чисел
 Команда: FMULP приемник,источник
 Назначение: Умножение с выталкиванием из стека
 Команда: FIMUL источник
 Назначение: Умножение целых чисел

Выполняет умножение источника и приемника и помещает результат в приемник. Команда FMULP после этого выталкивает ST(0) из стека (помечает ST(0) как пустой и увеличивает ТОР на один). Команды умножения могут принимать следующие формы:

· FMUL источник, когда источником является 32- или 64-битная переменная, а приемником — ST(0);

· FMUL ST(0),ST(n), FMUL ST(n),ST(0), FMULP ST(n),ST(0), когда источник и приемник заданы явно в виде регистров FPU;

· FMUL без операндов — эквивалентно FMUL ST(0),ST(1); FMULP без операндов — эквивалентно FMULP ST(1),ST(0);

· FIMUL источник, когда источником является 16- или 32-битная переменная, содержащая целое число, а приемником — ST(0).

5)

 Команда: FDIV приемник,источник
 Назначение: Деление вещественных чисел
 Команда: FDIVP приемник,источник
 Назначение: Деление с выталкиванием из стека
 Команда: FIDIV источник
 Назначение: Деление целых чисел

Выполняет деление приемника на источник и сохраняет результат в приемнике. Команда FDIVP после этого выталкивает ST(0) из стека (помечает ST(0) как пустой и увеличивает ТОР на один). Команды могут принимать следующие формы:

· FDIV источник, когда источником является 32- или 64-битная переменная, содержащая вещественное число, а приемником — ST(0);

· FDIV ST(0),ST(n), FDIV ST(n),ST(0), FDIVP ST(n),ST(0), когда источник и приемник заданы явно в виде регистров FPU;

· FDIV без операндов — эквивалентно FDIV ST(0),ST(1); FDIVP без операндов — эквивалентно FDIVP ST(1),ST(0);

· FIDIV источник, когда источником является 16- или 32-битная переменная, содержащая целое число, а приемником — ST(0).

6)

 Команда: FCHS
 Назначение: Изменить знак

Изменяет знак ST(0), превращая положительное число в отрицательное, и наоборот.

7)

 Команда: FRNDINT
 Назначение: Округлить до целого

Округляет значение ST(0) до целого числа в соответствии с режимом округления, заданным битами RC.

8)

 Команда: FSCALE
 Назначение: Масштабировать по степеням двойки

Умножает ST(0) на два в степени ST(1) и записывает результат в ST(0).Выполняет вычисление:

ST(0)= ST(0)*2ST(1).

Значение ST(1) предварительно округляется в сторону нуля до целого числа.

9)

 Команда: F2XM1
 Назначение: Вычисление 2x-1

Команда F2XM1 возводит 2 в степень X, но только если X меньше или равен 1/2, то есть команда возводит 2 в степень, равную ST(0), и вычитает 1. Результат сохраняется в ST(0). Значение ST(0) должно лежать в пределах от -0,5 до 0.5, иначе результат не определен.

ST(0)=2ST(0) -1; -0,50.965784284662087/2

F2XM1 ; возводит 2 в степень, равную ST(0), и вычитает 1.

; Результат сохраняется в ST(0). Значение ST(0) должно

; лежать в пределах от -0,5 до +0,5, иначе результат не

; определен.

FSUBRP ST(1),ST(0) ; выполняют вычитание приемника из источника, а не

; источника из приемника.=>0.39754248593736856+1

FMUL ST(0),ST(0) ; умножение источника ST(0) на приёмник ST(0);

; 2^(0.482892142)*2^(0.482892142)

FSCALE ; Умножает ST(0) на два в степени ST(1) и записывает

; результат в ST(0).

FIST Y

mov eax,Y

xor edi,edi

xor esi,esi

mov si,10

mov edi,9

lp2: xor edx,edx

div esi

xchg eax,edx

add al,'0'

mov byte ptr [Msg+edi],al

xchg eax,edx

dec edi

or eax,eax

jne lp2

push 0h

push offset Ttl

push offset Msg

push 0h

call MessageBoxA

push 0h

call ExitProcess

end start

Блок-схема подсчета выражения: y=10x

Пример №2. Вывести на экран вещественное число, находящееся в регистре сопроцессора ST(0). Порядок числа должен быть только положительным. (real5.asm)

FYL2X –Вычисление у*log2(x), то есть ST(1)*log2(ST(0)), помещает результат в ST(1) и выталкивает ST(0) из стека, так что после этой операции результат оказывается в ST(0).

Первоначальное значение ST(0) должно быть неотрицательным. Если регистр ST(0) содержал ноль, результат (если ZM = 1) будет равен бесконечности со знаком, обратным ST(1). Например: 855963.

36786=8,55963367Е+5;

Для определения порядка:

.386

.model flat, stdcall

includelib import32.lib

extrn ExitProcess:PROC

extrn MessageBoxA:PROC

.data

Ttl db “Veshestvebboe chiclo”,0h

Msg db 23 dup(' '),0h

db 0h

X Dd 855963.36786 ; 8,55963367Е+5

OLD_CW DW ?

NEW_CW DW ?

Poryadok DW ?

TEN8 DD 100000000

BCD_Mantisa DT ?

BCD_Celaya dt ?

BCD_Poryadok DT ?

.code

start:

finit

FLD X ; загрузить вещественное число в стек

FLD1

FXCH ST(1)

FYL2X ; ST(1)=1*log2(X)

FLDL2T ; поместить в стек log2(10)

Определяем порядок числа Х: 

FXCH

FDIV ST(0),ST(1)

FNSTCW OLD_CW

FWAIT

MOV AX,OLD_CW

AND AX,NOT 0C00H

OR AX,0400H

MOV NEW_CW,AX

FLDCW NEW_CW

FRNDINT ;= Poryadok

FLDCW OLD_CW

FIST Poryadok

_________________________________________________________________________

; Блок возведения числа 10 в степень Poryadok. 10Poryadok

FLDL2T ; поместить в стек log2(10)

FMULP ST(1),ST(0) ; 5*log2(10) = 16,60964047

FNSTCW OLD_CW

FWAIT

MOV AX,OLD_CW

AND AX,NOT 0C00H

OR AX,0400H

MOV NEW_CW,AX

FLDCW NEW_CW

FLD1

FCHS

FLD ST(1)

FRNDINT ; ST(0)=16

FLDCW OLD_CW

FXCH ST(2)

FSUB ST(0),ST(2)

FSCALE ; ST(0)= 1/2*0.60964047

F2XM1 ; ST(0)=2(1/2*0.60964047) -1;

FSUBRP ST(1),ST(0) ; ST(0)= 2(1/2*0.60964047)

FMUL ST(0),ST(0) ; ST(0)= 2(1/2*0.60964047)*2(1/2*0.60964047)

FSCALE ; ST(0)= 2(1/2*0.60964047)*2(1/2*0.60964047)*216.

__________________________________________________________________________

FLD X ; X=855963.36786

FDIV ST(0),ST(1) ; делим исходное число Х на 10 в степени Poryadok (10Poryadok).

; 855963.36786/105=8,5596336786

FLD ST(0)

FNSTCW OLD_CW

FWAIT

MOV AX,OLD_CW

AND AX,NOT 0C00H

OR AX,0400H

MOV NEW_CW,AX

FLDCW NEW_CW ;

FRNDINT ; Округляем для получения целой части 8

FLDCW OLD_CW

FSUB ST(1),ST(0) ; Выполняем вычитание 8,5596336786-8 =0,5596336786 для

; получения мантиссы.

FXCH

FIMUL TEN8 ; Умножаем мантиссу на 100000000

; =>0,5596336786*100000000=5596336786. Получаем

; мантиссу как целое число.

FBSTP BCD_Mantisa ; Записываем мантиссу как ВСD число в переменную

; BCD_Mantisa

FBSTP BCD_Celaya ; Записываем целую часть числа как ВСD число в переменную

; BCD_Celaya

FILD Poryadok ; записываем из памяти в стек ST(0) порядок

FBSTP BCD_Poryadok ; записываем из стека порядок как BCD число в переменную

; BCD_Poryadok

; __________________________________________________________________________

; Блок вывода на экран значения. Вывод осуществляется справа налево: сначала порядок,

; потом «+», потом Е, потом мантисса, потом «,», потом целая часть.

mov eax,dword ptr [BCD_Poryadok]

xor edi,edi

mov edi,22

lp2: xor edx,edx

mov edx,eax

and edx,0000000Fh ; 0000 0101 and 0000 1111 => dl=0000 0101

add dl,'0'

mov byte ptr [Msg+edi],dl

shr eax,4

dec edi

or eax,eax

jne lp2

mov byte ptr [Msg+edi],'+'

dec edi

mov byte ptr [Msg+edi],'E'

dec edi

mov eax,dword ptr [BCD_Mantisa]

lp3: xor edx,edx

mov edx,eax

and edx,0000000Fh

add dl,'0'

mov byte ptr [Msg+edi],dl

shr eax,4

dec edi

or eax,eax

jne lp3

mov byte ptr [Msg+edi],','

dec edi

mov eax,dword ptr [BCD_Celaya]

lp4: xor edx,edx

mov edx,eax

and edx,0000000Fh

add dl,'0'

mov byte ptr [Msg+edi],dl

shr eax,4

dec edi

or eax,eax

jne lp4

push 0h

push offset Ttl

push offset Msg

push 0h

call MessageBoxA

push 0h

call ExitProcess

end start



В эту группу собраны команды пересылки данных и команды обмена данными. Поскольку обмен данными – это такие же пересылки без изменения самих данных.

И сюда же попали еще несколько команд, которые разумно было тоже отнести к пересылкам данных.

Всего здесь 10 команд, если подсчитать разные имена команд ассемблера, или 50 команд, если подсчитать машинные команды с разными кодами операций.

На этой странице во всех таблицах, где есть два операнда, первый операнд – это приемник (destination), в второй операнд – источник (source). На языке ассемблера в командах пересылки важен правильный порядок операндов после имени команды. Пересылка выполняется из операнда-источнка в операнд-приемник.

Команда пересылки данных

 Команда  Операнды  Код  Формат
  MOV  (r/m8), (reg8)    88    ——dw  MRM 
  MOV  (r/m16), (reg16) 
 (r/m32), (reg32) 
  89    ——dw  MRM 
  MOV  (reg8), (r/m8)    8A    ——dw  MRM 
  MOV  (reg16), (r/m16) 
 (reg32), (r/m32) 
  8B    ——dw  MRM 
  MOV  AL, (mem8)    A0    ——dw  addr(2/4) 
  MOV  AX, (mem16) 
 EAX, (mem32) 
  A1    ——dw  addr(2/4) 
  MOV  (mem8), AL    A2    ——dw  addr(2/4) 
  MOV  (mem16), AX 
 (mem32), EAX 
  A3    ——dw  addr(2/4) 

Команда MOV копирует содержимое второго операнда в первый операнд. При этом содержимое второго операнда не изменяется.

Команда MOV не воздействует на флажки, состояние флажков не изменяется.

В командах MOV с кодами A0, A1, A2, A3 обозначение addr(2/4) это задание адреса в оперативной памяти. Задается смещение относительно начала сегмента DS. Байты (два или четыре), задающие адрес, располагаются в самой команде следом за кодом операции. Размер адреса (2 или 4 байта) определяется атрибутом размера адреса команды.

В командах MOV с кодами 89, 8B, A1, A3 размер операнда (2 или 4 байта) определяется атрибутом размера операнда команды.

(Не путайте атрибут размера адреса и атрибут размера операнда, это две разные вещи.)

Команда для засылки констант

 Команда  Операнды  Код  Формат
  MOV  AL, imm8    B0    —-wreg  data(1) 
  MOV  CL, imm8    B1    —-wreg  data(1) 
  MOV  DL, imm8    B2    —-wreg  data(1) 
  MOV  BL, imm8    B3    —-wreg  data(1) 
  MOV  AH, imm8    B4    —-wreg  data(1) 
  MOV  CH, imm8    B5    —-wreg  data(1) 
  MOV  DH, imm8    B6    —-wreg  data(1) 
  MOV  BH, imm8    B7    —-wreg  data(1) 
  MOV  AX, imm16 
 EAX, imm32 
  B8    —-wreg  data(2/4) 
  MOV  CX, imm16 
 ECX, imm32 
  B9    —-wreg  data(2/4) 
  MOV  DX, imm16 
 EDX, imm32 
  BA    —-wreg  data(2/4) 
  MOV  BX, imm16 
 EBX, imm32 
  BB    —-wreg  data(2/4) 
  MOV  SP, imm16 
 ESP, imm32 
  BC    —-wreg  data(2/4) 
  MOV  BP, imm16 
 EBP, imm32 
  BD    —-wreg  data(2/4) 
  MOV  SI, imm16 
 ESI, imm32 
  BE    —-wreg  data(2/4) 
  MOV  DI, imm16 
 EDI, imm32 
  BF    —-wreg  data(2/4) 
  MOV  (r/m8), imm8    C6    ——-w  NNN  data(1) 
  MOV  (r/m16), imm16 
 (r/m32), imm32 
  C7    ——-w  NNN  data(2/4) 

Здесь операнды imm8, imm16, imm32 – это засылаемая константа, непосредственный операнд размером 1, или 2, или 4 байта.

В командах MOV с кодами C6, C7 в байте ( mod,reg,r/m ), в трехбитном поле ( reg ) должно быть значение 000.

Команда MOV с кодами C6, C7 обычно используется только для засылки константы в память и не используются для засылки константы в регистр, потому что для засылки константы в регистр есть более удобные команды с кодами от B0 до BF.

Другие команды MOV

Команда MOV для пересылки данных в сегментные регистры – смотрите страницу:
      Команды для сегментных регистров.

Команда MOV для пересылки данных в специальные регистры (регистры управления, отладки, тестирования) – смотрите страницу:
      Привилегированные команды

Команды пересылки с расширением операнда

 Команда  Операнды  Код  Формат
  MOVSX  (reg16), (r/m8) 
 (reg32), (r/m8) 
  0F  BE    ——-w  MRM 
  MOVSX  (reg32), (r/m16)    0F  BF    ——-w  MRM 
  MOVZX  (reg16), (r/m8) 
 (reg32), (r/m8) 
  0F  B6    ——-w  MRM 
  MOVZX  (reg32), (r/m16)    0F  B7    ——-w  MRM 

Обе команды, MOVSX и MOVZX, действуют почти одинаково. Различие лишь в том, что команда MOVSX делает знаковое (Sign) расширение, а команда MOVZX – нулевое (Zero) расширение.

Первый операнд является приемником (destination), второй операнд источником (source). Обе команды берут содержимое операнда источника, расширяют это значение до величины атрибута размера операнда команды (до 16 бит или до 32 бит) и заносят результат в операнд приемник.

Операнд-источник задается в поле ( r/m ) байта ( mod,reg,r/m ). Поэтому здесь может быть адрес памяти или регистр. Операнд-приемник задается в поле ( reg ) байта ( mod,reg,r/m ) и здесь может быть только регистр.

Бит ( w ) в коде операции определяет размер операнда-источника. Если ( w = 0 ), это коды операций 0F BE и 0F B6, то операнд-источник имеет размер 1 байт. Если ( w = 1 ), это коды операций 0F BF и 0F B7, то операнд-источник имеет размер 2 байта.

Команды MOVSX и MOVZX не воздействуют на флажки, состояние флажков не изменяется.

Команды расширения операнда

 Команда  Операнды  Размер
операнда
 Код  Формат
  CBW  AX, AL   16 бит   98    ——– 
  CWDE  EAX, AX   32 бита   98    ——– 
  CWD  DX:AX, AX   16 бит   99    ——– 
  CDQ  EDX:EAX, EAX   32 бита   99    ——– 

Команды CBW, CWDE, CWD, CDQ выполняют знаковое расширение операнда-источника. Результатом является операнд удвоенного размера.

Например, команда CBW берет знаковый бит из регистра AL (то есть, старший бит из AL) и заносит его во все биты регистра AH. Точно также, команда CWD берет знаковый (старший) бит из AX и заносит его во все биты регистра DX.

При записи на языке ассемблера для этих команд операнды не указываются. Операнды заранее определены по умолчанию и не могут быть изменены. В таблице показаны операнды, действующие по умолчанию.

Команды CBW, CWDE, CWD, CDQ не воздействуют на флажки, состояние флажков не изменяется.

В таблице указан атрибут размера операнда, который требуется для каждой из команд. Если требуемый для команды размер не совпадает с общим режимом работы всей программы, то перед кодом операции данной команды должен стоять префикс (код 66) для изменения атрибута размера операнда. (Это учитывает ассемблер при генерации кода).

 Команда  Операнды  Размер
операнда
 Префикс  Код
Режим работы программы – 32 бита
  CBW  AX, AL   16 бит   66     98  
  CWDE  EAX, AX   32 бита   98  
  CWD  DX:AX, AX   16 бит   66     99  
  CDQ  EDX:EAX, EAX   32 бита   99  
Режим работы программы – 16 бит
  CBW  AX, AL   16 бит   98  
  CWDE  EAX, AX   32 бита   66     98  
  CWD  DX:AX, AX   16 бит   99  
  CDQ  EDX:EAX, EAX   32 бита   66     99  

Команда обмена данными

 Команда  Операнды  Код  Формат
  XCHG  EAX, EAX    90    —–reg 
  XCHG  EAX, ECX    91    —–reg 
  XCHG  EAX, EDX    92    —–reg 
  XCHG  EAX, EBX    93    —–reg 
  XCHG  EAX, ESP    94    —–reg 
  XCHG  EAX, EBP    95    —–reg 
  XCHG  EAX, ESI    96    —–reg 
  XCHG  EAX, EDI    97    —–reg 
  XCHG  (reg8), (r/m8)    86    ——-w  MRM 
  XCHG  (reg32), (r/m32)    87    ——-w  MRM 

Команда XCHG обменивает содержимое двух своих операндов. Значение, которое было до выполнения команды в первом операнде, оказывается в результате во втором операнде. А значение, которое было до выполнения команды во втором операнде, оказывается в результате в первом операнде.

Команда XCHG не воздействует на флажки, состояние флажков не изменяется.

Команда XCHG всегда имеет два операнда, причем оба операнда должны иметь одинаковый размер (1 байт, или 2 байта, или 4 байта). Операнды могут быть указаны в команде в любом порядке. Это очевидно из смысла выполняемой операции.

Из всех вариантов команды XCHG только команда с кодом 86 может работать с операндами размером один байт.

Машинные команды с кодами 90-97 и 87 могут работать с операндами, размером два байта или четыре байта. Размер операнда (2 или 4 байта) определяется атрибутом размера операнда команды.

Команда XCHG с кодом 87 используется только для обмена “регистр – память” и не используются для обмена “регистр – регистр”, потому что для обмена “регистр – регистр” есть более удобные команды с кодами от 90 до 97.

Пустая операция

 Команда  Операнды  Код  Формат
  NOP   90    ——– 

Очевидно, что команда ( XCHG EAX, EAX ) не выполняет никакой работы, так как здесь регистр EAX должен обмениваться сам с собой, Но такая команда-пустышка иногда может потребоваться в программе. Команда, которая ничего не делает и ничему не мешает. Поэтому данная команда имеет свое персональное имя на языке ассемблера – NOP (No Operation). При записи на языке ассемблера эта команда не имеет операндов. В программе эта команда занимает один байт.

Известны и еще несколько команд, которые тоже могут применяться, чтобы просто занимать место, причем занимать не один байт, а несколько. Но эти команды не имеют своего отдельного имени на языке ассемблера.

Команда перестановки байтов в 32-битном регистре

 Команда  Операнды  Код  Формат
  BSWAP  EAX   0F  C8    —–reg 
  BSWAP  ECX   0F  C9    —–reg 
  BSWAP  EDX   0F  CA    —–reg 
  BSWAP  EBX   0F  CB    —–reg 
  BSWAP  ESP   0F  CC    —–reg 
  BSWAP  EBP   0F  CD    —–reg 
  BSWAP  ESI   0F  CE    —–reg 
  BSWAP  EDI   0F  CF    —–reg 

Команда BSWAP изменяет порядок байтов в 32-битном регистре. В таком регистре размещается двойное слово – четыре байта. Если считать, что в исходном состоянии байты пронумерованы (1-2-3-4), то команда BSWAP просто меняет местами первый байт с четвертым, а второй байт с третьим. После выполнения этой команды байты будут расположены в обратном порядке (4-3-2-1). При этом содержимое самих байтов не изменяется.

Как известно, в процессорах x86 принят обратный порядок для расположения данных. Иногда возникает потребность показать результат с прямым порядком байтов. Изменить порядок байтов можно одной командой BSWAP, не делая лишних сдвигов и пересылок.

Команда BSWAP не воздействует на флажки, состояние флажков не изменяется.

Использование команды BSWAP для размера операнда “16 бит” не предусмотрено. Результат операции в этом случае не определен.

Основные страницы справочника

Справочник по командам процессоров x86 Все команды по алфавиту (кратко)Все команды по алфавиту (подробно)Первый байт кода операцийВторой байт кода операций