Переназначение плохих кластеров.

Не восстанавливает данные. Для восстановления используются три схемы избыточного хранения:

1. Зеркальные наборы.

2. Дуплексные наборы.

3. Чередование дисков с записью чётности.

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

Чередование дисков. Информация записывается на несколько дисков. Один из дисков используется для хранения байтов чётности. Если сбой одного из дисков, то информация, которая находилась на сбойном диске восстанавливается с использованием оператора XOR над имеющейся информацией.

44. Компрессия данных в ФС NTFS.

Компрессия данных в ФС NTFS (Компрессия (от лат. compressio - сжатие)). NTFS поддерживает сжатие по отдельным файлам: по каталогам и по томам. Системные файлы не сжимаются. Два вида сжатия в NTFS:

1. Сжатие разрежённых файлов;

2. Сжатие обычных файлов.

Сжатие разрежённых файлов.

Разрешёнными называются данные, в которых лишь малая часть отлична от нулевых значений. Пример: разрежённая матрица для кластеров, заполненных нулями, логические номера кластеров не выделяются. Пример: имеется файл, состоящий из 144 кластеров. VCN: от 0 до 143.

Кластеры с VCN 16-31 и 64-127 заполнены нулями. Запись в таблице MFT для данного файла будет иметь вид:

Когда программа читает данные из сжатого файла, то NTFS проверяет, есть ли сопоставляющие VCN и LCNдля считываемого участка файла. Если программа обращается в невыделенную «дыру», то значит, данные в этой части файла состоят из нулей, то и NTFS возвращает в ноль, не обращаясь к диску. Если программа записывает в «дыру»не нулевые данные, то NTFS выделяет дисковое пространство и записывает туда эти данные.

Сжатие обычных файлов.

При сжатии обычных файлов NTFS разбивает их на единицы сжатия длиной 16 кластеров и выполняет сжатие отдельно для каждой единицы сжатия. Некоторые последовательности данных могут сжиматься не достаточно сильно или вообще не сжиматься, поэтому для каждой единицы сжатия NTFS определяет, будет ли получен выигрыш. Если будет получен выигрыш хотя бы в 1 кластер, то сжатие производится, если нет, то единица сжатия записывается на диск в несжатом виде.

45. Система шифрования данных (EFS) в файловой системе NTFS .

Еще одной полезной особенностью является поддержка EFS (Encrypting File System – Криптографическая Файловая Система) – надстройки над NTFS, позволяющей прозрачно для пользователя и приложений шифровать и расшифровывать файлы на локальном диске. Для шифрования файлов по алгоритму DES используется случайно сгенерированный FEK (File Encryption Key– Ключ Шифрования Файла), который в свою очередь шифруется по алгоритму RSA при помощи открытого ключа пользователя и сохраняется в атрибутах файла в поле DRF (Data Recovery Field– Поле Восстановления Данных). Для пользователя процесс первичного шифрования сводится к установке атрибута «зашифрованный». Доступ к зашифрованным данным возможен только при работе с той учетной записью, под которой производилось шифрование. Создание аналогичной учетной записи, с таким же именем пользователя и паролем, не даст доступа к зашифрованным данным. При первом после установки операционной системы использовании EFS генерируется само подписанный сертификат, содержащий открытый и закрытый ключи пользователя. Для возможности восстановления данных в случае потери доступа к учетной записи в Политике восстановления назначается специальный пользователь – агент восстановления. Сертификат EFS для агента восстановления генерируется при установке системы. По умолчанию агентом восстановления является Администратор.

46. Загрузка ОС Windows 2000.

Загрузка Windows 2000 проходит в пять этапов: предварительная загрузка (preboot sequence), загрузка (boot sequence), загрузка ядра (kernel load), инициализация ядра (kernel initialization) и регистрация (logon).

В таблице перечислены файлы, необходимые для загрузки компьютеров на базе процессора Intel с Windows 2000, их местоположение и связанные с ними этапы загрузки. Слово Systemroot означает путь к папке с установленной Windows 2000, которая часто называется C:\Winnt (в зависимости от того в какой раздел и под каким именем вы установили папку с файлами Windows 2000).

