Буфер описатель n dup (значение) — КиберПедия 

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Буфер описатель n dup (значение)

2020-11-19 111
Буфер описатель n dup (значение) 0.00 из 5.00 0 оценок
Заказать работу

n – число кодов в буфере;

значение – значение кода для буфера.

Например:

buf db 70 dup(‘*’)

В FASM используются так же директивы резервирования памяти

rb – зарезервировать байт

rw – зарезервировать слово

rd – зарезервировать двойное слово

Пример. Резервирование памяти на три слова:

mybuf rw 3.

В командах FASM загрузка адреса кода в регистр выполняется командой

MOV R,имя_кода

Здесь R один из регистров общего назначения, или индексный регистр E SI, E DI, E BP.

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

Пример. Пусть задан код символа sym db 'D'. Тогда можно использовать следующие команды:

mov EDI,sym;адрес символа в DI

mov CL,[sym];код символа в CL

mov BX,word[sym];код символа в BX

Последняя команда требует указания преобразователя разрядности word в машинное слово, так как первый операнд имеет разрядность два байта. Код будет хранится в регистре BL!

 В FASM используется также преобразование в байт с помощью описателя byte и dword для преобразования в двойное слово.

Системный сервис

Обращение к сервису – обращение к ядру операционной системы Linux для выполнения определенного действия.  К таким действиям относятся организация ввода-вывода в среде ОС и завершение работы программы.

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

В ассемблерной программе системный вызов выполняется по следующим правилам:

· В регистр EAX заносится номер функции.

· Если функция для своей работы требует задания определенных кодов, то они последовательно заносятся в регистры EBX, ECX, EDX, ESI, EDI.

· Затем следует вызвать прерывание с номером 80h для выполнения выбранной функции с помощью команды INT.

· Результат работы функции возвращается в регистре EAX. Если регистр хранит отрицательное значение, то функция выполнилась с ошибкой.

Значение находящиеся в пределах от fffff000h до ffffffffh представляет собой код ошибки.

Для вывода сообщения на экран – консоль следует использовать системный вызов write. Номер этого вызова 4.

Обращение:

EAX = 4

EBX = 1

ECX = адрес буфера вывода

EDX = число выводимых байтов

В регистр EBX нужно записать номер (дескриптор) – потока вывода. В операционной системе Linux консоль – экран называется устройством стандартного ввода-вывода. За этим устройством закреплен дескриптор с номером 1. Это поток стандартного вывода.

 Заметим, что для вывода на экран можно использовать дескриптор с номером 2. Это номер устройства «стандартной ошибки». Вывод по этому дескриптору выполняют при выводе диагностических сообщений об ошибке в программе.

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

Для выполнения ввода с консоли используется системный вызов read. Это системный вызов с номером 3.

Формат вызова:

EAX = 3

EBX = 0

ECX = адрес буфера

EDX = число символов

В регистр EBX нужно записать код 0. Это номер дескриптора стандартного потока ввода с консоли. В регистр ECX записывают адрес буфера в сегменте данных, куда будут записаны вводимые байты. В регистр EDX записывают ожидаемое число вводимых байтов.

После вызова функции пользователь должен ввести символы с клавиатуры, завершается ввод нажатием комбинации клавиш CTRL + D. Такая комбинация в ОС Linux вводит в стандартный поток ввода признак конца файла и ввод прекращается. В регистре EAX будет храниться число введенных байтов.

Для завершения работы программы и передаче управления операционной системе нужно выполнить системный вызов exit с номером 1.

Вызов этой функции требует записать в регистры коды:

EAX = 1

EBX = код

Здесь код – код завершения работы программы. Если программа не передает код ОС для последующего его анализа, то это значение принимают равным нолю.

Компилирование программ

Разработку программ для операционной системы Linux рассмо-трим в среде ОС Linux Ubuntu 11.04. Будем рассматривать случай, когда данная ОС запускается на виртуальной машине VMware в среде операционной системы MS Windows.

Загрузка системы

Выполним запуск менеджера виртуальных машин. Для этого воспользуемся ярлыком загрузки плеера виртуальных машин VMware, который показан на рисунке 1.2.

Рис.1.2. Пиктограмма плеера

Если такой пиктограммы на рабочем столе нет, то используя кнопку «Пуск» в операционной системе Windows 7 выберите команду меню «Все программы» и найдите группу VMware, откройте группу и запустите плеер.

Программу можно запустить, используя проводник Windows. Программа расположена в папке:

C:\Program Files\VMware\VM ware Player\vmplayer.exe

Главное окно плеера показано на рисунке 1.3.

