Главная страница

Лаба. Лабораторные работы (47). Лабораторная работа Основы интерфейса командной строки ос gnu linux Цель работы Приобретение практических навыков общения с операционной системой на уровне командной строки (вход и выход,


Скачать 109.84 Kb.
НазваниеЛабораторная работа Основы интерфейса командной строки ос gnu linux Цель работы Приобретение практических навыков общения с операционной системой на уровне командной строки (вход и выход,
АнкорЛаба
Дата04.11.2022
Размер109.84 Kb.
Формат файлаdocx
Имя файлаЛабораторные работы (47).docx
ТипЛабораторная работа
#770244
страница3 из 4
1   2   3   4


; Выход с кодом возврата $0$ (без ошибок)

; Вызов ядра

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

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

Из-за специфики программирования, а также по традиции для создания программ на языке ассемблера обычно пользуются утилитами командной строки (хотя поддержка ассемблера есть в некоторых универсальных инте­грированных средах).

В процессе создания ассемблерной программы можно выделить четыре шага:

1. Набор текста программы в текстовом редакторе и сохранение её в отдельном файле. Каждый файл имеет свой тип (или расширение), который определяет назначение файла. Файлы с исходным текстом программ на языке ассемблера имеют тип asm.

2. Трансляция — преобразование с помощью транслятора, например nasm, текста программы в машинный код, называемый объектным. На данном этапе также может быть получен листинг программы, содержащий кроме текста программы различную дополнительную информацию, созданную транслятором. Тип объектного файла — o, файла листинга — lst.

3. Компоновка или линковка — этап обработки объектного кода компо­новщиком (ld), который принимает на вход объектные файлы и собирает по ним исполняемый файл. Исполняемый файл обычно не имеет расши­рения. Кроме того, можно получить файл карты загрузки программы в ОЗУ, имеющий расширение map.

4. Запуск программы. Конечной целью является работоспособный ис­полняемый файл. Ошибки на предыдущих этапах могут привести к некорректной работе программы, поэтому может присутствовать этап отладки программы при помощи специальной программы — отладчика. При нахождении ошибки необходимо провести коррекцию программы, начиная с первого шага.

2.2.3. Транслятор NASM

NASM превращает текст программы в объектный код. Например, для ком­пиляции приведённого выше текста программы «Hello World» необходимо написать:

nasm -f elf64 hello.asm

Если текст программы набран без ошибок, то транслятор преобразует текст программы из файла hello.asm в объектный код, который запишется в файл hello.o. Таким образом, имена всех файлов получаются из имени входного файла и расширения по умолчанию. При наличии ошибок объект­ный файл не создаётся, а после запуска транслятора появятся сообщения об ошибках или предупреждения.

NASM не запускают без параметров. Ключ -f указывает транслятору, что требуется создать бинарные файлы в формате ELF. Следует отметить, что формат elf64 позволяет создавать исполняемый код, работающий под 64­битными версиями Linux. Для 32-битных версий ОС указываем в качестве формата просто elf.

NASM всегда создаёт выходные файлы в текущем каталоге.

2.2.3.1. Расширенный синтаксис командной строки NASM

Полный вариант командной строки nasm выглядит следующим образом: nasm [-@ косвенный_файл_настроек] [-o объектный_файл] [-f ^ формат_объектного_файла] [-1 листинг] [параметры...] ^ [--] исходный_файл

Для более подробной информации см. man nasm. Для получения списка форматов объектного файла см. nasm -hf.

Приведём пример. Команда nasm -f elf64 -g -l main.lst main.asm скомпилирует исходный файл main.asm в main.o, при этом формат выходного файла будет elf64, и в него будут включены символы для отладки (опция -g), кроме того, будет создан файл листинга main.lst.

2.2.3.2. Компоновщик LD

Чтобы получить исполняемую программу, объектный файл необходимо передать на обработку компоновщику: ld -o hello hello.o

Ключ -o с последующим значением задаёт в данном случае имя создава­емого исполняемого файла.

В общем виде компоновщик ld имеет следующий формат командной строки:

ld [параметры] объектные_файлы...

Например, команда ld -Map main.map -o main main.o создаст ис­полняемый файл main из объектного файла main.o, при этом создавая карту памяти в файл main.map.

Формат командной строки LD можно увидеть, набрав ld --help. Для получения более подробной информации см. man ld.

Компоновщик ld не предполагает по умолчанию расширений для файлов, но принято использовать следующие расширения:

- о для объектных файлов;

- без расширения для исполняемых файлов;

- map для файлов схемы программы;

- lib для библиотек.

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

2.2.3.3. Запуск исполняемого файла

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

./hello

2.3. Порядок выполнения работы

1. Создайте в своём домашнем каталоге новый подкаталог с именем lab02 и файл lab2.asm:

cd

mkdir lab02

touch lab2.asm

С помощью редактора mcedit введите в файл lab2.asm текст про­граммы hello.asm из п. 2.2.2.1, пользуясь правилами оформления ассемблерных программ (не копируйте текст программы из файла pdf, так как некоторые символы могут скопироваться некорректно и программа не будет корректно транслироваться).

2. Оттранслируйте полученный текст программы в объектный файл.

3. Выполните компоновку объектного файла и запустите получившийся исполняемый файл.

4. Измените в тексте программы выводимую на экран строку с Hello world! на свою фамилию. Повторите пункты 2 и 3.

2.4. Содержание отчёта

Отчёт должен включать:

1) титульный лист;

2) формулировку цели работы;

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