1. Предварительная загрузка.

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



  1. Компьютер выполняет процедуру POST для определения объема физической памяти, проверки наличия аппаратных компонентов и т. д. Если на компьютере установлена базовая система ввода-вывода (BIOS) Plug and Play, то на этом этапе происходит просмотр и конфигурирование аппаратных устройств.
  2. BIOS компьютера обнаруживает загрузочное устройство, загружает и выполняет главную загрузочную запись (MBR).
  3. Главная загрузочная запись просматривает таблицу разделов в поисках активного раздела, загружает загрузочный сектор активного раздела в память и выполняет его.
  4. Компьютер загружает и инициализирует файл Ntldr — загрузчик ОС.

Примечание.Во время установки Windows 2000 изменяет загрузочный сектор, чтобы в процессе запуска системы загружался файл Ntldr.

2. Загрузка.

После загрузки в память файла Ntldrпроцедура загрузки собирает информацию об аппаратном обеспечении и драйверах. При этом используются файлы Ntldr, Boot.ini, Bootsect.dos (необязательно), Ntdetect.com и Ntoskrnl.exe.
Загрузка проходит в четыре этапа: начальная загрузка, выбор ОС, обнаружение оборудования и выбор конфигурации.

Начальная загрузка.

На этом этапе файл Ntldr переводит процессор из реального режима в 32-разрядный режим линейной памяти, необходимый для выполнения любых дополнительных функций. Затем запускаются соответствующие драйверы системы minifile. Они встроены в Ntldr, поэтому этот файл способен находить и загружать Windows 2000 данные из разделов, отформатированных как с помощью FAT, так и NTFS.

Выбор операционной системы.

Во время загрузки Ntldr считывает файл Boot.ini. Если в этом файле за-Дан выбор одной из нескольких ОС, будет выведен запрос (Выберите операционную систему для запуска) со списком ОС, внесенных в файл Boot.ini. Если вы не выберете ни один из вариантов до истечения времени ожидания, Ntldr загрузит ОС, заданную в файле Boot.iniв качестве системы по умолчанию. Setup делает таковой Windows 2000, установленную последней. Если в файл Boot.ini только одна запись, запрос (Выберите операционную систему для запуска) не появится, а соответствующая ОС загрузится автоматически.

Поиск оборудования.

В компьютерах с процессором Intel поиск оборудования осуществляют файлы Ntdetect.com и Ntoskrnl.exe. Программа Ntdetect.comзапускается, если на этапе выбора ОС выбрана система Windows 2000 (или по окончании времени ожидания).

Выбор конфигурации.

После окончания сбора информации об аппаратном обеспечении выводится сообщение (Меню выбора конфигурации оборудования). Оно содержит список аппаратных конфигураций, имеющихся на компьютере. Первая конфигурация выделена. Чтобы выбрать другую, нажмите клавишу «стрелка вниз» или L, чтобы выбрать вариант (Последней удачной конфигурации).Если на компьютере задана всего одна конфигурация, сообщение Hardware Profile/Configuration Recovery Menu не выводится, а загрузка Windows 2000 производится с конфигурацией по умолчанию.

3. Загрузка ядра.

После выбора конфигурации загружается и инициализируется ядро Windows 2000 (Ntoskrnl.exe). Файл Ntoskrnl.exe также загружает и инициализирует драйверы устройств и загружает службы. Если вы после вывода сообщения Hardware Profile/Configuration Recovery Menu нажмете Enter или если Ntldr произведет выбор конфигурации автоматически, начинается загрузка ядра. Экран очистится, и в нижней его части появится ряд белых прямоугольников.

На этапе загрузки ядра Ntldr выполняет следующие действия:

• Загружает файл Ntoskrnl.exe (но не инициализирует его).

• Загружает файл слоя абстрагирования от оборудования (Hardware Abstraction Layer, HAL) Hal.dll.

• Загружает ключ реестра HKEY_LOCAL_MACHINE\SYSTEM из каталога systemroot\System32\Config\System.

• Выбирает управляющий набор (control set), который будет использоваться для инициализации компьютера.

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

• Загружает драйверы устройств, у которых значение параметра Start равно 0x0. Обычно это драйверы низкого уровня, например, необходимые для работы жесткого диска. Параметр List из подраздела реестра HKEY_LOCAL_MACHINE\ SYSTEM\ CurrentControlSet\ Control\ ServiceGroupOrder задает порядок их загрузки.

4. Инициализация ядра

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