Рис.1.3. Окно плеера виртуальных машин

Доступные виртуальные машины перечисляются в левой части окна (см. рисункок 1.3). Как видно из рисунка доступно две виртуальные машины. Одна для загрузки Ubuntu версии 11, а другая для загрузки виртуальной машины Windows XP.

Если в списке виртуальных машин нет нужной ОС, то используя команду «Open Virtual Machine» нужно перейти в папку с образом виртуальной машины и включить ее в список доступных машин.

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

Рис.1.4. Выбор виртуальной машины

Для запуска виртуальной машины в правой части окна нужно выполнить команду: «Play virtual machine».

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

User

Ubuntu.

Первый пользователь снабжен паролем 123456, а второй системный пользователь снабжен паролем 123890.

Рис.1.5. Окно входа

Выполните вход под именем User.

На рисунке 1.6 показано окно системы после входа в нее пользователя (фон рабочего стола может отличаться от показанного на рисунке). Необходимо помнить, что ОС Ubuntu является гостевой, и работает на базе виртуальной машины. Визуально это выражается в том, что гостевой ОС предоставляется Windows окно. Им можно управлять с помощью стандартных пиктограмм Windows . Необходимо иметь в виду, что выбор пиктограммы закрытия приведет к аварийному выключению виртуальной машины.

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

Используя инструмент кнопку , можно «открепить» панель, тогда она убирается и появляется при наведении на область панели курсора мыши. На рисунке 1.7 показана подсказка для перехода от виртуальной машины к компьютеру пользователя системы. Переход выполняется путем нажатия клавиш CTRL+ALT. Обратный переход выполняется нажатием клавиш CTRL+G. Работу с гостевой ОС можно также возобновить, выполнив двойной щелчок левой кнопки мыши в поле окна виртуальной машины.

Окно ОС Ubuntu 11.04 состоит из трех областей (см. рисунок 1.6 сверху вниз):

1. Область меню – панели запуска(верхняя часть окна)

2. Центральная область – Рабочий стол.

3. Нижняя  панель окна.

Рис.1.6. Окно системы после входа

 

Рис.1.7. Панель виртуальной машины

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

Рис.1.8. Пиктограммы работы с устройствами.

После подсоединения к компьютеру флэш накопителя виртуальная машина делает попытка передать его «монтирование» гостевой ОС. В ОС Linux после монтирования флэш накопителя автоматически открывается окно навигатора – проводника по файловой системе накопителя. На рисунке 1.9 показан результат монтирования  накопителя KINGSTON.

Рис. 1.9. Смонтированный накопитель

Если автоматические монтирование и открытие навигатора для накопителя не было выполнено, то нужно выполнить команду «Connect» из контекстного меню для пиктограммы съемного накопителя, показанного на рисунке 1.10

Рис. 1.10. Контекстное меню накопителя

Заметим, что в ОС Linux «монтированные» накопители отсоединяются командой их контекстного меню «Извлечь», либо «Безопасно удалить привод».

Для правильного отсоединения накопителя в виртуальной машине следует выполнить команду ОС «Безопасно удалить привод», а затем из контекстного меню виртуальной машины выполнить команду Disconnect! Ни в коем случае нельзя вынимать из USB порта компьютера накопитель без его правильного отсоединения от виртуальной машины. Если это сделать то на накопителе будут потеряны все файлы или часть файлов, которые были на него записаны при работе в ОС Linux.

Окно навигатора для накопителя следует закрыть или свернуть, используя пиктограммы управления окнами. Эти пиктограммы в Ubuntu 11 расположены в верхнем левом углу (см. рисунок 1.11), обозначение аналогично пиктограммам графических окон MS Windows.

Рис. 1.11. Пиктограммы управления окном

Запуск среды разработки

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

1. Написанию текста программы.

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

3. Если в процессе компиляции возникли ошибки, то после их исправления выполняется повторная компиляция.

4. Запуск – тестирование созданной программы.

5. Если программа не выполняет требуемые функции в исходный текст программы вносят изменения и повторяют шаги 2, 3, 4.

Создание ассемблерных программ будем выполнять с помощью интегрированной среды разработки Geany. Заметим, что среда не входит в стандартный набор программ ОС Ubuntu и должна быть установлена из репозитория программ.

Для запуска среды разработки следует выполнить команду меню ОС:

Приложения > Программирование > Geany.

Окно программы после ее загрузки показано на рисунке 1.12.

Рис.1.12. Загрузка среды программирования

Ввод текста программы

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

