Основы работы в ассемблере. Основы HTML
Содержание
Введение Раздел 1.Основы работы в ассемблере 1.1.Теоретическая часть 1.1.1.Основные понятия 1.1.2.Регистры ЦП 1.1.3.Команды 1.2.Практическая часть Раздел 2.Основы HTML 2.1.Теоретическая часть 2.1.1.Работа с текстом, изображения, мультимедия 2.1.2.Работа с таблицами 2.1.3.Фреймы и формы 2.2.Практичекая часть Заключение Список используемой литературы |
Стр.3 Стр.5 Стр.5 Стр.5 Стр.5 Стр.7 Стр.13 Стр.32 Стр.32 Стр.32 Стр.36 Стр.41 Стр.46 Стр.63 Стр.64 |
Введение
Учебная практика по МДК 01.01 “Системное программирование” и МДК 01.03 “WEB-программирование” предназначена для закрепления теоретических знаний, практических навыков и умений в разработке программ на языке Ассемблер и на языке HTML 5.0 соответственно.
Программирование - это процесс составления и подготовки деятельности программы, которое при выполнении должно привести к определённым результатам.
Машинный код система команд конкретной вычислительной машины (процессора), которая интерпретируется непосредственно процессором. Команда, как правило, представляет собой целое число, которое записывается в регистр процессора. Процессор читает это число и выполняет операцию, которая соответствует этой команде. Язык программирования низкого уровня (низкоуровневый язык программирования) - это язык программирования, максимально приближенный к программированию в машинных кодах. В отличие от машинных кодов, в языке низкого уровня каждой команде соответствует не число, а сокращенное название команды (мнемоника). Например, команда ADD - это сокращение от слова ADDITION (сложение). Поэтому использование языка низкого уровня существенно упрощает написание и чтение программ (по сравнению с программированием в машинных кодах).
Язык ассемблера - это машинно-зависимый язык низкого уровня, в котором короткие мнемонические имена соответствуют отдельным машинным командам. Используется для представления в удобочитаемой форме программ, записанных в машинном коде.
Язык ассемблера помогает раскрыть все секреты аппаратного и программного обеспечения. С его помощью можно получить представление о том, как аппаратная часть взаимодействует с операционной системой и как прикладные программы обращаются к операционной системе. Большинство программистов работают с языками высокого уровня, где отдельное утверждение преобразовывается во множество процессорных команд. Ассемблер язык машинного уровня; каждая команда непосредственно интерпретируется в машинный код, что дает основание считать его языком низкого уровня. Наиболее часто язык ассемблера используется для написания дополнений к операционной системе или для написания программ прямого доступа к аппаратуре. Он необходим также при оптимизации критических блоков в прикладных программах с целью повышения их быстродействия.
HTML (от англ. HyperTextMarkupLanguage - «язык гипертекстовой разметки») - стандартный язык разметки документов во Всемирной паутине. Большинство веб-страниц содержат описание разметки на языке HTML (или XHTML). Язык HTML интерпретируется браузерами; полученный в результате интерпретации форматированный текст отображается на экране монитора компьютера или мобильного устройства.
HTML - теговый язык разметки документов. Любой документ на языке HTML представляет собой набор элементов, причём начало и конец каждого элемента обозначается специальными пометками - тегами. Элементы могут быть пустыми, то есть не содержащими никакого текста и других данных (например, тег перевода строки<br>). В этом случае обычно не указывается закрывающий тег. Кроме того, элементы могут иметь атрибуты, определяющие какие-либо их свойства (например, размер шрифта для элементаfont). Атрибуты указываются в открывающем теге.
Web-страницы - это документы в формате HTML, содержащие текст и специальные тэги (дескрипторы) HTML. По большому счету тэги HTML необходимы для форматирования текста (т.е. придания ему нужного вида), который "понимает" браузер. Документы HTML хранятся в виде файлов с расширением .htm или .html.
Раздел 1.Основы работы в ассемблере
1.1.Теоретическая часть
1.1.1.Основные понятия
Ассемблер транслятор исходного текста программы, написанной на языке ассемблера, в программу на машинном языке.
Как и сам язык, ассемблеры, как правило, специфичны для конкретной архитектуры, операционной системы и варианта синтаксиса языка. Вместе с тем существуют мультиплатформенные или вовсе универсальные (точнее, ограниченно-универсальные, потому что на языке низкого уровня нельзя написать аппаратно-независимые программы) ассемблеры, которые могут работать на разных платформах и операционных системах. Среди последних можно также выделить группу кросс-ассемблеров, способных собирать машинный код и исполняемые модули (файлы) для других архитектур и ОС.
Ассемблирование может быть не первым и не последним этапом на пути получения исполнимого модуля программы. Так, многие компиляторы с языков программирования высокого уровня выдают результат в виде программы на языке ассемблера, которую в дальнейшем обрабатывает ассемблер. Также результатом ассемблирования может быть не исполнимый, а объектный модуль, содержащий разрозненные блоки машинного кода и данных программы, из которого (или из нескольких объектных модулей) в дальнейшем с помощью редактора связей может быть получен исполнительный файл.
Переносимые ассемблеры
Также существует открытый проект ассемблера, версии которого доступны под различные операционные системы, и который позволяет получать объектные файлы для этих систем. Называется этот ассемблер NASM(Netwide Assembler).
YASM это переписанная с нуля версия NASM под лицензией BSD (с некоторыми исключениями).
Flat asembler (fasm) молодой ассемблер под модифицированной для запрета перелицензирования (в том числе под GNU GPL BSD-лицензией. Есть версии для KolibriOS,Linux,DOS и Windows; использует Intel-синтаксиз и поддерживает инструкции x86-64.
1.1.2.Регистры ЦП
Для выполнения арифметических действий, пересылки данных и адресации, компьютер имеет ряд регистров. Регистр - это область памяти для временного хранения данных. По назначению различают:
Аккумуляторы хранение промежуточных результатов арифметических и логических операций, инструкций ввода-вывода.
Флаговые хранение признаков результатов арифметических и логических операций.
Общего назначения хранение операндов арифметических и логических выражений, индексы, адреса.
Индексные индексы исходящих и целевых элементов массива.
Указательные указатели на специальные области памяти, указатели текущей операции, указатели базы, указатели стека.
Сегментные адреса и селекторы сегментов памяти.
Управляющие информация управляющая состоянием процессора, адреса системных таблиц.
Регистры общего назначения
ЕАХ (Accumulator) хранение промежуточных данных
EBX (Base) хранение базового адреса
ECX (Counter) регистр-счетчик применяется в командах, производящих некоторые повторяющееся действия, его использование за частую не явно скрыто в алгоритме работы команды.
EDX(Data)хранение промежуточных данных. Данные Регистры являются 32-разрядными и делятся на две части по 16 бит, старшая часть не доступна, а младшая тоже делится на две части по 8 бит.
Регистры указатели
ESI и EDIиндексы источника и приемника, используются при обработке длинных полей.
EBP и ESPуказатели базы и вершины, используются при работе со стеком.
Эти регистры также 32-разрядные и имеют младшие 16-ти разрядные части SI, DI, BP, SP соответственно.
Сегментные регистры
Структура программы разделена на блоки сегменты, выделяют следующие типы сегментов:
Сегмент кода содержит команды программы, адрес сегмента кода с которым в настоящий момент работает программа располагается в сегментном регистре сs.
Сегмент данных содержит данные, которыми оперирует программа. Программа одновременно может работать с несколькими сегментами данных. Адрес основного сегмента данных располагается в регистре ds, а дополнительных в es, gs, fs.
Сегмент стека специальная область памяти, ее адрес располагаться в регистре ss.
Сегментные регистры являются 16-разрядными.
Регистр указателя инструкций
EIP-32
IP -16
Содержит смещение следующей подлежащей выполнению команды относительно начала сегмента кода. После выполнения команды меняется автоматически.
Полный адрес команды формирует пара регистров CS:IP.
Регистр флагов
EFLAGS-32
FLAGS -16
Биты этих регистров называются флагами.
Различают флаги состояния, управляющие, системные и зарезервированные флаги.
Флаг переноса CF
(Carry Flag) идентифицирует перенос или заем при выполнении арифметических операций, а также служит индикатором ошибки при обращении к системным функциям.
Флаг паритета PF
(Parity Flag) устанавливается в 1, если младшие 8 бит результата операции содержат четное число двоичных единиц.
Флаг вспомогательного переноса AF
(Auxiliary Flag) используется в операциях над упакованными двоично-десятичными числами.
Он идентифицирует перенос или заем из старшей тетрады (бита 4).
Флаг нуля ZF
(ZeroFlag) устанавливается в 1, если результат операции равен нулю.
Флаг знака SF
(SignFlag) показывает знак результата операции, устанавливаясь в 1 при отрицательном результате.
Флаг переполнения OF
(OverflowFlag) фиксирует переполнение,т.е. выход результата операции за пределы допустимого для данного процессора диапазона значений.
Флаги состояния автоматически устанавливаются процессором после выполнения каждой команды.
Управляющий флаг трассировки TF
(TraceFlag) используется в отладчиках для осуществления пошагового выполнения программы. Если TF = 1, то после выполнения каждой команды процессор реализует процедуру прерывания 1 (через вектор прерывания с номером 1).
Управляющий флаг разрешения прерываний IF
(InterruptFlag) разрешает (если равен 1) или запрещает (если равен 0) процессору реагировать на прерывания от внешних устройств.
Управляющий флаг направления DF
(DirectionFlag) используется особой группой команд, предназначенных для обработки строк.Если DF = 0, строка обрабатывается в прямом направлении, от меньших адресов к большим; если DF = 1, обработка строки идет в обратном направлении.
1.1.3.Команды
Команды пересылки данных. Команды пересылки данных осуществляют обмен данными и адресами между ячейками памяти и регистрами или портами ввода-вывода.
Эти команды разделены на четыре группы:
- команды общего назначения,
- команды ввода-вывода,
- команды пересылки адресов
- и команды пересылки флагов.
Основная команда общего назначения MOV (MOVe переслать) может переслать байт или слово между регистром и ячейкой памяти или между двумя регистрами. Она может также переслать непосредственно адресуемое значение в регистр или ячейку памяти.
Команда MOV имеет следующий формат: MOV приемник, источник.
Команды работы со стеком. Для временного сохранения данных (содержимого регистра или ячейки памяти) удобно использовать стек.
Для работы со стеком есть две команды
PUSH (поместить слово в стек) и POP (извлечь слово из стека). Команда PUSH помещает содержимое регистра или ячейки памяти размером в слово на вершину стека. Команда POP, наоборот, снимает слово с вершины стека и помещает его в регистр или ячейку памяти.
Команды PUSH и POP имеют следующие форматы:
PUSH источник
POP приемник.
Будучи взаимно обратными командами, PUSH и POP обычно используются парами, т.е. каждой команде PUSH в программе должна соответствовать команда POP.
Вершина стека это ячейка в сегменте стека, адрес которой содержится в указателе стека SP.
Регистр SP всегда указывает на слово, помещенное в стек последним.
Следовательно, команда PUSH вычитает 2 из значения указателя стека, а затем пересылает операнд-источник в стек.
Команды ввода-вывода. Команды ввода-вывода используются для взаимодействия с периферийными устройствами системы.
Они имеют формат:
IN аккумулятор,порт OUT порт, аккумулятор
Где аккумулятор регистр AL при обмене байтами или регистр AX при обмене словами. Операндом порт может быть десятичное число от 0 до 255, что позволяет адресоваться к 256 устройствам.
Команды пересылки адреса. Команды пересылки адреса передает не содержимое переменных, а их адреса.
Команда LEA (load effective address загрузить эффективный адрес) пересылает смещение ячейки памяти в любой 16-битовый регистр общего назначения, регистр указателя или индексный регистр.
Она имеет формат: LEA регистр16,память16
Где операнд память16 должен иметь атрибут WORD.
Сложение и вычитание. Для сложения и вычитания используются инструкции ADD и SUB. ADD прибавляет содержимое операнда- источника (правый) к содержимому операнда приемнике и сохраняет результат в операнде приемнике.
SUB работает так же, за исключением того, что он вычитает операнд источника из операнда приемника.
Команды приращения и уменьшения приемника на единицу. Когда ассемблерной программе требуется производить сложение, хорошо, если добавляемое значение это 1.
Это называется инкремент.
Аналогично, когда значение 1 вычитается из регистра или переменной это называется декремент.
Для таких операций, как изменение счетчика цикла или изменение регистра указателя при просмотре памяти, Вы используете инкремент и декремент.
В соответствии с частым использованием инкремента и декремента ассемблер предоставляет инструкции INC и DEC.
Как можно, ожидать INC прибавляет к регистру или переменной 1 и DEC вычитает 1 из регистра или переменной.
Умножение и деление. Инструкция MUL умножает два 8 или 16-битных беззнаковых сомножителя, генерируя 16 или 32- битное число.
Один из сомножителей при умножении 8-битовых чисел должен быть запомнен в AL; другой может быть в любом 8-битном регистре общего назначения или быть операндом памяти. MUL всегда сохраняет 16 битный результат в AX. Например, MOVAL,25 MOV DH,40 MUL DH ... умножает AL на DH, сохраняя результат 1000 в AХ.
Заметим, что MUL требует только один операнд; другой сомножитель всегда в AL (или в AX в случае умножения слов).
При умножении слов один сомножитель должен быть сохранен в AX, в то время как другой может быть любым 16-битным регистром общего назначения или операндом памяти. MUL помещает 32-битный результат в DX:AX с младшими 16 битами результата в AX и старшими 16 битами результата в DX.
Команда DIV (divide разделить) выполняет деление чисел без знака, а команда IDIV выполняет деление чисел со знаком.
Команды имеют формат DIV источник IDIV источник
Где источник делитель размеров в байт или слово, находящееся в регистре общего назначения или в ячейке памяти.
Делимое должно иметь двойной размер; оно извлекается из регистра AX (при делении на 8-битовое число) или из регистров DX и AX при делении на 16-битовое число).
Результат возвращается следующим образом: Если операнд-источник представляет собой байт, то частное возвращается в регистр AL, а остаток в AH.
Если операнд-источник слово, то частное возвращается в AX, а остаток в регистр DX.
Изменение знака. Инструкции NEG может изменить знак содержимого регистра общего назначения или переменной.
Логические операции. Ассемблер поддерживает полный набор инструкций, которые производят логические операции, включая END, OR, XOR и NOT.
AND устанавливая каждый бит в назначении в 1 только тогда, когда соответствующие биты источников 1
Инструкция OR устанавливая каждый бит в назначении в 1 если хотя бы 1 соответствующий исходный бит установлен в 1. OR позволяет Вам устанавливать исходный бит(ы) в 1.
Инструкция устанавливая каждый бит назначения в 1, только если 1 из соответствующих битов источника был 0, а другой 1
Сдвиги и циклические сдвиги. Микропроцессор Intel обеспечивает ряд способов для передвижения битов в регистре или переменной памяти вправо или влево.
Простейший из них - логический сдвиг. SHL (сдвиг влево, так же известный как SAL) передвигает каждый бит в назначении на 1 разряд влево или в направлении к старшему значащему биту.
Умножение при помощи сдвига много быстрее, чем использование инструкции MUL.
SHR (сдвиг вправо) во многом подобен SHL: он сдвигает биты операнда вправо, либо на 1, либо на CL бит, при этом младший значащий бит сдвигается во флаг переноса, а старший значащий бит устанавливается в 0.
SHR - это быстрый способ беззнакового деления на 2.
SAR - арифметический сдвиг вправо, такой же как SHR, за исключением того, что в SAR старший значащий бит операнда сдвигается вправо на следующий бит и затем возвращается в самого себя.
Работа со строками. В ассемблере под строкой понимается последовательность соседних байтов или слов. В связи с этим все строковые команды имеют две разновидности - для работы со строками из байтов (в мнемонику операций входит буква B) и для работы со строками из слов (в мнемонику входит W).
Имеются следующие операции над строками:
- пересылка элементов строк (в память, из памяти, память-память);
- сравнение двух строк;
- просмотр строки с целью поиска элемента, равного заданному.
Каждая из этих операций выполняется только над одним элементом строки, однако, одновременно происходит автоматическая настройка на следующий или предыдущий элемент строки.
Имеются специальные команды повторения (REP и др.), которые заставляют следующую за ними строковую команду многократно повторяться (до 216 раз), в связи с чем, такая пара команд позволяет обработать всю строку, причем намного быстрее, чем запрограммированный цикл.
Команда Lea. LEA SI,<начальный/конечный адрес строки> Если же надо загрузить сразу оба регистра DS и SI, тогда можно воспользоваться командой LDS SI,m32 которая в регистр SI заносит первое слово, а в регистр DS - второе слово из двойного слова, имеющего адреc m32 (таким образом, по адресу m32+2 должен храниться сегмент, а по адресу m32 - смещение начального или конечного элемента строки). Начальную загрузку регистров ES и DI обычно осуществляют одной командой
LES DI,m32 которая действует аналогично команде LDS. Перечислим вкратце строковые команды ассемблера.
Команда загрузки элемента строки в аккумулятор (LODSB или LODSW) пересылает в регистр AL или AX очередной элемент строки, на который указывает пара DS:SI, после чего увеличивает (при DF=0) или уменьшает (при DF=1) регистр SI на 1 или 2. Команда записи аккумулятора в строку (STOSB или STOSW) заносит содержимое регистра AL или AX в тот элемент строки, на который указывает пара ES:DI, после чего изменяет регистр DI на 1 или 2.
Команда пересылки строк (MOVSB или MOVSW) считывает элемент первой строки, определяемый парой DS:SI, в элемент второй строки, определяемый парой ES:DI, после чего одновременно меняет регистры SI и DI.
Команда сравнения строк (CMPSB или CMPSW) сравнивает очередные элементы строк, указываемые парами DS:SI и ES:DI, и результат сравнения (равно, меньше и т.п.) фиксирует в флагах, после чего меняет регистры SI и DI.
Команда сканирования строки (SCASB или SCASW) сравнивает элемент строки, адрес которого задается парой ES:DI, со значением регистра AL или AX и результат сравнения фиксирует в флагах, после чего меняет содержимое регистра DI.
Перед любой строковой командой можно поставить одну из двух команд, называемых "префиксами повторения", которая заставит многократно повториться эту строковую команду.
Команды переходов. В систему команд ассемблера входит обычный набор команд перехода: безусловные и условные переходы, переходы с возвратами и др.
По способу изменения счетчика команд переходы делятся на абсолютные и относительные. Если в команде перехода указан адрес (смещение) той команды, которой надо передать управление, то это абсолютный переход.
Однако в команде может быть указана величина (сдвиг), которую надо добавить к текущему значению регистра IP, чтобы получился адрес перехода, и тогда это будет относительный переход при этом сдвиг может быть положительным и отрицательным, так что возможен переход вперед и назад.
По величине сдвига относительные переходы делятся на короткие (сдвиг задается байтом) и длинные (сдвиг - слово).
Абсолютные же переходы делятся на прямые и косвенные:
при прямом переходе адрес перехода задается в самой команде, а при косвенном - в команде указывается регистр или ячейка памяти, в котором (которой) находится адрес перехода
JMP но в зависимости от типа операнда, ассемблер формирует разные машинные команды. 1) Внутрисегментный относительный короткий переход.
Циклы. Цикл это ничего более, чем блок кода, который заканчивается условным переходом так, что этот код может выполняться постоянно, до тех пор, пока не выполнится условие окончания. Циклы используются для обработки массивов, проверки статуса портов ввода-вывода, пока не будет достигнуто определенное состояние, очистки блоков памяти, чтения строк с клавиатуры, вывода строк на экран и т.п. Поэтому они часто используются, и Ассемблер предоставляет несколько специальных инструкций для циклов: LOOP, LOOPE, LOOPNE и JCXZ.
Когда Вам нужен цикл, который повторяется до тех пор, пока счетчик не достигнет нуля, загрузите счетчик в CX и используйте инструкцию LOOP.
Процедуры в языке ассемблера. команде CALL, когда надо вызвать процедуру. Это же имя должно быть повторено в директиве ENDP, заканчивающей описание процедуры.
Предложения между этими двумя директивами образуют тело процедуры (подпрограмму).
Имя процедуры является фактически меткой первой из команд тела, поэтому данную команду не надо специально метить
Прерывания INT. Команда INT прерывает обработку программы, передает управление в DOS или BIOS для определенного действия и затем возвращает управление в прерванную программу для продолжения обработки.
Наиболее часто прерывание используется для выполнения операций ввода или вывода.
Формат команды INT тип_прерывания
Для выхода из программы на обработку прерывания и для последующего возврата команда INT выполняет следующие действия: - уменьшает указатель стека на 2 и заносит в вершину стека содержимое флагового регистра; - очищает флаги TF и IF; - уменьшает указатель стека на 2 и заносит содержимое регистра CS в стек; - уменьшает указатель стека на 2 и заносит в стек значение командного указателя; - вычисляет адрес вектора прерывания, умножая тип_прерывания на 4; загружает второе слово вектора прерываний в регистр CS; загружает в IP первое слово вектора прерывания; -обеспечивает выполнение необходимых действий; - восстанавливает из стека значение регистра и возвращает управление в прерванную программу на команду, следующую после INT.
1.2. Практическая часть
Лабораторная работа № 1
Тема: Регистры,памяти и логическая адресация
Задание: Написать программу “Получение данных из командной строки” на языке Ассемблер
1)Запустил программу MASM32 Editor
2)Написал текст исходного кода
.486
.model flat, stdcall
optioncasemap: none
include/masm32/include/windows.inc
include/masm32/include/user32.inc
include/masm32/include/kernel32.inc
includelib/masm32/lib/user32.lib
includelib/masm32/lib/kernel32.lib
include/masm32/macros/macros.asm
uselib masm32, comctl32, ws2_32
.data
.code
start:
callGetCommandLine
push 0
pushchr$("Command Line")
pusheax
push 0
callMessageBox
push 0
callExitProcess
endstart
3)Выполнил отладку программы командой project-run program
4)Создал exe-файл
5)Запустил программу OllyDbg.Просмотрел код
Лабораторная работа №2
Тема: Передача параметров через стек
Задание 1: Передача параметров через стек, возврат результата через регистр EAX.
1)Запустил программу MASM32 Editor
2)Написал текст исходного кода
.686
.model flat, c
optioncasemap: none
include\masm32\include\windows.inc
include\masm32\include\kernel32.inc
includelib\masm32\lib\kernel32.lib
.data
add 76
b dd-8
ddd ?
.code
program:
push b
push a
call Procedure
add esp,8
movd,eax
push 0
Procedure proc
moveax,[esp+4]
movedx,[esp+8]
subeax,edx
ret
Procedureendp
endprogram
3)Выполнил отладку программы командой project-run program
4)Создал exe-файл
5)Запустил программу OllyDbg.Просмотрел код
Задание 2: Передача параметров через стек, возврат результат по адресу.
1)Запустил программу MASM32 Editor
2)Написал текст исходного кода
.486
.model flat, stdcall
optioncasemap:none
include/masm32/include/windows.inc
include/masm32/include/kernel32.inc
includelib/masm32/lib/kernel32.lib
.data
add 76
b dd-8
ddd ?
.code
program:
push offset d
push b
push a
call Procedure
addesp, 8
movd,eax
push 0
Procedure proc
moveax,[esp+4]
movedx,[esp+8]
subeax,edx
movedx,[esp+12]
mov [edx],eax
ret
Procedure endp
endprogram
3) Выполнил отладку программы командой project-run program
4)Создал exe-файл
5)Запустил программу OllyDbg.Просмотрел код
Лабораторная работа №3
Тема: Команды обработки данных на языке Ассемблер.
Задание: Сложение двух чисел
1)Запустил программу MASM32 Editor
2)Написал текст исходного кода
.486
.model flat, stdcall
optioncasemap:none
include/masm32/include/windows.inc
include/masm32/include/user32.inc
include/masm32/include/kernel32.inc
includelib/masm32/lib/user32.lib
includelib/masm32/lib/kernel32.lib
include/masm32/macros/macros.asm
uselib masm32,comctl32,ws2_32
.data
.code
start:
moveax, 123
movebx, -90
addeax, ebx
testeax, eax
jz zero
invoke MessageBox,0, chr$("Вeaxне 0!"), chr$("info"), 0
jmplexit
zero:
invokeMessageBox, 0, chr$("Вeax 0!"), chr$("info"), 0
lexit:
invokeExitProcess, 0
endstart
3) Выполнил отладку программы командой project-run program
4)Создал exe-файл
5)Запустил программу OllyDbg.Просмотрел код
Лабораторная работа №4
Тема: Применение команд цикла на языке Ассемблер
Задание 1:Организация цикла.Repeat
1)Запустил программу MASM32 Editor
2)Написал текст исходного кода
.486
.model flat, stdcall
optioncasemap:none
include/masm32/include/windows.inc
include/masm32/include/user32.inc
include/masm32/include/kernel32.inc
includelib/masm32/lib/user32.lib
includelib/masm32/lib/kernel32.lib
include/masm32/macros/macros.asm
uselib masm32,comctl32,ws2_32
.data
msg_titledb "Title",0
A DB 1h
bufferdb 128 dup(?)
formatdb "%d",0
.code
start:
mov AL, A
.REPEAT
inc AL
.UNTIL AL==7
invokewsprintf, addr buffer, addr format, AL
invokeMessageBox, 0, addr buffer, addrmsg_title, MB_OK
invokeExitProcess, 0
endstart
3) Выполнил отладку программы командой project-run program
4)Создал exe-файл
5)Запустил программу OllyDbg.Просмотрел код
Задание 2: Организация цикла While
1)Запустил программу MASM32 Editor
2)Написал текст исходного кода
.486
.model flat, stdcall
optioncasemap:none
include/masm32/include/windows.inc
include/masm32/include/user32.inc
include/masm32/include/kernel32.inc
includelib/masm32/lib/user32.lib
includelib/masm32/lib/kernel32.lib
include/masm32/macros/macros.asm
uselib masm32,comctl32,ws2_32
.data
msg_titledb "Title",0
A DB 1h
bufferdb 128 dup(?)
formatdb "%d",0
.code
start:
moveax, 1
movedx, 1
.WHILE edx==1
inceax
.IF eax==7
.BREAK
.ENDIF
.ENDW
invokewsprintf, addr buffer, addr format, AL
invokeMessageBox, 0, addr buffer, addrmsg_title, MB_OK
invokeExitProcess, 0
endstart
3)Выполнил отладку программы командой project-run program
4)Создал exe-файл
5)Запустил программу OllyDbg.Просмотрел код
Лабораторная работа 5
Тема: Программирование действий с массивами данных на языке Ассемблер
Задание: Сумма всех элементов массива
1)Запустил программу MASM32 Editor
2)Написал текст исходного кода
.486
.model flat, stdcall
option casemap:none
include/masm32/include/windows.inc
include/masm32/include/user32.inc
include/masm32/include/kernel32.inc
includelib/masm32/lib/user32.lib
includelib/masm32/lib/kernel32.lib
include/masm32/macros/macros.asm
uselib masm32,comctl32,ws2_32
.data
msg_title db "Title",0
A DB 1h
x dd 0,1,2,3,4,5,6,7,8,9,10,11
n dd 12
buffer db 128 dup(?)
format db "%d", 0
.code
start:
mov eax, 0
mov ecx, n
mov edx, 0
L:add eax, x[ebx]
add ebx, type x
dec ecx
cmp ecx, 0
jne L
invoke wsprintf, addr buffer, addr format, AL
invoke MessageBox, 0, addr buffer, addr msg_title, MB_OK
invoke ExitProcess, 0
end start
3)Выполнил отладку программы командой project-run program
4)Создал exe-файл
5)Запустил программу OllyDbg.Просмотрел код
Лабораторная работа 6
Тема: Особенности работы с процедурами на языке Ассемблер
Задание 1:Передача параметров и возврат из процедуры с использованием соглашения о вызовах stdcall
1)Запустил программу MASM32 Editor
2)Написал текст исходного кода
.686
.model flat, stdcall
option casemap:none
include/masm32/include/windows.inc
include/masm32/include/kernel32.inc
includelib/masm32/lib/kernel32.lib
.data
x dd 0
y dd 4
.code
program:
push y
push x
call Procedure
push 0
call ExitProcess
Procedure proc
ret 8
Procedure endp
end program
3)Выполнил отладку программы командой project-run program
4)Создал exe-файл
5)Запустил программу OllyDbg.Просмотрел код
Задание 2: Передача параметров и возврат из процедуры с использованием соглашения о вызовах cdecl
1)Запустил программу MASM32 Editor
2)Написал текст исходного кода
.686
.model flat, с
option casemap:none
include/masm32/include/windows.inc
include/masm32/include/kernel32.inc
includelib/masm32/lib/kernel32.lib
.data
x dd 0
y dd 0
.code
program:
push y
push x
call Procedure
add esp, 8
push 0
Procedure proc
ret
Procedure endp
end program
3) Выполнил отладку программы командой project-run program
4)Создал exe-файл
5)Запустил программу OllyDbg.Просмотрел код
Задание 3: Рекурсивная процедура вычисления факториала целого беззнакового числа. Процедура получает параметр через стек и возвращает результат через регистр EAX
1)Запустил программу MASM32 Editor
2)Написал текст исходного кода
.686
.model flat, c
option casemap:none
include/masm32/include/windows.inc
include/masm32/include/kernel32.inc
includelib/masm32/lib/kernel32.lib
.data
a dd 76
b dd -8
d dd ?
.code
program:
push offset d
push b
push a
call factorial
add esp, 8
mov d, eax
push 0
factorial proc
mov eax,[esp+4]
test eax,eax
jz L1
dec eax
push eax
call factorial
add esp,4
mul dword ptr[esp+4]
jmp L2
L1:inc eax
L2:ret
factorial endp
end program
3)Выполнил отладку программы командой project-run program
4)Создал exe-файл
5)Запустил программу OllyDbg.Просмотрел код
Лабораторная работа 7
Тема: Работа со строками в языке Ассемблер.
Задание: Расчет формулы на Ассемблере
1)Запустил программу MASM32 Editor
2)Написал текст исходного кода
.486
.model flat, stdcall
option casemap:none
include/masm32/include/windows.inc
include/masm32/include/user32.inc
include/masm32/include/kernel32.inc
includelib/masm32/lib/user32.lib
includelib/masm32/lib/kernel32.lib
include/masm32/macros/macros.asm
uselib masm32,comctl32,ws2_32
.data
msg_title db "Title", 0
A DB 1h
x dd 0,1,2,3,4,5,6,7,8,9,10,11
n dd 12
buffer db 128 dup(?)
format db "%d", 0
.code
start:
mov eax, 0
mov ecx, n
add edx, 0
L:add eax, x[ebx]
add ebx, type x
dec ecx
cmp ec[, 0
jne L
invoke wsprintf, addr buffer, addr format, AL
invoke MessageBox, 0, addr buffer, addr msg_title, MB_OK
invoke ExitProcess, 0
end start
3) Выполнил отладку программы командой project-run program
4)Создал exe-файл
5)Запустил программу OllyDbg.Просмотрел код
Раздел 2.Основы HTML
2.1.Теоретическая часть
2.1.1.Работа с текстом, изображения, мультимедия.
Теги заголовков - <H1>,<H2>,<H3>,<H4>,<H5>,<H6>.
Всего 6 видов заголовков - от H1 до H6. Тегу H1 соответствует самый большой заголовок, тегу H6 - самый маленький. Закрывающий тег обязателен.
Атрибуты:
align- выравнивает заголовок в соответствии со следующими значениями:
center- по центру.
left- по левому краю.
right-по правому краю.
title- всплывающая подсказка.
Тег <p> создает новый параграф.
Атрибуты:
align- выравнивает параграф относительно одной из сторон документа.
left- выравнивание по правому краю (По умолчанию ).
right- выравнивание по правому краю.
center- выравнивание по центру.
justify- выравнивание по ширине.
title - всплывающая подсказка.
Контейнер <b> </b> выделяет текст жирным шрифтом.
Аналогичный тег - <strong> </strong>, он тоже выделяет текст жирным. Но его не рекомендуется использовать больше 1-2 раз на странице - при большом количестве тегов <strong> на странице поисковые системы могут воспринять это как спам.
Атрибуты:
title - Всплывающая подсказка.
Тег <hr> добавляет в документ горизонтальную линию.
Закрывающий тег не обязателен.
Атрибуты:
size- Устанавливает толщину линии.
width- Устанавливает ширину линии в пикселах или процентах.
noshade- Создает линию без тени.
color- Задает линии определенный цвет.
<hr noshade="noshade" width="80%" color="#00FF33" />.
Тег <br /> переводит текст на новую строку.
Закрывающий тег не обязателен.
Очень длинный текст, который нужно разбить на две строки.
Очень длинный текст, но уже разбитый на две строки вставкой тега <br /> после слова "текст,".
Контейнер <nobr> </nobr> запрещает перевод строки.
Текст, заключенный между тэгами , будет в одну строку без переноса на другую. Если строка не уместится на экране, то для ее просмотра просмотра появится полоса прокрутки.
Очень длинный текст, который не переносится на две строки и заключен в контейнер <nobr> </nobr>.
Контейнер <sub> </sub> делает подиндекс.
Контейнер <sup> </sup> делает надиндекс.
Контейнер <big> </big> выводит более крупный, чем окружающий текст.
Контейнер <i> </i> выделяет текст курсивом.
Вместо него рекомендован Контейнер <em> </em>.
Контейнер <em> </em> выделяет текст курсивом.
Рекомендован вместо контейнера <i> </i>.
Тег <s> делает текст зачеркнутым.
Закрывающий тэг </s> обязателен. Не рекомендован для использования.
Тег <tt> выделяет текст моноширинным шрифтом.
Закрывающий тэг </tt> обязателен.
Вместо него рекомендован контейнер <kbd> </kbd>.
Тег <kbd> выделяет текст моноширинным шрифтом.
Закрывающий тэг </kbd> обязателен.
Контейнер <u> </u> делает текст подчеркнутым.
Тег <font> определяет цвет, размер и выводимый шрифт.
Закрывающий тег </font> обязателен.
color - определяет цвет текста.
face - определяет гарнитуру шрифта.
size - определяет размер текста в пределах от 1 до 7, где 1 - самый мелкий шрифт. По умолчанию равен 3.
<font color="#0000CC" face="Verdana" size="5"></font>.
<font color="#CA0000" face="Times New Roman" size="2"></font>.
Тег <pre> предварительно отформатированный текст.
Преформатированный текст отображается моношириным шрифтом.
<pre>предварительно отформатированный текст,
с сохранением последовательно поставленных пробелов.</pre>
Тег <marquee> заставляет текст перемещаться из стороны в сторону.
Закрывающий тег </marquee> обязателен.
Атрибуты:
behavior - определяет вид движения.
alternate- колебательные движения налево и направо.
scroll- перемещение текста в направлении, указанном в direction. Достигнув края экрана, надпись появляется снова с противоположной стороны.
slide- схоже с scroll, но текст перемещается только один раз и останавливается.
direction - Определяет направление движения.
down- Движение вниз.
left- Движение справа налево (по умолчанию).
right- Движение слева направо.
up- Движение вверх.
Тег <q> предназначен для включения в документ короткой цитаты.
Закрывающий тег </q> обязателен.
Тег <blockquote> предназначен для включения в документ длинной цитаты.
Закрывающий тег </blockquote> обязателен. Тег <blockquote> создает отступы с обеих сторон и отделяется от остального текста пустыми строками.
Какой-то текст,
здесь цитата
и текст продолжается.
Контейнер <address> </address> применяют для указания сведений об авторе.
Сюда же обычно помещаются и сведения об авторских правах, а также дата создания и последней модификации документа.
Текст обычно отображается курсивом. .
Тег <cite> используется для цитат.
Контейнер <code> </code> применяют для выделения программного кода
Изображения в HTML.В HTML изображения вставляются с помощью тега img. Тег img пустой, он содержит атрибуты и у него нет закрывающего тега. Для отображения изображения на странице используется атрибут src.Src появилось от source, что означает Источник. Значением атрибута src является url-адрес изображения.
Строка выше означает, что изображение находится в той же директории (папке), что и сам html-файл, ссылающийся на данное изображение. Допустим, у Вас есть папка html, в которой содержится index.html с указанным выше кодом и само изображение с названием image.jpg.
В таком случае при открытии index.html в браузере Вы увидите данное изображение. Если же оно у Вас где-либо в другом месте (на папку выше или ниже), то вместо этого у Вас отобразится либо белое поле, либо небольшой прямоугольник с красным крестиком (не удалось загрузить изображение).
Изображения не всегда находятся в той же директории (папке), что и сам файл, поэтому прописывание путей конкретнее будет описано чуть позже.
Атрибуты тега imgПомимо src у тега img есть и другие атрибуты, которые отвечают за размеры отображаемого изображения, подпись к нему и прочее.
src- адрес изображения width- ширина изображения height- высота изображения title- подпись, которая высвечивается при наведении на изображение alt- альтернативный текст. Нужен для поискового робота и индексации изображенийborder- толщина границы изображения. 0 - нет границы, 1 - самая тонкая граница и тд
Адрес вставленного изображения (примеры)
Как правило, изображения хранятся не в той же папке, что и сам html-файл. Для этого в той же директории создаётся папка images(или img, тут на вкус и цвет). А в неё уже кладутся все нужные изображения. В случае с отдельным хранением нужно будет прописывать для атрибута src уже другой адрес
Можно также вставить изображение вообще с другого сайта, при этом не загружая его к себе в папку. Для этого у Вас должно быть стабильное подключение к интернету и примерно следующий код, в котором в адресе Вы прописываете адрес изображения в интернете:
Фоновое изображение в HTMLВ качестве фонового изображения могут выступать файлы с расширениями gif, jpg, jpeg и png. В том случае, если размер изображения меньше окна браузера, то изображение будет автоматически дальше заполнять оставшийся фон. В body используем атрибут background, в котором прописываем путь к изображению
2.1.2.Работа с таблицами
Описание таблиц должно располагаться внутри раздела документа <BODY>. Документ может содержать произвольное число таблиц, причем допускается вложенность таблиц друг в друга. Каждая таблица должна начинаться тэгом <TABLE> и завершаться тэгом </TABLE>. Внутри этой пары тегов располагается описание содержимого таблицы. Любая таблица состоит из одной или нескольких строк, в каждой из которых задаются данные для отдельных ячеек.
Каждая строка начинается тэгом <TR> (Table Row) и завершается тэгом </TR>. Отдельная ячейка в строке обрамляется парой тегов <TD> и </TD> (Table Data) или <TH> и </TH> (Table Header). Тег <TH> используется обычно для ячеек-заголовков таблицы, а <TD> для ячеек-данных. Различие в использовании заключается лишь в типе шрифта, используемого по умолчанию для отображения содержимого ячеек, а также расположению данных внутри ячейки. Содержимое ячеек типа <TH> отображается полужирным (Bold) шрифтом и располагается по центру (ALIGN=CENTER, VALIGN=MIDDLE). Ячейки, определенные тэгом <TD> по умолчанию отображают данные, выровненные влево (ALIGN=LEFT) и посередине (VALIGN=MIDDLE) в вертикальном направлении.
Тэги <TD> и <TH> не могут появляться вне описания строки таблицы <TR>. Завершающие коды </TR>, </TD> и </TH> могут быть опущены. В этом случае концом описания строки или ячейки является начало следующей строки или ячейки, или конец таблицы. Завершающий тег таблицы </TABLE> не может быть опущен.
Количество строк в таблице определяется числом открывающих тегов <TR>, а количество столбцов максимальным количеством <TD> или <TH> среди всех строк. Часть ячеек могут не содержать никаких данных, такие ячейки описываются парой следующих подряд тегов <TD>, </TD>. Если одна или несколько ячеек, располагающихся в конце какой-либо строки, не содержат данных, то их описание может быть опущено, а браузер автоматически добавит требуемое количество пустых ячеек. Отсюда следует, что построение таблиц, в которых в разных строчках располагается различное количество столбцов одного и того же размера, не разрешается.
Таблица может иметь заголовок, который заключается в пару тегов <CAPTION> и </CAPTION>. Описание заголовка таблицы должно располагаться внутри тегов <TABLE> и </TABLE> в любом месте, однако вне области описания любого из тегов <TD>, <TH> или <TR>. Согласно спецификации языка HTML расположение описания заголовкарегламентировано более строго: оно должно располагаться сразу же после тега <TABLE> и до первого <TR>. Мы рекомендуем придерживаться этого правила.
По умолчанию текст заголовка таблицы располагается над ней (ALIGN=TOP) и центрируется в горизонтальном направлении.
Перечисленные теги могут иметь параметры, число и значения которых различны. Однако в простейшем случае теги используются без параметров, которые принимают значения по умолчанию.
Этих сведений вполне достаточно для построения элементарных таблиц. Приведем пример простейшей таблицы, состоящей из двух строк и двух столбцов, отображение которой показано на рис. 4.3.
Заголовок таблицы <CAPTION>
Тэг заголовка таблицы <CAPTION> имеет единственный допустимый параметр ALIGN, принимающий значения ТОР (заголовок над таблицей) или BOTTOM (заголовок под таблицей). Параметр ALIGN может быть опущен, что соответствует значению ALIGN=TOP. В горизонтальном направлении заголовок таблицы всегда располагается по ее центру. Таблица может не иметь заголовка. В качестве заголовка таблицы в большинстве случаев используется простой текст, что регламентируется спецификацией HTML, однако в действительности между тэгами <CAPTION> и </CAPTION> допустимо записывать любые HTML-элементы, употребляемые в разделе <BODY>. Приведем пример записи заголовка таблицы:
Браузер Microsoft Internet Explorer предоставляет дополнительные возможности для выбора расположения заголовка. Параметр ALIGN допускает значения LEFT, CENTER и RIGHT для горизонтального выравнивания наряду с описанными выше значениями. Отметим, что это один из редких случаев, когда широко распространенный параметр ALIGN может использоваться и для горизонтального выравнивания, и для вертикального. Например, запись ALIGN=RIGHT обеспечит расположение заголовка, прижатого к правой стороне и размещенного над таблицей. Если записать ALIGN=BOTTOM, то так же, как и в приведенном выше примере, заголовок будет расположен под таблицей. Однако двойное использование в одном заголовке параметра ALIGN недопустимо. Поэтому дополнительно введен специальный параметр для вертикального выравнивания VALIGN, принимающий значения ТОР или BOTTOM. Например, для заголовка, располагаемого внизу таблицы с выравниванием влево, описание имеет следующий вид:
<CAPTION ALIGN=LEFT VALIGN=ВОТТОМ>Заголовок, располагаемый внизу с выравниванием влево</CAPTION>
Возможности горизонтального выравнивания заголовка таблицы являются расширением спецификации HTML, не поддерживаются браузером Netscape Navigator, и поэтому ими следует пользоваться только в крайней необходимости.
Параметры тега <TABLE>
Основным тэгом, применяемым при создании таблиц, является тег <TABLE>. Он может использоваться с рядом параметров, каждый из которых допустимо опускать. Набор допустимых параметров зависит от браузера. Согласно спецификации HTML в тэге <TABLE> могут использоваться следующие параметры: BORDER, CELLSPACING, CELLPADDING, WIDTH, ALIGN. Браузеры NetScape и Microsoft Internet Explorer разрешают кроме перечисленных пяти параметров использовать параметры HEIGHT и BGCOLOR. Отдельные браузеры позволяют также задавать и другие параметры. Рассмотрим назначение общеупотребительных параметров тега <TABLE>.
Параметр BORDER
Параметр BORDER управляет изображением рамки вокруг каждой ячейки, которые, по сути, дают линии сетки таблицы, и вокруг всей таблицы. По умолчанию рамки не рисуются, и на экране пользователь увидит лишь ровно расположенный текст ячеек таблицы. Существует немало ситуаций, когда использование таблиц без рамок вполне оправданно, например, для многоколонных списков, реализованных при помощи таблиц, или задания точного взаимного расположения рисунков и текста. Однако в большинстве случаев для традиционного использования таблиц ее ячейки полезно отделить друг от друга линиями сетки, что облегчает восприятие и понимание информации, содержащейся в таблице.
Для добавления в таблицу рамок необходимо включить в код <TABLE> параметр BORDER, который может иметь численное значение.
Например, <TABLE BORDER> или <TABLE BORDER=10>.
Численное значение параметра определяет толщину рамки в пикселах, рисуемую вокруг всей таблицы, однако на толщину рамок вокруг каждой ячейки это значение не влияет. При отсутствии численного значения обычно оно принимается равным минимальному значению (1), хотя для различных браузеров стиль показа рамок может отличаться. Возможность независимого управления отображением рамки вокруг всей таблицы и рамками вокруг ячеек отсутствует.
В спецификации HTML 3.0 не было включено значение для параметра BORDER. Это сделано лишь в HTML 3.2. Так, в частности, ранние версии Microsoft Internet Explorer не разрешали задания численного значения.
Отметим, что при отсутствии параметра BORDER рамки не прорисовываются, но место под них оставляется (это относится только к Netscape). Общий размер таблицы при отсутствии параметра BORDER или его наличии не изменяется (исключением является случай задания BORDER=0). Таким образом, минимальное расстояние между двумя соседними ячейками в этих случаях будет равно удвоенной толщине рамки, т. е. двум пикселам. Расположить ячейки как можно ближе друг к другу возможно заданием BORDER=0, что означает отсутствие рамок. Некоторые браузеры могут не поддерживать задание численного значения параметра BORDER, тогда значение, равное нулю, будет проигнорировано, и таблица будет прорисована с рамками.
Параметр CELLSPACING
Форма записи параметра: CELLSPACING=num, где num численное значение параметра в пикселах, которое не может быть опущено. Величина num определяет расстояние между смежными ячейками (точнее между рамками ячеек) как по горизонтали, так и по вертикали. По умолчанию значение принимается равным двум. Заметим, что традиционно в издательских системах смежные ячейки таблицы имеют общую границу. В HTML-таблицах по умолчанию между ними оставляется место, что хорошо видно на приведенном выше рисунке. При задании CELLSPACING=0 рамки смежных ячеек сольются и создадут впечатление единой сетки таблицы (рис. 4.7).
Параметр CELLPADDING
Форма записи параметра аналогична CELLSPACING. Величина num определяет размер свободного пространства (отступа) между рамкой ячейки и данными внутри ячейки. По умолчанию значение принимается равным единице. Установка параметра CELLPADDING равным нулю может привести к тому, что некоторые части текста ячейки могут касаться ее рамки, что выглядит не очень эстетично.
Действие параметров CELLPADDING и CELLSPACING очень похоже друг на друга. Для таблицы без рамок изменение того или другого параметра приводит к одному и тому же результату. Оба параметра влияют на соответствующие отступы одновременно по горизонтали и по вертикали. К сожалению, раздельного управления горизонтальными и вертикальными отступами так, как это сделано, например, для отступов от изображений (параметры HSPACE и VSPACE тега <IMG>), не предусмотрено.
Все три параметра BORDER, CELLPADDING и CELLSPACING действуют независимо друг от друга, если какой-нибудь из них опущен, то берется его значение, принятое по умолчанию. В частности, если опущены все перечисленные параметры, то минимальное расстояние между данными из смежных ячеек будет равно 6 пикселам (для Netscape). Это значение складывается из двух пикселов для CELLSPACING, одного пиксела для CELLPADDING и одного пиксела для рамки каждой из ячеек. Наиболее компактная таблица будет получена заданием следующего описания:
<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0>
Только в таком варианте ячейки будут расположены вплотную друг к другу. Примером использования может служить таблица, все ячейки которой содержат рисунки одинакового размера, которые необходимо расположить рядом друг с другом.
Параметры WIDTH и HEIGHT
При отображении таблиц их ширина и высота автоматически вычисляются браузером и зависят от многих факторов: значений параметров, заданных в описании всего документа, данной таблицы, отдельных ее строк и ячеек, содержимого ячеек, а также параметров, задаваемых при просмотре документа в том или ином браузере, например, типа и размеров шрифта, размеров окна просмотра и др. При отображении расчет размеров таблиц выполняется автоматически с учетом этих факторов, при этом делается попытка представить таблицу в наиболее удобном виде расположить таблицу так, чтобы она помещалась и окне просмотра. Общая схема просмотра больших документов, как правило, сводится к линейной прокрутке содержимого документа по вертикали и чтении текста, перемежаемого различными таблицами, изображениями и т. п. Это относится как к HTML-документам, так и к обычным документам, создаваемым в любых текстовых редакторах. Большинство как текстовых редакторов (например, Microsoft Word), так и HTML-браузеров автоматически форматируют текст так (если возможно), чтобы длина строк не превосходила ширину окна просмотра. Это позволяет избежать необходимости горизонтальной прокрутки документа. Аналогичные действия предпринимаются браузерами с таблицами по возможности форматировать их таким образом, чтобы ширина таблицы не превосходила ширины окна просмотра. Можно сделать вывод, что ширина таблиц является более важным, первостепенным параметром, расчет которого выполняется в первую очередь по сравнению с высотой.
В большинстве случаев динамическое определение размеров таблицы дает в результате эстетически соразмерное изображение с эффективным использованием реальной площади окна просмотра. Однако бывает необходимо принудительно указывать ширину или высоту таблицы. Для этой цели используются параметры WIDTH (ширина таблицы) и HEIGHT (высота таблицы) тега <TABLE>. Форма записи: WIDTH=num или WIDTH=num%, где num численное значение ширины всей таблицы в пикселах или в процентах от всего размера окна. Заметим, что допустимо задавать значения, большие 100%, хотя трудно представить себе случай, где это необходимо. Пример:
Аналогичные параметры могут задаваться и для отдельных ячеек. Заметим, что задание конкретного значения параметра, например WIDTH=200, не означает, что таблица в любом случае будет иметь указанную ширину, а лишь определяет рекомендуемую ширину, которая будет выдержана по возможности. Поясним это на примерах. Пусть имеется таблица, которая в данных условиях по умолчанию имела бы ширину, меньшую заданной. В этом случае браузер увеличит ширину таблицы до требуемой путем пропорционального расширения всех колонок таблицы. При сужении окна просмотра ширина таблицы изменяться не будет, и, возможно, для ее просмотра потребуется горизонтальная прокрутка. Если же таблица по умолчанию имеет ширину, большую заданной, то браузер сделает попытку уменьшить ее ширину за счет, во-первых, сокращения ширины отдельных колонок, для которых заданная ширина больше необходимой, во-вторых, разбиением текста в отдельных ячейках на несколько строк с увеличением высоты таблицы. Эти действия могут не обеспечить требуемого размера таблицы, и тогда она будет иметь минимально возможную ширину. Такие же действия предпринимаются для таблиц, у которых не указаны размеры, при сужении окна просмотра.
Конкретные алгоритмы настройки таблиц для различных браузеров могут несколько отличаться.
Параметр ALIGN
Данный параметр тега <TABLE> определяет горизонтальное расположение таблицы в области просмотра. Допустимые значения LEFT (выравнивание влево) и RIGHT (выравнивание вправо). По умолчанию таблицы выровнены по левому краю. Заметим, что среди допустимых значений нет типичного значения для параметра выравнивания CENTER. В некоторых источниках по языку HTML значение CENTER (по центру) приводится в качестве допустимого в данном случае. Это соответствует спецификации HTML, но на практике и Netscape Navigator, и Microsoft Internet Explorer реализуют только два значения. Дело в том, что присутствие параметра ALIGN в тэге <TABLE> не только определяет месторасположение таблицы, но и разрешает выполнить обтекание таблицы текстом с противоположной стороны аналогично обтеканию картинок. Обтекание таблицы текстом с двух сторон не предусматривается ни в каких случаях. Для более точного управления обтеканием следует использовать тег <BR> с параметром CLEAR так же, как это выполняется для <IMG>. Если параметр ALIGN опущен, то место справа и/или слева от таблицы всегда будет пустым независимо от ее ширины. Если таблица не требует обтекания текстом, то можно добиться ее расположения по центру окна просмотра. Для этого, например, можно все описание таблицы поместить внутри пары тегов <CENTER> и </CENTER>
2.1.3.Фреймы и формы
Зачастую на Web сайтах можно встретить страницы с размещенными на них HTML - формами. Веб-формы удобный способ получения информации от посетителей вашего сайта. Пример тому гостевая книга, которая обеспечивает обратную связь с посетителями и разработчиками сайта. Формы так же удобны и для разработчиков сайта при разработке CMS, которая позволяет поддерживать главное свойство сайта - актуальность. Данная статья посвящена основам создания HTML-форм, их обработке и способам передачи данных из экранных форм в PHP-сценарии.
1) Создание простой формы
Теги<form>и</form>задают начало и конец формы. Начинающий форму тег<form>содержит два атрибута:action и method. Атрибут action содержит адрес URL сценария, который должен быть вызван для обработки сценария. Атрибут method указывает браузеру, какой вид HTTP запроса необходимо использовать для отправки формы; возможны значения POST и GET.
Замечание
Главное отличие методов POST и GET заключается в способе передачи информации. В методе GET параметры передаются через адресную строку, т.е. по сути в HTTP-заголовке запроса, в то время как в методе POST параметры передаются через тело HTTP-запроса и никак не отражаются на виде адресной строки.
2) Флажок (checkbox)
Флажки checkbox предлагаю пользователю ряд вариантов, и разрешает выбор нескольких из них.
<input name="Имя переключателя" type="Тип" value="Значение">
Группа флажков состоит из элементов <input>, имеющих одинаковые атрибуты name и type(checkbox). Если вы хотите, чтобы элемент был отмечен по умолчанию необходимо пометить его как checked. Если элемент выбран, то сценарию поступит строка имя=значение, в противном случае в обработчик формы не придет ничего, т.е. не выбранные флажки вообще никак не проявляют себя в переданном наборе данных.
3) Переключатель(radio)
Переключатели radio предлагают пользователю ряд вариантов, но разрешает выбрать только один из них.
<input name="Имя переключателя" type="Тип" value="Значение">
Переключатель (radio) имеет атрибуты name, type и value. Атрибут name задает имя переключателя, type задает тип radio, а атрибут value задает значение. Если пользователь выберет переключатель, то сценарию будет передана строка имя=значение. При необходимости можно указать параметр checked, который указывает на то, что перключатель будет иметь фокус (т.е. будет отмечен по умолчанию) при загрузке страницы. Переключатели также можно объединять в группы, для этого они должны иметь одно и тоже имя.
4) Кнопка сброса формы(Reset)
<input type="Тип" name="Имя кнопки" value="Надпись на кнопке">
При нажатии на кнопку сброса(reset), все элементы формы будут установлены в то состояние, которое было задано в атрибутах по умолчанию, причем отправка формы не производиться.
Пример:
<input type="reset"name="Reset"value="Очистить форму">
5) Выпадающий список (select)
Тэг<select>представляет собой выпадающий или раскрытый список, при этом одновременно могут быть выбраны одна или несколько строк.
Список начинается с парных тегов<select></select>. Теги<option></option>позволяют определить содержимое списка, а параметр value определяет значение строки. Если в теге<option>указан параметрselected, то строка будет изначально выбранной. Параметр size задает, сколько строк будет занимать список. Если size равен 1, то список будет выпадающим. Если указан атрибут multiple, то разрешено выбирать несколько элементов из списка(при size = 1 не имеет смысла).
При передаче данных выпадающего списка сценарию передается строка имя=значение,а при раскрытом списке передается строкаимя=значение1&имя=значение2&имя=значениеN.
6) Текстовое поле (text)
Позволяет пользователям вводить различную информацию.
<input type="Тип" name="Имя поля" size="Размер" maxlength="Макс. количество символов">
При создании обычного текстового поля размером size и максимальной допустимой длины maxlength символов, атрибут type принимает значение text. Если указан параметр value, то поле будет содержать отображать value-текст. При создании поля не забывайте указывать имя поля, т.к. этот атрибут является обязательным.
7) Поле для ввода пароля (password)
Полностью аналогичен текстовому полю, за исключением того что символы, набираемые пользователем, не будут отображаться на экране.
8) Многострочное поле ввода текста (textarea)
Многострочное поле ввода текста позволяет отправлять не одну строку, а сразу несколько. По умолчанию тег создает пустое поле шириной в 20 символов и состоящее из двух строк.
<textarea name="Имя поля" cols="Ширина поля" rows="Число строк">Текст</textarea>
Многострочное поле ввода текста начинается с парных тегов <textarea></textarea>. Тэг name задает имя многострочного поля. Также можно указать ширину поля(cols) и число строк(rows). При необходимости можно указать атрибут readonly, который запрещает редактировать, удалять и изменять текст, т.е. текст будет предназначен только для чтения. Если необходимо чтобы текст был изначально отображен в многострочном поле ввода, то его необходимо поместить между тэгами<textarea></textarea>.
9) Скрытое текстовое поле
Позволяет передавать сценарию какую то служебную информацию, не отображая её на странице.
<input name="Имя" type="Тип" value="Значение">
Скрытое поле начинается с тега <input>, атрибуты которого являются name,type и value. Атрибут name задает имя поля, type определяет тип поля, а атрибут value задает значение поля.
10) Кнопка отправки формы (submit)
Служит для отправки формы сценарию.
<input type="Тип" name="Имя кнопки" value="Текст кнопки">
При создании кнопки для отправки формы необходимо указать 2 атрибута:type=“submit”и value=”Текст кнопки”. Атрибут name необходим если кнопка не одна, а несколько и все они созданы для разных операций, например кнопки "Сохранить", "Удалить", "Редактировать" и т.д. После нажатия на кнопку сценарию передается строка имя=текст кнопки.
Обработка форм
Все данные, которые вы хотите получить из HTML-формы в PHP сценарий обрабатываются с помощью суперглобальных массивов $_POST или $_GET, в зависимости от указанного в атрибуте method метода передачи данных.
Фреймы в HMTL
Испольльзуя фрэймы, позволяющие разбивать Web-страниц скроллируемые подокна, вы можете значительно улучшить внешний вид и функциональность информационных систем и Web-приложений. Каждое подокно, или фрэйм, может иметь следующие свойства:
Каждый фрэйм имеет свой URL, что позволяет загружать его независимо от других фрэймов. Каждый фрэйм имеет собственное имя (параметр NAME), позволяющее переходить к нему из другого фрэйма. Размер фрэйма может быть изменен пользователем прямо на экране при помощи мыши (если это не запрешено указанием специального параметра). Данные свойства фрэймов позволяют создавать продвинутые интерфейсные решения, такие как:
Размещение статической информации, которую автор считает необходимым постоянно показывать пользователю, в одном статическом фрэйме. Это может быть графический логотип фирмы, copyright, набор управляющих кнопок.
Помещение в статическом фрэйме оглавления всех или части WEB-документов, содержащихся на WEB-сервере, что позволяет пользователю быстро находить интересующую его информацию.
Создавать окна результатов запросов, когда в одном фрэйме находится собственно запрос, а в другом результаты запроса.
Создавать формы типа "мастер-деталь" для WEB-приложений, обслуживающих базы данных.
Синтаксис фрэймов
Формат документа, использующего фрэймы, внешне очень напоминает формат обычного документа, только вместо тэга BODY используется контейнер FRAMESET, содержащий описание внутренних HTML-документов, содержащий собственно информацию, размещаемую во фрэймах.
Однако, фрэйм-документ является специфичным видом HTML-документа, поскольку не содержит элемента BODY и какой-либо информационной нагрузки соответственно. Он описывает только фрэймы, которые будут содержать информацию
Общий синтаксис фрэймов:
Общий контейнер FRAMESET описывает все фрэймы, на которые делится экран. Вы можете разделить экран на несколько вертикальных или несколько горизонтальных фрэймов. Тэг FRAME пописывает каждый фрэйм в отдельности. Рассмотрим более детально каждый компонент.
FRAMESET