Создается раздел Hardware.В случае успешной инициализации ядро использует данные, собранные во время поиска оборудования, для создания раздела реестра HKEY_LOCAL_MACHINE\HARDWARE, который содержит информацию об оборудовании на системной плате и прерываниях, используемых аппаратными компонентами.

Создается управляющий набор Clone. Его создает ядро, копируя набор, ссылка на который записана в параметре Current подраздела реестра HKEY_LOCAL_MACHINE\SYSTEM\Select. Управляющий набор Clone никогда не меняется и должен быть точной копией данных, использованных для конфигурирования компьютера, не отражая изменения, сделанные при запуске.

Загружаются и инициализируются драйверы устройств.Создав управляющий набор Clone, ядро инициализирует драйверы устройств низкого уровня, которые были загружены на этапе загрузки ядра. Затем ядро просматривает подраздел реестра HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services в поисках драйверов устройств, у которых значение параметра Start равно 0x1.Сразу после загрузки драйверы устройств инициализируются. Если при загрузке и инициализации драйвера произошла ошибка, дальнейший ход загрузки определяется параметром драйвера Error-Control. Возможные значения этого параметра и вытекающие из них действия в таблице.

В реестре значения Error-Control содержатся в подразделе HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\<имя_службы_или_драйвера>\ЕrrorControl.

Запускаются службы.После загрузки и инициализации драйверов устройств Session Manager (Smss.exe) запускает подсистемы высокого уровня и службы Windows 2000. Session Manager выполняет команды из элемента BootExecute и разделов Memory Management, DOS Devices и Subsystems. Назначение этих команд в таблице.

5. Регистрация

Процесс регистрации начинается по завершении инициализации ядра. Подсистема Win32 запускает программу Winlogon.exe, которая в свою очередь запускает Local Security Authority (Lsass.exe)и открывает окно Logon (Вход в Windows), где вы можете зарегистрироваться, даже если продолжается инициализация драйверов сетевых устройств. Затем Service Controller выполняет и последний раз просматривает подраздел HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\ Services в поисках служб, у которых значение параметра Start равно 0x2, что означает автоматическую загрузку. Загрузка Windows 2000 не считается успешной, до тех пор пока пользователь не зарегистрируется в системе. После успешной регистрации система создает копию управляющего набора Clone с именем LastKnownGood.

47. Процесс разработки программы на ассемблере.

На рисунке приведена общая схема процесса разработки программы на ассембле­ре. Название программы – cikl. На схеме выделено четыре этапа этого процесса. На первом этапе, когда вводится код программы, можно использовать любой текстовый ре­дактор. В Windows таким редактором может быть Блокнот (Notepad). При выборе редактора нужно учитывать, что он не должен вставлять «посторонних» символов (специальных символов форматирования). С этой точки зрения Microsoft Word в качестве основного редактора ассемблерных программ не годится.

Созданный с по­мощью текстового редактора файл должен иметь расширение *.asm. Для выполнения остальных этапов разработки требуются специализированные программные средства из пакета MASM или TASM. Все пакеты ассемблера выполняют практически одну работу, но по-разному, например, маскируют ее с помощью интегрированный среды или объединяют некоторые этапы разработки.

Трансляция программы

TASM [ключи] имя_исходного_файла [,имя_объектного_файла]

[,имя_файла_листинга] [,имя_файла_перекрестных_ссылок]

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

Компоновка программы

TLINK [ключи] список_объектных_файлов [,имя_загрузочного_модуля] [,имя_файла_карты] [,имя_файла_библиотеки] [,имя_файла_определений]

[,имя_ресурсного_файла]

Ключ /v указывает на необходимость сохранения отладочной информации в исполняемом файле.

48. Основные регистры процессора Pentium.

В организации вычислительного процесса важную роль играют регистры процессора. В процессорах Pentium эти регистры делятся на несколько групп:

· регистры общего назначения;

· регистры сегментов;

· указатель инструкций;

· Переназначение плохих кластеров. - student2.ru

· регистр флагов;

· управляющие регистры;

· регистры системных адресов;

· регистры отладки и тестирования, а также регистры математического сопроцессора, выполняющего операции с плавающей точкой.

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

Программист может обращаться к этим регистрам как к единому целому, используя обозначения ЕАХ, ЕВХ, ЕСХ, EDX, а также к некоторым их частям.

