- •Назовите цели и задачи дисциплины. Дайте определение понятиям ‘программы’, ‘программное обеспечение’, ‘системное программирование’. Перечислите и опишите этапы подготовки программы.
- •Перечислите команды работы с битами. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования команд работы с битами.
- •Перечислите команды загрузки элемента цепочки в аккумулятор. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования команд загрузки элемента цепочки в аккумулятор.
- •Перечислите команды циклического сдвига. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования команд циклического сдвига.
- •Дайте определение понятия «синтаксис ассемблера» как правила написания программных кодов. Представьте формат предложения ассемблера. Представьте общий формат команд и макрокоманд ассемблера.
- •Обоснуйте необходимость организации циклов. Перечислите средства организации циклов. Опишите способы организации циклов. Приведите примеры использования команд организации циклов.
- •Дайте определение понятия «директива» в ассемблере. Представьте общий формат директив ассемблера. Перечислите существующие директивы.
- •Перечислите этапы создания программы на языке ассемблера. Опишите результат, получаемый на каждом этапе от редактирования до отладки. Отобразите на схеме все этапы процесса разработки программы.
- •Компоновка программы
- •Дайте определение понятия “операнд”. Приведите классификацию операндов, поддерживаемых транслятором ассемблера. Поясните на примерах каждый перечисленный пункт классификации.
- •Перечислите возможные типы операторов ассемблера. Опишите синтаксические правила формирования выражений ассемблера. Приведите примеры, поясняющие правила формирования выражений.
- •Приведите синтаксис директивы model. Опишите функциональное назначение и принцип ее работы. Перечислите модели памяти с описанием назначения модели и указанием типа кода и типа данных.
- •Назовите команды условного перехода. Укажите источники условия перехода. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования команд условного перехода.
- •Команды условного перехода(несколько): jcc,jcxz/jecxz, je, jz, jg, jge, jl, jle
- •Приведите структуру машинной команды. Опишите назначение полей машинной команды.
- •Назовите команды сравнения. Опишите синтаксис каждой команды и принцип ее работы. Приведите пример встраивания в код программы на ассемблере команд сравнения. Команды сравнения: cmp, test
- •Назовите виды адресации операндов в памяти и принципы организации каждого вида адресации. Дайте описание синтаксиса каждого вида адресации. Приведите пример каждого вида адресации.
- •Перечислите команды преобразования типов. Приведите синтаксис каждой команды. Приведите примеры использования команд преобразования типов при выполнении арифметических операций.
- •Перечислите команды сложения и вычитания двоичных чисел. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры сложения и вычитания двоичных чисел.
- •Перечислите логические команды языка ассемблер. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования логических команд.
- •Перечислите команды умножения двоичных чисел. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры умножения двоичных чисел.
- •Поясните механизм формирования локальных переменных программы на ассемблере (masm32) при трансляции.
- •Дайте определение понятию «таблица», «прямой табличный доступ». Опишите, как происходит процесс прямого табличного доступа в таблице.
- •Поясните механизм формирования системного времени в среде os Windows.
- •Опишите механизм вызова процедур win32, принадлежащих api-интерфейсу. Приведите пример формирования участка кода программы на ассемблере (masm32) при трансляции.
- •Опишите, как формируется стековый фрейм процедуры. Приведите пример формирования кода программы на ассемблере (masm32) при трансляции.
- •Поясните отличие директив «.Data» и «.Data?» (masm32). Обоснуйте необходимость применения представления данных именно с такими различиями.
- •Опишите функциональное назначение и суть соглашения «stdcall» (masm32).
- •Опишите директиву «model flat» (masm32). Функциональное назначение и принцип ее работы. Перечислите модели памяти с описанием назначения модели и указанием типа кода и типа данных.
- •Поясните механизм формирования локальных переменных программы на ассемблере (masm32) при трансляции.
- •Опишите функциональное назначение и способ представления нуль-терминированной строки в программе на ассемблере (masm32).
- •Поясните механизм воздействия на порядок выполнения инструкций программы на ассемблере (masm32) при использовании директивы «.Start».
- •Назовите этапы трансляции. Опишите общую схему работы компилятора.
- •Дайте понятие прохода. Назовите отличия многопроходных трансляторов от однопроходных. Укажите, от чего зависит количество проходов.
Назовите цели и задачи дисциплины. Дайте определение понятиям ‘программы’, ‘программное обеспечение’, ‘системное программирование’. Перечислите и опишите этапы подготовки программы.
Целью дисциплины является изучение принципов и методов системного программирования. Задачами изучения дисциплины являются: обучить учащегося архитектуре команд процессора, средства взаимодействия с внешними устройствами компьютера; обучить разрабатывать программы на ассемблере. Программа – это данные, предназначенные для управления конкретными компонентами системы обработки информации. ПО – совокупность программ системы обработки информации и документов, необходимых для их эксплуатации. Системное программирование – подраздел программирования, заключающийся в работе над системным программным обеспечением. Процесс подготовки и отладки программы на языке ассемблера включает этапы подготовки исходного текста, трансляции, компоновки и отладки. Подготовка исходного текста программы выполняется с помощью любого текстового редактора. Файл с исходным текстом должен иметь расширение .asm. Трансляция исходного текста программы состоит в преобразовании строк исходного языка в коды машинных команд и выполняется с помощью транслятора с языка ассемблера. Компоновка объектного файла выполняется с помощью программы компоновщика. Её основное назначение — подсоединение к файлу с основной программой файлов с подпрограммами и настройка связей между ними. Отладка готовой программы может выполняться разными методами, выбор которых определяется структурой и функциями отлаживаемой программы.
Перечислите команды деления двоичных чисел. Опишите синтаксис каждой команды и принцип ее работы. Назовите исключения, которые могут возникнуть при выполнении операции деления. Приведите примеры деления двоичных чисел.
Команды DIV и IDIV предназначены для целочисленного деления беззнаковых и знаковых двоичных данных соответственно.
Синтаксис:
DIV источник(делитель)
IDIV источник (делитель)
Команда DIV выполняет целочисленное деление без знака AL, АХ или ЕАХ (в зависимости от размера источника) на источник (регистр или переменная) и помещает результат в AL, АХ или ЕАХ, а остаток - в АН, DX или EDX соответственно. Команда IDIV выполняет целочисленное деление со знаком AL, AX или ЕАХ (в зависимости от размера источника) на источник (регистр или переменная) и помещает результат в AL, АХ или ЕАХ, а остаток - в АН, DX или EDX соответственно. Исключения: При выполнении операции деления возможно возникновение исключительной ситуации: 0 — ошибка деления. Эта ситуация возникает в одном из двух случаев: делитель равен 0 или частное слишком велико для его размещения в регистре eax/ax/al.
Пример:
.data
delt db 45
.code
div delt
Дайте определение понятия ‘системы программирования’. Назовите принципы функционирования систем программирования. Перечислите их возможности. Приведите примеры современных систем программирования.
Система программирования – система, образуемая языкам программирования, компьютером или интерпретатором программ, а также вспомогательными средствами для подготовки программ к форме, пригодной для их выполнения. Система программирования и трансляции — очень наукоемкая область программного обеспечения. Организация трансляторов — это было первое применение теоретических достижений науки, которые заключались в следующем. За счет возможности использования тех или иных грамматик (наборов формальных правил построения лексических конструкций и синтаксических правил), можно разделить программную реализацию лексических и синтаксических анализаторов на два компонента. Первый компонент — это программа, которая в общем случае ничего не знает о том языке, который она будет анализировать. Второй компонент — это набор данных, представляющий из себя формальное описание свойств языка, который мы анализируем. Совмещение этих двух компонентов, позволяет автоматизировать процесс построения лексических и синтаксических анализаторов, а также генераторов кода, для различных языков программирования. Современные системы программирования в своем составе имеют средства автоматизации построения компиляторов.
Перечислите способы передачи аргументов в процедуру. Опишите способ передачи аргументов через регистры. Перечислите достоинства и недостатки данного способа. Приведите пример передачи аргументов в процедуру через регистры.
Способы передачи аргументов в процедуру: через область памяти, через стек, через регистры, и с помощью extern и public.Передача аргументов через регистры — наиболее простой в реализации способ передачи данных. Данные, переданные подобным способом, становятся доступными немедленно после передачи управления процедуре. Этот способ можно рекомендовать для передачи небольших объемов данных.Недостатки этого способа: небольшое число доступных для пользователя регистров; необходимость постоянно помнить о том, какая информация в каком регистре находится; ограничение размера передаваемых данных размерами регистра — если размер данных превышает 8, 16 или 32 бита, то передачу данных посредством регистров произвести нельзя и передавать приходится не сами данные, а указатели на них. Достоинства:наиболее простой в реализации способ передачи данных(простота).
Пример:
Primer proc uses eax ecx
.....
Primer endp
Раскройте суть понятия ‘программный отладчик’. Опишите процесс их эксплуатации. Перечислите возможности программных отладчиков. Приведите примеры программных отладчиков.
Программный отладчик— компьютерная программа, предназначенная для поиска багов в других программах, ядрах операционных систем, SQL-запросах и других видах кода. Отладчик позволяет выполнять пошаговую трассировку, отслеживать, устанавливать или изменять значения переменных в процессе выполнения кода, устанавливать и удалять контрольные точки или условия останова и т.д.
Возможности:
Способы отображения дизассемблированного кода: MASM, IDEAL, HDA.
Мощный анализатор кода, распознающий процедуры, циклы, ветвления, таблицы, константы и текстовые строки.
Развёрнутая система поиска: поиск всех возможных констант, команд, последовательностей команд, текстовых строк и ссылок в коде на данный адрес.
Распознание и расшифровка более двух тысяч типичных функций Windows API.
Эвристический анализ стека, распознание адресов возврата в родительскую процедуру.
Простые, условные и протоколирующие точки останова.
Пример отладчиков: OllyDbg, Turbodbg.