- краткое описание действия;

- вводимую команду или команды;

- результаты выполнения команд и программ (снимок экрана);

4) выводы, согласованные с целью работы.

5) ответы на контрольные вопросы.

2.5. Контрольные вопросы

1. Какие основные отличия ассемблерных программ от программ на языках высокого уровня?

2. В чём состоит отличие инструкции от директивы на языке ассемблера?

3. Перечислите основные правила оформления программ на языке ассем­блера.

4. Каковы этапы получения исполняемого файла?

5. Каково назначение этапа трансляции?

6. Каково назначение этапа компоновки?

7. Какие файлы могут создаваться при трансляции программы, какие из них создаются по умолчанию?

8. Каковы форматы файлов для nasm и ld?

Список литературы

1. Расширенный ассемблер: NASM. — 2001. — URL:https : / / www . opennet.ru/docs/RUS/nasm/.

2. Столяров А. Программирование на языке ассемблера NASM для ОС Unix. — 2-е изд. — М. : МАКС Пресс, 2011.

3. Новожилов О. П. Архитектура ЭВМ и систем. — М. : Юрайт, 2016.

4. The NASM documentation. — 2017. — URL: https://www.nasm.us/ docs.php.

5. Куляс О. Л., Никитин К. А. Курс программирования на ASSEMBLER. — М. : Солон-Пресс, 2017.

6. Колдаев В. Д., Лупин С. А. Архитектура ЭВМ. — М. : Форум, 2018.

ЛАБОРАТОРНАЯ РАБОТА № 3. ТРАНСЛЯЦИЯ ПРОГРАММ НА ЯЗЫКЕ АССЕМБЛЕРА. СИСТЕМНЫЕ ВЫЗОВЫ В ОС GNU LINUX

3.1. Цель работы

Приобретение практических навыков по разработке небольших команд­ных файлов. Освоение инструкций языка ассемблера mov и int.

3.2. Предварительные сведения

3.2.1. Трансляция и компоновка программ с помощью make

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

Как вы уже знаете из предыдущей лабораторной работы, чтобы преобра­зовать файл с исходным кодом на ассемблере (main.asm) в исполняемый файл (main), следует выполнить следующие две команды: nasm -f elf64 -g -l main.lst main.asm ld -Map main.map -o main main.o

В результате будет создан исполняемый файл main, а также объектный файл main.o, файл листинга main.lst и карта памяти main.map. Все дополнительные файлы можно удалить также из командной строк, используя команду rm: rm main main.o main.lst main.map

В процессе разработки программного кода подобные команды вам при­дётся выполнять многократно. Кроме того, если программа будет состоять не из одного исходного файла, а из нескольких, то для каждого из них также придётся выполнять подобные команды. Поэтому удобно автоматизировать данные действия. Для этого и служит утилита make.

Вызов утилиты make происходит из командной строки посредством ввода одноимённой команды и нажатия клавиши Enter. Утилита make попытается найти в текущей директории файл с именем Makefile и выполнить пра­вила преобразования, записанные в нём. Если Makefile с инструкциями отсутствует, то утилита завершит своё выполнения и выведет сообщение об ошибке.

Makefile представляет собой текстовый файл, который может содержать:

- комментарии;

- правила;

- макроопределения.

Создадим Makefile для автоматизации трансляции и линковки NASM программы. Для этого откроем текстовый редактор и наберём следующий тест (обратите внимание на наличие табуляции):

build: main.asm

nasm -f elf64 -g -l main.lst main.asm

ld -Map main.map -o main main.o clean:

rm -f main main.o main.lst main.map

# здесь могут быть дополнительные команды

В примере созданы два правила с именами («целями») build и clean. Первое из них (build) выполняет трансляцию и сборку программы main.asm, а второе (clean) удаляет все созданные предыдущим прави­лом файлы. Таким образом, если набрать в командной строке make build, то будет создан исполняемый файл из main.asm. Если набрать make clean, то проект будет очищен, т.е. будут удалены все файлы, создаваемые nasm и ld.

Обратите внимание, что после цели build через двоеточие написано имя файла main.asm. Это указывает на то, что для выполнения цели build необходимо наличие файла main.asm в текущей директории. Это логично, так как без файла с исходным кодом создать программу не получится.