Остальные четыре регистра общего назначения — ESI, EDI, EBP и ESP — предназначены для задания смещения адреса относительно начала некоторого сегмента данных.

Регистры сегментов CS, SS, DS, ES, FS и GSв защищенном режиме ссылаются на дескрипторы сегментов памяти — описатели, в которых содержатся такие параметры сегментов, как базовый адрес, размер сегмента, атрибуты защиты и некоторые другие. Регистр CS (Code Segment) предназначен для хранения индекса дескриптора кодового сегмента, регистр SS (Stack Segment) — дескриптора сегмента стека, а остальные регистры используются для указания на дескрипторы сегментов данных.

Указатель инструкций EIP содержит смещение адреса текущей инструкции, которое используется совместно с регистром CS для получения соответствующего виртуального адреса.

Регистр флагов EFLAGS содержит признаки, характеризующие результат выполнения операции, например флаг знака, флаг нуля, флаг переполнения, флаг паритета, флаг переноса и некоторые другие. Кроме того, здесь хранятся некоторые признаки, устанавливаемые и анализируемые механизмом прерываний, в частности флаг разрешения аппаратных прерываний IF.

В процессоре Pentium имеется пять управляющих регистров — CRO, CR1, CR2, CR3 и CR4, которые хранят признаки и данные, характеризующие общее состояния процессора.

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

Регистр CR1 в настоящее время не используется (зарезервирован).

Регистры CR2 и CR3 предназначены для поддержки работы системы виртуальной памяти. Регистр CR2 содержит линейный виртуальный адрес, который вызвал так называемый страничный отказ (отсутствие страницы в оперативной памяти или отказ из-за нарушения прав доступа).

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

В регистре CR4 хранятся признаки» разрешающие работу так называемых архитектурных расширений, например возможности использования страниц размером 4 Мбайт и т. п.

49. Ассемблерные команды пересылки данных. Пример программы.

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

mov <операнд назначения>,<операнд-источник>

xchg <операнд!>,<операнд2>

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

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

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

masm

model small

.data

fls db 5

fld db ?

.code

start:

…..

mov al, fls

mov fld,al

end start

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

Например:

mov ax,dseg ; в регистр ах записывается адрес сегмента данных

mov ds,ax ;адрес сегмента данных записывается в регистр ds

; сегмент данных

dseg segment

mes db 64 dup('~')

dseg ends

В начале сегмента кода две командыMOV, выполняющие настройку сегментного регистра DS.

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

mov ax,ds

mov es,ax

Но есть и другой способ выполнения данной операции -использование стека и команд PUSH и POP:

push ds ;поместить значение регистра ds в стек

pop es ;записать в es число из стека

Для двунаправленной пересылки данных применяют команду XCHG. Естественно, что операнды должны иметь один тип. Не допускается (как и для всех команд ассемблера) напрямую обменивать между собой содержи­мое двух ячеек памяти. К примеру:

xchg ax,bx ;обменять содержимое регистров ах и bx

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

50. Работа с адресами и указателями на ассемблере. Пример программы.

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

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

· lds <приемник>,< а указателя в регистр сегмента данных ds;

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

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

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

· Iss <приемник>,<источник> — загрузка указателя в регистр сегмента стека ss.

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

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

<1> ; - Prg.asm -

<2> masm

<3>model small

<4> .data

<5> ...

<6> str_l db "Ассемблер - базовый язык компьютера"

<7> str_2 db 35 dup (" ")

<8> full_pnt dd str_l

<9> ...

<10> .code

<11> start:

<12> ….

<13> lea si ,str_l ;загружаются значения эффективных адресов переменных

<14> lea di ,str_2 ;загружаются значения эффективных адресов переменных

<15> les bx,full_pnt ;полный указатель на str_l в пару es:bx

<16> mov сx, 35 ;счетчик цикла для loop ml

<17> ml:

<18> mov al , [si] ; пересылка очередного байта из одной строки в другую

<19> mov [di] ,al ; пересылка очередного байта из одной строки в другую

<20> inc si

<21> inc di

<22> loop m1 ;цикл на метку ml до пересылки всех символов

<23> ..........

<24> end start

51. Ассемблерные команды для работы со стеком. Пример программы.

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

