shpory_spo 4йкурс
.doc
1 Понятие системного программного обеспечения (СПО). СПО координирует работу различ. компонентов компа и играет роль посредника м/у прикладными программами и аппаратным обеспечением. СПО, кот. управляет работой компа, наз. операционной системой. К другому СПО относятся проги трансляции, преобразующие команды языков программирования в исполняемый машинный код, а также различные утилиты – программы для обслуживания компьютера и периферийных устройств |
2 Состав СПО и функции его основных частей Данный класс ПО делится на след. виды: 1.Базовое ПО, содержащее операционные системы и операционные оболочки; 2.Сервисное ПО, или утилиты. ОС исп-ся для упр-я вып-ем пользовательских прог, планир-ия и упр-ия вычислительными и др. ресурсами ЭВМ. Это комплекс прог и данных, предназнач. для увел-я пропускной способности ЭВМ, расшир-я сферы ее применения, автоматизации подготовки прикладных программ к выполнению. Операционные оболочки – это спец. проги, предназнач. для облегчения общения пользователя с командами ОС. Имеют текстовый и графический варианты интерфейса конечного пользователя. Сервисное ПО, или утилиты сод-ит проги диагностики работоспособности компа, антивирус. проги, проги обслуживания дисков, проги архивир-я данных, проги обслуж-я сетей. |
3 Понятие ОС и ее основные функции. ОС-комплекс прог, обеспечивающих взаимод-е м/у прикладными прогами, пользователем и аппаратурой компа. Осн ф-ции ОС: 1)обслуживание инфы,хранимой в компе; 2) программное управление устр-вами компа; 3) обеспечение удобного интерфейса внутр-х частей ОС с пользователем и приклад. прогами (обеспеч-е взаимод-я); 4)эффективное использ-ие компа путём совместного использ-я ресурсов и параллельного выполнения прог. ОС выполняет свои ф-ции с пом внутренних информационных объектов. Соврем. ОС невозможно использовать без аналогов паспортов и учётных документов. В W эти объекты наз-ся «системные объекты» |
4 Понятие архитектуры компьютера. Архитектура – логическая структура и функционирование компа с точки зрения программиста (описание границы м/у аппаратурой и ПО). Для однопроцессорных компов архитектура определяется архитектурой процессора: 1.Внутренние узлы хранения инфы в процессоре, явно указываемые или используемые в машинных командах (регистры программиста) 2.Способы доступа к ячейкам внешней по отнош-ию к процессору адресуемой памяти (основной памяти компа) 3.Описание форматов и ф-ий маш. команд. 4.Описание системы прерываний в степени значимой для программиста (состоит из изложения последовательности действий с информацией при выполнении процедуры прерывания, не содержит описания аппаратных устройств и узлов). Опис-е способа доступа к ячейкам основн. памяти включает инфу об используемом процессором диапазоне адресов ячеек памяти и как на основе инфы в командах определяются действительные адреса размещения операндов в основной памяти. Адрес информационного объекта – порядковый номер ячейки памяти, начиная с которой размещается в основной памяти эта инфа (элементарная адресуемая ячейка - байт). Для операндов в основной памяти, инфа машинного кода определяет эффективный (исполнительный) адрес. В современных архитектурах исполнит. адрес отличается от действительного адреса инфы в памяти. Сегментные (базовые) регистры нужны для хранения инфы, исходя из которой опред-ся действит. адрес начала проги (ее части) в памяти, называемой сегментом. При перемещении проги в памяти достаточно скорректировать содержимое регистра сегментов программы. |
5 Архитектура IA32 Архитектурные св-ва IA-32, к ним относятся те, которые имеют место для всех процессоров Intel или, по крайней мере, существуют вне рамок конкретной микроархитектуры для большого числа моделей процессоров. Так как процессор в основном определяет логику работы компьютера, то и названия большинства общих архитектурных свойств и принципов IA-32 совпадают с названиями аналогичных свойств и принципов компьютера: номенклатура программно-доступных регистров; организация и способы адресации памяти; номенклатура режимов работы процессоров; организация и разрядность внешних интерфейсов ЭВМ; способы представления и форматы данных; набор и форматы машинных команд ЭВМ; порядок обработки прерываний. Все эти общие архитектурные свойства составляют программную модель процессора. Регистр процессора Регистр представляет собой цифровую электронную схему, служащую для временного хранения двоичных чисел. В процессоре имеется значительное количество регистров, большая часть которых используется самим процессором и недоступна программисту. Например, при выборке из памяти очередной команды она помещается в регистр команд. Программист обратиться к этому регистру не может. Имеются так же регистры, которые в принципе программно доступны, но обращение к ним осуществляется из программ операционной системы (например, управляющие регистры и теневые регистры дескрипторов сегментов). Этими регистрами пользуются в основном разработчики операционных систем. Основные регистры процессора, совместимого с Intel 386 IP (англ. Instruction Pointer) — регистр, обозначающий смещение следующей команды относительно кодового сегмента. IP — 16-битный (младшая часть EIP) EIP — 32-битный аналог Сегментные регистры — регистры указывающие на сегменты. CS,DS,SS,ES,FS,GS CS — указатель на кодовый сегмент. Связка CS:IP указывает на адрес в памяти следующей команды. Регистры данных — служат для хранения промежуточных вычислений. RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 — R15 — 64-битные EAX, EBX, ECX, EDX, EBP, ESI, EDI, ESP — 32-битные AX, BX, CX, DX — 16-битные AH, AL, BH, BL, CH, CL, DH, DL — 8-битные (половинки 16-ти битных регистров) например, AH - high AX - старшая половинка 8 бит AL - low AX – младшая половинка 8 бит Регистр флагов EFLAGS — содержит текущее состояние процессора. флаговые — хранят признаки результатов арифметических и логических операций; индексные — хранят индексы исходных и целевых элементов массива; указательные — хранят указатели на специальные области памяти (указатель текущей операции, указатель базы, указатель стэка); сегментные — хранят адреса и селекторы сегментов памяти; управляющие — хранят информацию, управляющую состоянием процессора, а также адреса системных таблиц.
|
7 Назначение и особенности языков ассемблера. Краткая характеристика ассемблеров nasm, tasm, masm Язык ассемблера (ЯА) – язык программир-я, понятия кот. отражают архитектуру компа. ЯА сод-т предложения, форматы команд и данных, кот. однозначно соот-ют возможностям конкретного компа. Каждому оператору соотв-ет одна команда компа. ЯА явл-ся системой обозн-ий, исп-мой для представления прог, записанных в коде компа. ЯА дает возм-ть задавать удобные формы адресации, исп-ть различ. системы счисления, обеспечивает доступ к регистрам компа. ЯА явл-ся языком низкого уровня. Для автомат-ции трансляции с ЯА в машинный язык созданы проги, наз. ассемблерами. На вход ассемблера подается исход. прога, написанная на ЯА. На выходе ассемблера выдается прога, сост-ая из команд машинного языка. Masm читaeт и acceмблиpyeт инcтpyкции языкa acceмблepa для пpoцeccopoв 8086/80286/80386 из иcxoднoгo фaйлa sourcefile. Oн coздaeт либo oбъeктный фaйл для кoмпoнoвки c имeнeм sourcefile.o, либo выпoлняeмый фaйл a.out. Tasm явл-ся мощным ассемблером, работающим с командной строкой, кот. воспринимает исходные файлы (с расширением .asm) и создает из них объектные модули (с расширением .obj). После этого можно исп-ть прогу-компоновщик TLINK.EXE, отлич. высокой скоростью компоновки, для компоновки полученных объектных модулей и создания выполняемых файлов (файлов с расширением .EXE). Расширенный ассемблер nasm разраб. исходя из принципов переносимости и модульности. Он поддерживает широкий диапазон форматов объектных файлов, включая форматы; способен также создавать простые бинарные файлы. Синтакс nasm макс. упрощен для понимания. |
8 Принципы построения ассемблерных прог. Описание сегментной структуры проги. Яз.прогр-ия ассемблер – язык прогр-ия, задающий действия отдельных команд условными обозначениями и позволяющий использовать символические обознач-ия обрабатываемых данных. Одной элементарной конструкции языка соответствует одна маш. команда, получаемая в рез-те трансляции. Синтаксис зависит от типа конкретного процессора. Действительная структура программы в маш. кодах включает сегменты памяти. Осн. их назначение – обеспечение защитой от ошибочного доступа маш. коды команд в области данных. Для описания сегментов служит спец. наименование директивы, обозначаемое SEGMENT (синонимом явл-ся SECTION). В простейшем случае директива сегмента имеет один аргумент, который задает имя описываемого сегмента (.text и .data) Место с которого начинает выполняться прога –точка входа. Метка точки входа на языке NASM объявляется видимой извне объектного модуля – директивой GLOBAL. Программа-компоновщик в Linux требует имени _start в качестве обознач-ия начала проги. В ассемблерах типа Intel для обозначения конца сегмента прог исп-ся директива ENDS, в ней д.б. записано имя сегмента, который она завершает. Для NASM: GLOBAL _start SEGMENT .text …машинные команды SEGMENT .data …описание данных Для TASM или MASM: имя_сегмента_кода SEGMENT имя_точки_входа: …машинные команды и служебные конструкции имя_сегмента_кода ENDS имя_сегмента_данных SEGMENT …описание данных имя_сегмента_данных ENDS END имя_точки_входа В современных ОС исходные описания сегментов исп-ют модификации сегмента данных: .data – для инициализируемых данных с заданием начального значения для каждой единицы исходного описания данных. Для размещения данных, исходное описание которых не содержит задания начального значения, принято наименование .bss или BSS. |
9 Средства описания данных в ассемблере. Для описания именованного места в памяти служат директивы, задаваемые ключевыми словами DB, DW, DD и DQ. Ключевые слова записываются строчными или прописными буквами. Наименование директив происходит от Define Byte, Define Word, Define Double word, Define word. Директива DB выделяет для данных 1 байт, DW - 2 байта, DD - 4 байта, а DQ - 8 байтов. Использование: Имя_области_данных DD oпucaние perv dw 4,7,11,29 – задает именованную область данных с именем perv, элементы этого описания состоят из слов (пар байтов). NASM различает строчные и прописные буквы в вводимых именах,а MASM и ТASM в режиме по умолчанию позволяют их не различать. Десятичные const запис-ся как последовательности десятичных цифр, которым может предшествовать знак минуса. Шестнадцатеричные const запис-ся последовательностями шестнадцатеричных цифр. В NASM для явного указания либо перед записью ставится идентифицирующий префикс (0x или $), либо за нею – идентифицир-ий суффикс(H). При исп-ии $ или H в шестнадцатеричн. const в кот. старшая цифра отлична от десятичной, в качестве первой цифры берется 0. Ассемблеры MASM и TASM допускают суффиксную форму записи числовых const, отличных от десятичных. Для записи двоичной const использ-ся послед-ть двоичных цифр со служебным символом В, а для записи восьмеричных const - послед-ть восьмереч. цифр завершается символом Q. В качестве значений можно исп-ть обознач-ия отдельных символов, кот. заключаются в апострофы (коды кот. в значение не попадают). db 'hello',13,10,'$'; восемь байтов, в первых пяти из кот. текст 'hello' db 0x55; байт содержит шестнадцатирич. число 0x55 dw 'a'; пара байтов, в младшем код буквы а, в старшем 0. Для описания неинициализир-ых данных в NASM сущ-ют директивы, задаваемые словами RESB, RESW, RESD и RESQ. имя_резервируемой_области RESx число_6айтов_в_области buffer resb 64;резервир-ся 64 байта word resw 1 ; резервир-ся 1 слово Для опис-ия области данных с повторяемыми знач-ми в NASM исп-ся конструкция TIMES. имя_рбласти_данных TIMES число описание_директивы buffer times 64 db 0 В MASM и TASM для повторения исп-ся конструкция DUP buffer db64dup(0) В качестве ср-ва резервир-ия в MASM и TASM исп-ся спец. метасимвол «?» buffer DB 64 DUP(?); резервир-ся 64 байта wordvar DW ? ; резервир-ся 1 слово Для введения далее использ-ых именованных числовых const исп-ся EQU имя_константы EQU выражение |
10 Простейшие способы адресации в архитектуре IA32 и средства их записи на ассемблере. Инфа для аппаратуры процессора - как добраться до содержимого операнда - находится в части машинного кода команды, называемой полем операнда, и ее истолкование называется способам адресации операнда. Регистровый: способ адресации относится к определенному операнду: MOV EDX, ЕАХ или MOV CL,654 Непосредственный: задание констант непосредственно в коде команды: MOV ECX,8 или MOV DL,’@’ Прямой: в соотв. части мнемокода записывается имя_области_данных (для NASM в квадратных скобках) или смещение_в_области_данных Если х dd 56 у dd -37 z dd 0 то команды MOV еах, [х] ADD еах, [у] MOV [z], еах ; z=x+y Для однозначного определенния в NASM введены модификаторы разрядности, задаваемые служебными словами BYTE, WORD и DWORD. Эти модификаторы ставятся перед теми операндами, разрядность которых необходимо уточнить: MOV BYTE [ххх],-127 ;7F MOV WORD [ххх],-127 ; FF7F MOV DWORD [ххх], -127 В MASM, TASM для явного задания размера исп-ся обозначения BYTE PTR, WORD PTR и DWORD PTR. Пример: MOV BYTEPTR [ххх], -127 MOV WORD PTR [xxx], -127 MOV DWORD PTR [xxx], -127
|
11 Обращения к базовым функциям ОС посредством прерываний. Использование в Linux. В стандартных библиотеках языка Си для любой ОС имеется функция выв. нижнего уровня, кот. имеет прототип unsigned int write(int handle, char*buffer, unsigned int size) кот. выводит символы текста из буфера buffer, заданного вторым его аргументом в файл, заданный хэндлом handle, причем выводит size байтов этого текста. В большинстве ОС для доступа к стандартным файлам служат стандартные значения хэндлов, равные О, 1 и 2. Именно, через хэндл=0, обеспечивается доступ к стандартному вводу, а хэндл=1 к выводу. Для вывода данных с помощью яз. ассемблера нужно записать послед-ть команд, которая по своим действиям равносильна вызову указанной выше функции write со значением первого аргумента=1. Путь доступа к внутренним подпрограммам ОС - программное прерывание: INT номер_прерывания где номер_прерывания - целое неотрицат. число <255. Доступ к внутренним функциям ОС ч/з программные прерывания возможен в ОС Linux и MS-DOS.
В Linux такие ф-ии вызываются ч/з команду INT80H а какая именно ф-ия нужна - задается числом в регистре еах (число д.б. занесено в регистр еах перед вып-ем команды INT 80H). Аргументы, заданные прототипом системной функции на Си, д.б. помещены в регистры ebx, ecx, edx, esi и edi. Для функции write Linux дают число 4, для ф-ии read - число 3, для exit число 1. GLOBAL _start SEGMENT .text _start: ; write(l, txt, 7)=<4>(ebx, ecx, edx) mov eax,4 ; N fimction=write mov ebx,1 ; N handle=1 (stdout) mov ecx, txt ; address of txt mov edx,7 ; number of byte int 80h mov eax,1 ; N function=exit int 80h SEGMENT .data txt db 'Privet!' |
12 Обращения к функциям ОС посредством прерываний. Использование в MS DOS. В стандартных библиотеках языка Си для любой ОС имеется функция выв. нижнего уровня, кот. имеет прототип unsigned int write(int handle, char*buffer, unsigned int size) кот. выводит символы текста из буфера buffer, заданного вторым его аргументом в файл, заданный хэндлом handle, причем выводит size байтов этого текста. В большинстве ОС для доступа к стандартным файлам служат стандартные значения хэндлов, равные О, 1 и 2. Именно, через хэндл=0, обеспечивается доступ к стандартному вводу, а хэндл=1 к выводу. Для вывода данных с помощью яз. ассемблера нужно записать послед-ть команд, которая по своим действиям равносильна вызову указанной выше функции write со значением первого аргумента=1. Путь доступа к внутренним подпрограммам ОС - программное прерывание: INT номер_прерывания где номер_прерывания - целое неотрицат. число <255. Доступ к внутренним функциям ОС ч/з программные прерывания возможен в ОС Linux и MS-DOS.
Большинство системных функций MS-DOS используют для доступа к ядру ОС номер прерывания 21h, само такое обращение запис-ся командой INT 21h. Номер функции при этом задается в регистре АН, остальные регистры не используют при этом общего правила. Вызов системной функции write требует номера функции 40h (он в регистре АН), при этом хэндл стандартного вывода, д.б. помещен в регистр ВХ, адрес в регистр DX, а число выводимых байтов - в регистр СХ. Вывод текста из именованной области txt и имеющий 7 символов: ; write(1, txt, 7)=<40h>(bx, dx, сx) mov ah,40h ; N function=write mov bx,1 ; N handle=1(hstdout) mov cx,7 ; number of byte mov dx, txt ; address of text int 21h
|
13 Средства преобразования ассемблерной программы в исполняемый файл. Программу необходимо преобразовать в исполняемый файл. Преобраз-ие осущ-ся транслятором с языка ассемблера. Этот транслятор явл-ся исполняемым файлом ОС и имеет в Linux имя nasm, в Windows - nasmw.exe. Эти трансляторы предназначены для использ-ия в режиме командной строки. Опция формата для файла результата: -f формат где параметр формат может принимать значения: bin - порождение простейшего варианта двоичного кода машинных команд и данные без к/л служебной или настроечной инфы, obj объектные файлы, кот. м.б. собраны в исполняемые компоновщиками link.exe, tlink.exe tlink32.exe и alink.exe. Формат Win32, называемый OMF(Object Microsoft Format), генерируется современными компиляторами фирмы Microsoft (masm.exe, cl.exe средой MS Visual C++). Формат elf - это стандартная форма объектных файлов, производимых компиляторами в Linux. Вызов транслятора nasm для Linux имеет вид: nasm –f elf имя_ассемблерного_файла Объектные файлы для Windows получают расширение OBJ, для Unix расширение .о Явное указание нужно при использ-ии формата bin, поскольку создается файл без расширения. Для получ-ия исполняемых файлов ОС MS DOS требуется расширение СОМ в имени этих файлов исп-ся опция явного указания имени результирующего файла: -о имя_резулътир-щего_файла В общ. случае м.б. использована и для др. форматов. Получене файла листинга: -l имя_файла_листинга В OC Linux исполняемый файл из объектных файлов создается с пом. компоновщика, кот. имеет наименование ld. Обычная форма: ld имя_объектного_файла создает исполняемый файл со стандартным именем a.out более сложная форма: ld -о имя_исполняемого_ файла имя_объектного_файла пример командного файла nasml: nasm -f elf $1.asm -l $ 1.lst ld –o $1.exe $1.o получение исполняемого файла progl: ./nasml progl Разработка прог, для MS-DOS, м.б. выполнена под любой из ОС типа MS Windows. Вызов транслятора NASMW.EXE, выполняемого в ОС типа Windows, для ассемблерных прог.выполняется в виде: nasmw -f bin -о имя_файла.соm имя_файла.аsm -l имя_файла_листинга использования командного файла stnasm.bat (при использ-ии Windows NT файла с именем slnasm.cmd), который содержит строку: nasmw -fbin -о %1.com –l % 1.lst % 1.asm путем вызова в виде: stnasm имя_без_расширения _файла_проги Порождается непосредственно исполняемый файл с расширением com, без построения промежуточных объектных файлов. Сам текст прог, для MS-DOS, должен использовать соглашения по доступу к системным функциям, принятые именно в этой ОС. |
14 Управление строками при выводе и ввод данных. В любой из ОС, ориентированных на диалоговое взаимодействие с пользователем, присутствуют простые средства управления выводом на экран: числовые значения управляющих символов 10 и 13. Причем для перевода на новую строку с автоматическим переходом в ее начало для Unix использ-ся управляющий символ со значением 10, а в MS-DOS указ-ые управляющие символы действуют независимо др. от др. Прога ожидает ввода текста (< 20 символов) и после отображает введенный текст с текстовым примечанием: GLOBAL _start SEGMENT .text _start: ;read(0,buf,20)=<3>(ebx,ecx,edx) mov eax,3 ; N fimction=write mov ebx,0 ; N handle=1 (stdout) mov ecx, buf ; address of txt mov edx,20 ; number of byte int 80h add eax,9;sum length txt+actual read mov edx, eax ; write(1,txt,len)=<4>(ebx,ecx,edx) mov eax,4 ; N function=write mov ebx,1 ; N handle=1 (stdout) mov ecx, txt ; address of txt int 80h mov eax,1 ; N fimction=exit int 80h SEGMENT .data txt db ‘Vvedeno:' buf times 20 db 0 в число символов, выводимых программой, входит и управляющий символ перевода строки, помещенный в буфер buf системной функцией read и учитываемый возвращаемый значением в регистре еах. |
15 Организация условных переходов. Командные ср-ва условных и безусловных переходов, особенности построения и использования. Условная конструкция разбивается на несколько команд. Условие вычисляется отдельной командой, а выбор выполняется другой командой по зафиксир-му результату вычисления условия. При этом осуществляется переход или не переход к командам оператора, находящийся внутри условной конструкции. Команда для вычисления условия: СМР операнд1, операнд2 Кот. сравнивает значения операндов, результат сравнения фиксируется в спец. регистре EFLAGS (регистр флагов). Это 32-битный регистр, но основное значение имеет его младшая 16-битная половина, обозначаемая просто FLAGS (отдельными битами отображается ситуация равенства нулю результата, его отрицательности, появления переполнения при выполнении некоторых операций). Команды условных переходов: Jcc Условие Знак JE равно = JNE не равно ≠ JG больше > JL меньше < JNL не меньше >= JGE >= JLE <= JA выше(above) JB ниже (below) JC по флагу CFпереноса Ветвление в три направления: CMP опер1, опер2 JL meta ; по < JG metb ; по > JE metkk ; по = Команда безусловного перехода: JMP метка оператор вида: IF условие THEN оператор1 ELSE оператор2 Запишется в виде: ; формирование условия Jncc метка_опер2 ... команды оператора1 по выполнению условия JMP метка_за метка_опер2: ... команды оператора2 метка_за: форма записи команд условного перехода порождает машинные команды, неспособные осуществлять переход далее чем на 127 байтов вперед и на 128 байтов назад. При указании условного перехода далее этого диапазона необходимо использовать модификатор: Jcc NEAR метка
|
16 Средства организации циклов в архитектуре IA32, их запись с помощью nasm, tasm (masm). Циклы можно реализовать на основе команд условных переходов, если в кач-ве параметра цикла использовать именованное поле или зарезервировать за ним некоторый регистр. MOV параметр,число_повторении метка_тела_цикла: команды тела цикла SUB параметр, 1 JG метка_тела_цикла или MOV параметр, 0 метка_тела_цикла: команды тела цикла ADD параметр, 1 (inc параметр) CMP параметр,число_повторений JNE метка_цикла или MOV параметр,число_повторений метка тела_цикла: команды тела цикла DEC параметр JG метка тела_цикла Реализация цикла с пом. служебного слова: LOOP. Значение параметра размещается стандартно в регистре ECX. MOV параметр, число_повторений метка_тела_цикла: команды тела цикла LOOP метка_тела_цикла При выполнении LOOP вначале значение регистра для параметра цикла (есх) уменьшается на единицу, а затем проверяется полученное значение на нуль!!!!!! Введены команды для предшеств-ей циклу проверки на 0 есх и сх: JECXZ метка_перехода JCXZ метка_перехода Использование LOOP с явным указанием регистра:на NASM: LOOP метка_тела_цикла, есх LOOP метка_тела_цакла, сх На MASM и TASM использование есх задается мемокодом LOOPD, а cx задается мнемокодом LOOP.
Команды манипуляций со стеком: PUSH операнд(регистр или место в памяти) – помещение для 16(32)-битных данных POP операнд – извлечение Построение вложенных циклов: MOV есх, число_повторений_внешн_цикла метка_начала_внешнего_цикла: PUSH есх MOV параметр, число_повторений_внутр_цикла команды тела цикла LOOP метка_нач_внутр_цикла POP есх LOOP метка_начала_внешн_цикла
Существуют более сложные варианты организации цикла. Переход по метке производится не просто по условию отличия от нуля текущего значения регистра параметра (есх или сх), а только в том случае, когда текущее условие, зафиксир-ое в регистре EFLAGS, отвечает дополнит-му условию "равно" или "не равно" (ecx≠0) И (флаг ZF установлен) для команд LOOPE и LOOPZ, (сх≠0) И (флаг ZF не установлен) для команд LOOPNE и LOOPNZ |
17 Особенности команд умножения и деления и их практическое применение. MUL 2множимое Разрядность 8 16 32 Результат в AX (DX,AX) EDX,EAX 1Множимое в AL AX EAX В AX и EAX помещ-ся младш. разряды рез-ов. MUL DL => AL*DL=AX MUL BX =>AX*BX=(DX,AX) MUL ECX =>EAX*ECX=(EDX,EAX) MUL DWORD [foo] – умнож. содержимого EAX на знач-ие числа запис-го в области из 4 байт начало кот. обозначено foo. Для умнож. чисел с учетом знака: IMULмножитель IMUL результат, множитель IMUL рез,множимое,множитель DIV делитель IDIV – с учетом знаков Разрядность 8 16 32 Делимое AX DX,AX EDX,EAX Частное AL AX EAX Остаток AH DX EDX ???????? |
18 Организация процедур в архитектуре IA32 и средства их построения на ассемблере. Подпрограммой наз-ся группа команд, которая может выполняться спец. запуском из другого места проги, причем после такого запуска далее продолжается выполнение проги за местом запуска. Запуск подпроги наз-ся вызовом подпроги (CALL). Подпрога, кот. обратилась к др. подпроге, наз-ся вызывающей, а которую вызвали, называется вызванной. В 32-битном регистре EIP (instruction pointer) автоматически поддерживается адрес следующей для выполнения команды. Вызов процедуры: CALL подпрога ;автоматически осущ-ет PUSH EPI ;JMP подпрога Команда REP (снимает из стека верхнее значение и помешает его в регистр EIP) обеспечивает выполнение команды по адресу возврата (адрес за командой CALL) Подпрограмма на NASM: имя_подпрограммы: команды подпрограммы ret В ассемблерах MASM и ТАSM: имя_подпрограммы PROC команды подпрограммы ret имя_подирограммы ENDP Косвенный эффект подпрограммы заключаться в том, что изменяются данные, используемые где-то вне подпрограммы. Поэтому в начале подпроги нужно сохранить значения регистров, использ-ых подпрогой, а в конце подпроги - восстановить значения этих регистров, используя запомненные значения (место для временного хранения содержимого регистров - это стек). имя_подпрограммы: PUSH регистр 1 РUSН регистр 2 … РUSН регистр N команды подпрограммы POP pezucmp N … РОР регистр 2 POP регистр 1 ret команда PUSHA исп-ся для запоминания, а команда РОРА для восстановления регистров: ЕАХ, ЕВХ, ЕСХ, EDX, ESP, EBP, ESI, EDI. |
19 Неарифметические операции над двоичными кодами с помощью команд. Для выполнения поразрядной логической операции И служит команда с мнемокодом AND: AND операнд1, операнд2 Применение команды с константным вторым операндом - маской логической операции: AND al, 3Fh - сбрасывает в нуль два старших бита двоичного кода в регистре AL. Для вып-ия поразрядной логич. операции ИЛИ служит команда OR: OR операнд1, операнд2 Применение с маской для выборочной установки в еденицу отдельных битов двоичного кода первого операнда. XOR операнд1, операнд2 для инверсии тех двоичных разрядов первого операнда, которым соотв-ют единичные биты во втором операнде. Операция поразрядного инвертирования двоичного кода единственного ее операнда: NOT операнд Команды сдвига SHL и SHR (Shift, Left и Right) задают сдвиг двоичного кода в первом операнде на число разрядов, заданное во втором операнде: SHL операнд, число SHR операнд, число Биты, вдвигаемые в этих командах, всегда нулевые. Имеются команды арифметического сдвига SAL, SAR и циклического сдвига ROL, ROR, RCL, RCR. процедура call wrhex hal отображает на экране значение младшей половины регистра AL, выдавая его всегда в виде одной шестнадцатеричной цифры: ;procedure wrhex_hal wrhex_hal: push eax push ebx push ecx push edx and al, OFh cmp al, 10 jge hexa add al, '0' jmp wrchar hexa: add al,'A'-10 ;из AL вычесть 10 и прибавить значение'А' wrchar: mov [cha],al mov eax,4 ; N function=write mov ebx,1 ; N handle=l (stdout) mov edx, 1 ; number of byte mov ecx, cha ; address of cha int 80h pop edx pop ecx pop ebx pop eax ret ; end procedure wrhex_hal |
20 Косвенно-регистровая адресация и ее использование. Косвенно-регистровая адресация - регистр, заданный для доступа к значению операнда, содержит не само значение операнда, а его адрес (фактически смешение относит-но начала сегмента - относительный адрес). Задается на ассемблере записью операнда в виде [имя_регистра]. В кач. регистра можно применять: ЕАХ, ЕВХ, ЕСХ, EDX, ESI, EDI. MOV есх, чтисло_элементов_в_массиве MOV edx, tabla povt: mov al, [edx] анализ очередного байта, находящегося в регистре AL INC edx LOOP povt
|
21 Использование индексной адресации данных. Индексная адресация - использование в записи операнда регистра, содержащего индекс - порядковый номер байта, относительно начала массива (значения индексов в этом способе адресации изменяются, начиная с нуля). На ассемблере NASM операнды записываются в форме [имя_массива + индексный регистр] или [смещение + индексный регистр]. операнды [tabla+ESI],[buffer+EDX] На MASM и TASM индексный способ адресации операнда записывается в форме: имя_массива [индексный регистр] Суммирование элементов массиива, где каждый элемент занимает один байт: mov eax,0 mov esi, 0 met: add eax, [tabla + esi] inc esi cmp esi, 10 jl met |