ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.12.2023
Просмотров: 26
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ТУЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Учебная дисциплина
Операционные системы и среды.
Лабораторная работа
Выполнила: Драчева Кристина
Проверила: Андриянова Марина Александровна
Тула 2023
-
Задание на контрольную работу.
Вывести на дисплей в цикле числа 10, 20, 30, 40, 50, 60, 70, 80, 90.
-
Схема алгоритма командного файла
Начало
Вывод запроса на ввод параметров программы
Ожидание ввода параметров
Подготовка к циклу
Вывод на консоль значения
Увеличение на шаг
Пороверка на невыход за предел
да
Вывод параметров на консоль
нет
Завершение работы
-
Листинг командного файла
format PE console
entry start
include 'win32a.inc'
section '.data' data readable writable
Nch db 10,13,'Vvedite startovoe chislo : ',0
Shg db 10,13,'Vvedite shag cikla : ',0
Prdl db 10,13,'Vvedite predel cikla : ',0
zadacha db 10,13,'Nachalo - %d, Shag - %d, Predel %d',10,13,0
resStr db 10,13, ' : %d',0
formatStr db '%d',0
Shag dd ?
Nach dd ?
Predel dd ?
NULL = 0
section '.code' code readable executable
start:
push Nch
call [printf]
push Nach
push formatStr
call [scanf]
push Shg
call [printf]
push Shag
push formatStr
call [scanf]
push Prdl
call [printf]
push Predel
push formatStr
call [scanf]
mov ebx, [Nach]
nach_cikl :
push ebx
push resStr
call [printf]
mov eax, ebx
add eax, [Shag]
mov ebx, eax
cmp ebx, [Predel]
jna nach_cikl
push [Predel]
push [Shag]
push [Nach]
push zadacha
call [printf]
call [getch]
push NULL
call [ExitProcess]
section '.idata' import data readable
library kernel, 'kernel32.dll',\
msvcrt, 'msvcrt.dll'
import kernel,\
ExitProcess, 'ExitProcess'
import msvcrt,\
printf, 'printf',\
getch, '_getch',\
scanf, 'scanf'
-
Описание алгоритма и программы.
Выполнение задания выполнено в собственной оболочке компилятора FASM. Для взаимодействия с клавиатурой и вывода на консоль использованы функции printf, _getch и scanf из библиотеки msvcrt.dll. Для корректного завершения использована функция ExitProcess из библиотеки kernel32.dll.
Программа состоит из трёх секций:
.data
.code
.idata
Секция .data используется для задания строк приглашений и строк выводла, а также резервирования места под параметры.
Секция .code содержит сам код программы.
Секция .idata описывает подключаемые библиотеки и импортируемые функции.
В начале программы задан формат файла (консольное приложение). Затем заданна точка входа. Далее подключается модуль win32a.inc содержащий константы и макросы для работы с Windows.
Работа программы начинается с вывода запроса на ввод параметров цикла. Для этого в стек инструкцией push помещается адрес нужной строки и инструкцией call вызываем функцию printf которая в качестве аргумента берёт из стека адрес и выводит на консоль строку хранящуюся по этому адресу.
Получение ответа на запрос производится с помощью функции scanf. Для этого в стек помещается адрес зарезервированный под этот параметр и строка формата получаемых данных. Для инициализации адреса используются метки.
После получения параметров устанавливается начальное число с которого будет начат счёт. Для этого используется регистр ebx. И начинается выполнение самого цикла.
Начинается с установки метки начала цикла.
Затем выводится на экран содержимое регистра ebx.
Командой mov копируется содержимое регистра ebx в eax.
К содержимому регистра eax инструкцией add прибавляется значение шага хранящееся по адресу инициализированному меткой Shag.
Значение регистра eax переносится в регистр ebx.
Содержимое ebx командой cmp сравнивается с содержимым памяти по адресу метки Predel.
Дальше командой jna проверяются флаги c и z, и если условие перехода выполнено (меньше или равно) то происходит переход на метку начала цикла. В противном случае происходит выход из цикла.
На экран выводятся параметры цикла
Вызывается функция корректного завершения программы ExitProcess с параметром 0.
-
Результат выполнения.
-
Контрольные вопросы.-
Какова область применения языка программирования Ассемблер?
-
Язык ассемблер отлично подходит для написания программ, где важными критериями является:
скорость работы (игры, драйверы);
объём доступной для использования памяти (вирусные и защитные программы, встраиваемое ПО, программы для микроконтроллеров и микропроцессоров, загрузочные сектора).
-
Почему Ассемблер называется машинно–ориентированным языком программирования?
Язык ассемблер называется машинно-ориентированным по той причине, что для каждой команды процессора существует свой аналог команды на ассемблере.
-
Какими особенностями характеризуются программы, разработанные на языке Ассемблер, относительно программ, разработанных на языках программирования высокого уровня?
Программный модуль на ассемблере обладает, как правило, более высоким быстродействием и меньшим размером, чем написанный на языке высокого уровня.
-
Какие группы команд по функциональному назначению имеют микропроцессоры типа 80х86?
азовую систему команд микропроцессора можно условно разделить на несколько групп по функциональному назначению:
команды передачи данных
команды установки единичного бита
команды работы со стеком
команды ввода-вывода
арифметические команды
логические команды
сдвиговые команды
команды коррекции двоично-десятичных чисел
команды преобразования типов
команды управления флагами
команды прерываний
команды передачи управления
команды синхронизации работы процессора
команды побитового сканирования
строковые команды
-
Какие форматы представления чисел используются в арифметических командах микропроцессоров типа 80х86?
Система команд І80х86 поддерживает только числа размером в байт и слово и частично — размером в двойное слово.
-
Какие регистры микропроцессоров типа 80х86 являются доступными для программиста?
Регистры общего назначения. AL, AH, AX, BL, BH, BX, CL, CH, CX, DL, DH, DX.
-
Какие способы адресации используются в командах микро–процессоров типа 80х86?
В командах микро–процессоров типа 80х86 применяется егментная адресация памяти.
-
Каковы основные принципы организации системы прерываний в микропроцессорах типа 80х86?
Семейство микропроцессоров Intel 80x86 поддерживает 256 уровней приоритетных прерываний организованных в таблицу векторов прерываний
-
Какова структура программы на языке Ассемблер для микро–процессоров типа 80х86?
Программа, написанная на языке ассемблера, может состоять из нескольких частей, называемых модулями. В каждом модуле могут быть определены один или несколько сегментов данных, стека и кода. Любая законченная программа на ассемблере должна включать один главный, или основной, модуль, с которого начинается ее выполнение.
-
Что такое "модель памяти"? Какие модели памяти предусматриваются в программах для микропроцессоров типа 80х86?
«Модель памяти» это форма её организации. Микропроцессор аппаратно поддерживает несколько моделей использования оперативной памяти:сегментированную модель, страничную модель,
плоскую модель.
-
Чем различаются друг от друга модели памяти Tiny и Small?
TINY — код, данные и стек размещаются в одном и том же сегменте размером до 64 Кб. Эта модель памяти чаще всего используется при написании на ассемблере небольших программ; SMALL — код размещается в одном сегменте, а данные и стек — в другом (для их описания могут применяться разные сегменты, но объединенные в одну группу).
-
Что такое "система программирования"?
Система программирования — это система для разработки новых программ на конкретном языке программирования.
-
Какие компоненты входят в систему программирования Microsoft Assembler?
Система программирования Microsoft Assembler представляет собой набор программного и методического обеспечения, предназначенный для разработки и отладки программ на языке Ассемблер. Система содержит следующие основные программные компоненты:
MASM.EXE – транслятор–компилятор, осуществляющий преобразование исходной программы на языке Ассемблер (файл типа *.ASM) в объектную программу (файл типа *.OBJ);
LINK.EXE – компоновщик (редактор связей), осуществляющий преобразование объектной программы в исполняемую программу (файл типа *.COM или *.EXE);
LIB.EXE – программу (библиотекарь), позволяющую создавать и обслуживать библиотеки объектных программ (файлы типа *.LIB);
ML.EXE – программу, которая интегрирует функции транслятора и компоновщика;
ML.ERR – файл, который содержит тексты информационных сообщений программы ML.EXE;
EXE2BIN.EXE – программу преобразования исполняемого файла из формата EXE в исполняемый файл формата COM;
CODEVIEW.EXE – программу–отладчик, предназначенную для облегчения поиска и локализации семантических ошибок в исходной программе на языке Ассемблер.
-
Какие компоненты входят в систему программирования Turbo Assembler?
Система программирования Turbo Assembler является практически полным функциональным аналогом системы программирования Microsoft Assembler. Основными программными компонентами системы программирования Turbo Assembler являются следующие:
TASM.EXE – транслятор–компилятор, осуществляющий преобразование исходной программы на языке Ассемблер (файл типа *.ASM) в объектную программу (файл типа *.OBJ);
TLINK.EXE – компоновщик (редактор связей), осуществляющий преобразование объектной программы в исполняемую программу (файл типа *.COM или *.EXE);
TLIB.EXE – программа–библиотекарь, позволяющая создавать и обслуживать библиотеки пользовательских программ (файлы типа *.LIB);
TDEBUG.EXE – программа–отладчик, предназначенная для облегчения поиска и локализации семантических ошибок в исходной программе на языке Ассемблер.
-
Какие функции выполняет транслятор с языка программирования?
Транслятор выполняет следующие основные задачи: - анализирует транслируемую программу, в частности определяет, содержит ли она синтаксические ошибки; - генерирует выходную программу (ее часто называют объектной) на языке машинных команд