Для работы со стеком предназначены три регистра:

  • SS — регистр сегмента стека;
  • SP/ESP — регистр указателя стека;
  • BP/EBP — регистр указателя базы "кадра стека”.

Размер стека зависит от режима работы процессора и ограничивается значени­ем 64 Кбайт (или 4 Гбайт в защищенном режиме). В каждый момент времени дос­тупен только один стек, адрес сегмента которого содержится в регистре SS. Этот стек называется текущим. Для того чтобы обратиться к другому стеку («переклю­чить стек»), необходимо загрузить в регистр SS другой адрес. Регистр SS автомати­чески используется процессором для выполнения всех команд, работающих со сте­ком.

Еще некоторые особенности работы со стеком:

Переназначение плохих кластеров. - student2.ru

· Запись и чтение данных в стеке осуществляются в соответствии с принципом LIFO (Last In First Out — «последним пришел, первым ушел»).

· По мере записи данных в стек последний растет в сторону младших адресов. Эта особенность заложена в алгоритм команд работы со стеком.

· При использовании регистров ESP/SP и ЕВР/ВР для адресации памяти ассемблер автоматически считает, что содержащиеся в нем значения представляют собой смещения относительно сегментного регистра SS.

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

Команда PUSH выполняет запись значения <источник> в вершину стека: push <источник>

Алгоритм работы этой команды включает два действия:

1. Значение SP уменьшается на 2: (SP) = (SP) - 2

2. Значение источника записывается по адресу, указываемому парой SS:SP

Команда POP выполняет запись значения из вершины стека по месту, указанно­му операндом <приемник> (значение при этом «снимается» с вершины стека): pop <приемник>

Алгоритм работы команды POP обратен алгоритму команды PUSH:

1. Запись содержимого вершины стека по месту, указанному операндом <приемник>.

2. Увеличение значения SP: (SP) = (SP) + 2

Команда PUSHA предназначена для групповой записи в стек. По этой команде в стек последовательно записывается содержимое регистров АХ, СХ, DX, BX, SP, BP, SI, DI. Заметим, что записывается оригинальное содержимое SP, то есть то, которое было до выдачи команды PUSHA.

Пример, рассмотрим фрагмент программы для пересылки бай­та из ячейки fls в ячейку fld:

masm

model small

.data

fls db 5

fld db ?

.code

start:

…..

push fls ;поместить значение в стек

pop fld ;записать из стека

end start

52. Ассемблерные команды сложения и вычитания. Пример программы.

Команда inc прибавляет единицу к операнду, в качестве которого можно указывать регистр (кроме сегментного) или ячейку памяти. Не допускается использовать в качестве операнда непосредственное значение. Операнд интерпретируется как число без знака.

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

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

Команда dec вычитает единицу из операнда, в качестве которого можно указывать регистр (кроме сегментного) или ячейку памяти. Не допускается использовать в качестве операнда непосредственное значение. Операнд интерпретируется как число без знака.

Команда sub вычитает второй операнд (источник) из первого (приемника) и помещает результат на место первого операнда. Исходное значение первого операнда (уменьшаемое) теряется, замещаясь результатом вычитания. Второй операнд не изменяется.

Командаsbb вычитает второй операнд (источник) из первого (приемника). Результат замещает первый операнд, предыдущее значение которого теряется. Если установлен флаг CF, из результата вычитается еще 1. Второй операнд не изменяется.

Пример:

mypr proc

mov ax,05h

mov dx,10h

mov bx,0

add bx, ax

add bx, dx

int 21h

mypr endp

end mypr

В регистре bx будет сумма ax и dx.

53. Ассемблерные команды умножения, деления и изменения знака. Пример программы.

Команда mul выполняет умножение целого без знакового числа, находящегося в регистре EAX(AX, AL) на операнд-источник (целое число со знаком). Размер произведения в два раза больше размера сомножителей.

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

Для двухбайтовых операций один из сомножителей помещается в регистр AX. После проведения операции умножения результат записывается в регистры DX:AX (в DX- старшая часть, в AX- младшая).

Для четырехбайтовых операций один из сомножителей помещается в регистр EAX. После проведения операции умножения результат записывается в регистры EDX:EAX (в EDX- старшая часть, в EAX- младшая).

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

Командаimul выполняет умножение целого знакового числа, находящегося в регистре EAX(AX, AL) на операнд-источник (целое число со знаком). Алгоритм тот же.