Также обратите внимание, что команды в правилах (в отличие от целей) начинаются с отступа, который обязательно должен создаваться символом табуляции (клавиша Tab), а не пробелами. В редакторе mcedit для создания табуляции нужно в меню (вызывается клавишей F9 ) выбрать Настройка^ ^Общая и убрать галочку в пункте «Симулировать неполную табуляцию» (или при редактировании Makefile использовать для создания отступа кла­вишу Tab дважды).


Функциональная клавиша

Выполняемое действие

[F1]

[F3|

вызов контекстно-зависимой подсказки

вызов меню, созданного пользователем

просмотр файла, на который указывает подсветка в активной панели

Н

вызов встроенного редактора для файла, на который указывает подсветка в активной панели

И5]

копирование файла или группы отмеченных файлов из каталога, отображаемого в активной панели, в ка­талог, отображаемый на второй панели




перенос файла или группы отмеченных файлов из ка­талога, отображаемого в активной панели, в каталог, отображаемый на второй панели

CF7

создание подкаталога в каталоге, отображаемом в активной панели




удаление файла (подкаталога) или группы отмечен­ных файлов

F9

вызов основного меню программы выход из программы


3.2.2. Основы работы с Midnight Commander

Midnight Commander (или просто mc) — это программа, которая позволяет просматривать структуру каталогов и выполнять основные операции по управлению файловой системой, т.е. mc является файловым менеджером.

Для активации оболочки Midnight Commander достаточно ввести в ко­мандной строке mc и нажать клавишу Enter.

Midnight Commander позволяет сделать работу с файлами более удобной и наглядной, хотя для работы с файлами и управления файловой системой могут быть использованы такие команды операционной системы, как pwd, ls, cd, mv, mkdir, rmdir, cp, rm, cat, more и т. д.

В Midnight Commander используются функциональные клавиши F1 — F10, к которым привязаны часто выполняемые операции

Таблица 3.1 Функциональные клавиши Midnight Commander

Команда меню Дерево каталогов отображает структуру каталогов файловой системы.

Меню Команда^Поиск файла или комбинация клавиш Alt + ? или Esc + ? позволяют вызвать интерфейс для поиска файлов, текста в файлах и т.п. Поскольку вопросительный знак в английской раскладке находится на одной кнопке с символом / , то для вызова поиска следует нажимать комбинацию Alt + Shift + / .

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

Графическая кнопка Дерево позволяет выбрать начальный каталог по­иска из дерева каталогов. Поле «Содержание» (Contents) позволяет задать регулярное выражение для поиска по правилам команды egrep. Нажатие графической кнопки Дальше запускает процедуру поиска. Во время поиска его можно приостановить графической кнопкой Остановить и продолжить по кнопке Продолжить.

С помощью клавиш Т и J- можно просматривать список найденных файлов. Графическая кнопка Перейти используется для перехода в каталог, в котором находится подсвеченный файл, а кнопка Повтор служит для задания параметров нового поиска. Для выхода из режима поиска предназначена графическая кнопка Выход.

Следующие комбинации клавиш облегчают работу с Midnight Commander:

- Ctrl + u (или через меню Команда^Переставить панели ) меняет местами содержимое правой и левой панелей;

- Ctrl + o (или через меню Команда^Ътключить панели) скрывает или воз­вращает панели Midnight Commander, за которыми доступен для работы командный интерпретатор оболочки и выводимая туда информация.

- Ctrl-x] Qd (или через меню Команда^Сравнить каталоги ) позволяет сравнить содержимое каталогов, отображаемых на левой и правой панелях.

Меню Команда ^История команд (аналог команды history) выводит список ранее выполнявшихся команд. Подсвеченную строку из истории можно скопировать в командную строку оболочки (перемещение подсветки — клавишами Т и t , копирование — по клавише Enter).

Меню Команда^Редактировать файл расширений позволяет редактировать файл mc.ext, в котором задаются правила связи определённых расширений файлов с инструментами их запуска или обработки (просмотра, редакти­рования или выполнения). Запуск выбранной программы осуществляется после выбора файла и нажатия клавиши Enter.

Меню Команда^Редактировать файл меню предназначено для редактирова­ния пользовательского меню (настройка клавиши F2 ).

Дополнительную информацию о Midnight Commander можно получить по команде man mc.

3.2.3. Структура программы на языке ассемблера NASM

Программа на языке ассемблера NASM, как правило, состоит из трёх секций: секция кода программы, секция инициированных (известных во время компиляции) данных и секция неинициализированных данных (тех, под которые во время компиляции только отводится память, а значение присваивается в ходе выполнения программы).

В NASM эти секции определяются с помощью директивы SECTION. Тра­диционно секция кода называется .text, секция инициированных данных — .data, а секция неинициализированных данных — .bss.

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

SECTION .data ...

; Секция содержит переменные, для

; которых задано начальное значение

SECTION .bss

...

; Секция содержит переменные, для

; которых не задано начальное значение

SECTION .text

; Секция содержит код программы
1   2   3   4



написать администратору сайта