Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

shpory_spo 4йкурс

.doc
Скачиваний:
33
Добавлен:
15.06.2014
Размер:
307.2 Кб
Скачать

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 имеет вид: nasmf 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

Соседние файлы в предмете Системное программное обеспечение