Команда div выполняет деление целого числа без знака, находящегося в регистре AX (в случае деления на байт), в DX:AX (в случае деления на слово) или в регистрах EDX:EAX (в случае деления на двойное слово). Размер делимого в два раза больше размера делителя и остатка.

Для однобайтовых операций делимое помещается в регистр AX. После проведения операции деления частное записывается в регистр AL, а остаток – в регистр AH.

Для двухбайтовых операций делимое помещается в регистры DX:AX (в DX- старшая часть, в AX- младшая). После проведения операции деления частное записывается в регистр AX, а остаток – в регистр DX.

Для четырехбайтовых операций делимое помещается в регистры EDX:EAX (в EDX- старшая часть, в EAX- младшая). После проведения операции деления частное записывается в регистр EAX, а остаток – в регистр EDX.

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

Команда idiv выполняет деление целого числа со знаком, находящегося в регистре AX (в случае деления на байт), в DX:AX (в случае деления на слово) или в регистрах EDX:EAX (в случае деления на двойное слово) на операнд-источник (целое число со знаком). Алгоритм тот же.

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

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

Пример:

mypr proc

mov al,05h

mov dl,02h

mul dl

int 21h

mypr endp

end mypr

В регистре ax будет произведение al и dl.

54. Использование в Delphi встроенного ассемблера. Пример программы.

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

Область действия оператора ASM ограничивается ближайшим по тексту зарезервированным словом END:

ASM

<одна или несколько команд встроенного ассемблера>

END;

На рисунке приведен пример программы работы с ассемблерными вставками.

Переназначение плохих кластеров. - student2.ru

Ассемблерная вставка увеличивает на 2 исходное число.

Программный код для события OnClick кнопки «Ассемблерные вставки»имеет следующий вид:

procedure TForm1.Button1Click (Sender: TObject);

Var x:Integer;

begin

x:=StrToInt(Edit1.Text);

asm

mov ax,word ptr x

add ax,2

mov word ptr x,ax

end;

Edit2.Text:=IntToStr(x);

end;

55. Ассемблерные команды линейного и циклического сдвига. Пример программы.

Для преобразования числа в символьную форму используются команды сдвига. Все команды сдвига перемещают биты в поле операнда влево или вправо, в зависимости от кода операции. Все команды сдвига имеют одинаковую структуру: КОП операнд, счетчик_сдвигов.

Количество сдвигаемых разрядов (значение счетчик_сдвигов) может задаваться двумя способами:

статически — непосредственно во втором операнде;

динамически — в регистре CL перед выполнением команды сдвига.

Все команды сдвига устанавливают флаг переноса CF.

По принципу действия команды сдвига можно разделить на два типа:

Команды линейного сдвига

Команды циклического сдвига

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

1. Очередной «выдвигаемый» бит устанавливает флаг CF.

2. Бит, появляющийся с другого конца операнда, имеет значение 0.

3. При сдвиге очередного бита он переходит во флаг CF, при этом значение преды­дущего сдвинутого бита теряется.

Команды линейного сдвига делятся на два подтипа:

команды логического линейного сдвига;

команды арифметического линейного сдвига.

К командам логического линейного сдвига относятся:

shl операнд, счетчик_сдвигов — логический сдвиг влево (Shift Logical Left). Coдержимое операнда сдвигается. Справа в позицию младшего бита вписываются нули

shr операнд, счетчик_сдвигов — логический сдвиг вправо (Shift Logical Right). Содержимое операнда сдвигается. Слева в позицию старшего (знакового) бита вписываются нули.

sal операнд, счетчик_сдвигов — арифметический сдвиг влево (Shift Arithmetic Left). Содержимое операнда сдвигается влево. Справа (в позицию младшего бита) вписываются нули. Не сохраняет знака, но устанавливает флаг CF в случае смены знака очередным выдвигаемым битом.

sar операнд, счетчик_сдвигов — арифметический сдвиг вправо (Shift Arithmet Right). Содержимое операнда сдвигается вправо. Слева в операнд вписываются нули. Команда SAR сохраняет знак, восстанавливая его после сдвига каждого очередного бита.

К командам циклического сдвига относятся команды, сохраняющие значения сдви­гаемых битов. Есть два типа команд циклического сдвига:

команды простого циклического сдвига ;

Наши рекомендации