Hello World и завершает свою работу. Наша программа должна будет выполнить два системных вызова: write – для вывода сообщения и   exit – для завершения работы и передачи управления операционной системе.

В окне «Без имени» следует ввести код программы:

format ELF executable 3

entry start

 

segment readable executable

start:

;Вывод сообщения на консоль

mov eax,4

mov ebx,1

mov ecx,msg;Адрес сообщения

mov edx,msg_size;Число байтов сообщения

int 0x80

;Завершение работы программы

mov eax,1

mov ebx,0

int 0x80

 

segment readable writeable

msg db 'Hello World!',0xA

msg_size = $-msg

После набора текста программы следует его сохранить под именем hello.asm в каталоге – папке fasm. Каталог находится в домашнем каталоге пользователя Use системы.

Что бы выполнить сохранение файла нужно выполнить команду меню системы программирования Файл > Сохранить.

Рис.1.13. Сохранение файла программы

В появившемся окне следует ввести имя файла hello.asm и сделать каталог fasm текущим (см. рисунок 1.13), затем следует нажать командную кнопку «Сохранить». Следует иметь в виду, что в ОС Linux нет понятия расширение файла в отличие от ОС Windows. Файл может иметь окончание, которое отделяется точкой от имени файла. В данном случае окончание файла asm говорит системе разработки, что содержание файла – ассемблерный код. Это приводит к тому, что в редакторе будут выделяться цветом конструкции языка программирования.

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

Документ > Установить тип файла > Языки программирования

> Файл Assembler.

Окно системы разработки состоит из трех частей (см. рисунок 1.14):

Рис. 1.14. Окно с введенным текстом программы

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

Много оконного редактора. Окно редактирования текущей программы, снабжается ярлыком в верхней его части. На ярлыке выводится имя файла редактируемой программы.

В нижней части выводится окно сообщений.  По умолчанию активна секция «Статус».

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

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

Создание исполняемого кода

Перед компиляцией следует убедиться в правильности настроек системы разработки, необходимых для обращения к компилятору FASM!

Нужно выполнить команду меню программы:

Сборка > Установить команды сборки

В открывшемся окне возле секции «Скомпилировать» должна быть записана команда:

./ fasm “% f”

Это команда предписывает вызвать из текущего каталога файла программы компилятор fasm, а параметр % f получит имя файла программы.

В секции «Выполнить» должна быть записана команда:

./% e

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

После проверки настроек окно нужно закрыть.

Компиляция программы выполняется с помощью пункта меню «Сборка». Нужно выполнить команду «Скомпилировать». Команда может вызываться с помощью «Горячего ключа» F8.

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

Рис. 1.15. Ошибка компиляции

На рисунке 1.15 показана ошибка при компиляции файла. В строке №7 была неправильно записана команда mov.

После устранения ошибок следует повторить компиляцию.

Если сборка прошла успешно программу следует выполнить с помощью команды меню Сборка > Выполнить. Команда снабжена горячим ключом F5.

Для показа результатов работы программы загружается окно терминала Linux в которое выводится сообщение программы (см. рисунок 1.16) Окно следует закрыть, когда оно больше не нужно.

Рис. 1.16. Вывод сообщения на терминал

При создании программ в ОС Linux, которые осуществляют вывод информации в окно терминала, для разделения выводимых сообщений на строки и перевода курсора на следующую строку используется управляющий код LF (Line Feed). Значение этого кода равно 10 в десятичной системе и 0A в шестнадцатеричной системе. В нашем примере этим кодом завершается сообщение Hello World!

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

Таблица 5.1

Инструменты

Команда Инструмент
1 Создать новый файл
2 Открыть существующий файл
3 Сохранить текущий файл
4 Сохранить все открытые файлы
5 Обновить текущий файл с диска
6 Закрыть текущий файл
7 Шаг назад, шаг вперед при редактировании текста программы
8 Скомпилировать текущий файл
9 Выполнить скомпилированную программу

 

Панель инструментов можно скрыть или показать, используя команду пункта меню «Вид».

Завершение работы

Перед завершением сеанса работы следует закрыть все окна системы разработки программного обеспечения. Затем закрыть программу Geany.

Если к виртуальной машине были присоединены USB накопители или устройства их нужно ПРАВИЛЬНО отключить.

Для безопасного завершения работы OC Ubuntu следует использовать команду меню Система > Выключить.

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

Не закрывайте окно виртуальной машины, как обычное окно MS Windows! Это может привести к повреждению файла виртуальной машины Ubuntu, что сделает невозможным повторную ее загрузку.   


Поделиться с друзьями:

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

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

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.068 с.