- •Содержание
- •Преобразование чисел
- •Целые числа
- •Дробные числа
- •Содержание отчета
- •Контрольные вопросы
- •Задание на занятие
- •Лабораторная работа №2
- •Объединение со структурой с битовыми полями в языке Си.
- •Содержание отчета
- •Контрольные вопросы
- •Задание на занятие
- •Лабораторная работа №3
- •Содержание отчета
- •Контрольные вопросы
- •Задание на занятие
- •Лабораторная работа №4
- •Содержание отчета
- •Контрольные вопросы
- •Задание на занятие
- •Лабораторная работа №5
- •Содержание отчета
- •Контрольные вопросы
- •Задание на занятие
- •Лабораторная работа №6
- •Программирование на ассемблере
- •Основные команды ассемблера
- •Директивы
- •Программные прерывания
- •Отладка программ
- •Содержание отчета
- •Контрольные вопросы
- •Задание на занятие
- •Лабораторная работа №7
- •Команда jmp
- •Команда Loop
- •Флаговый регистр (flags)
- •Команды условного перехода
- •Знаковые и беззнаковые данные
- •Команды логических операций: and, or, xor, test, not
- •Команды сдвига и циклического сдвига
- •Команды сдвига
- •Команды циклического сдвига
- •Содержание отчета
- •Контрольные вопросы
- •Задание на занятие
- •Литература
Содержание отчета
Для защиты лабораторной работы каждым студентом должен быть написан отчет о лабораторной работе, оформленный в отдельной тетради для лабораторных работ по курсу «Вычислительные машины, системы и сети», включающий тему, цель работы и содержащий следующие пункты:
Основные сведения по программированию на ассемблере.
Листинг программы с комментариями на каждую команду (или группы команд, логически связанные).
Заполненная таблица хранения переменных в сегменте данных.
Заполненная таблица машинных кодов.
Полное описание каждого прерывания, используемого в программе;
Пояснение, что происходит в строках 20-22.
Пояснение, что делает программа.
Что произойдет, если в строке 23 поменять переменную message на переменную fin?
Контрольные вопросы
Что такое язык ассемблера? Как он связан с машинным языком?
Зачем нужны подпрограммы на языке ассемблера в программах на языках высокого уровня?
Перечислите этапы разработки программы на языке ассемблера.
Какие существуют режимы работы ассемблера? Чем они отличаются?
Напишите формат команды языка ассемблер.
Что такое программное прерывание?
Для чего нужны входные и выходные параметры сервиса?
Как определяются переменные в программе на языке ассемблера?
Как определяются сегменты в программе?
Каких типов бывают сегменты?
Задание на занятие
Сделать исполняемый модуль (файл с расширением exe) для программы:
masm
model small
.stack 100h
.data
message db 'Запустите эту программу в отладчике$'
perem_1 db 0ffh
perem_2 dw 3a7fh
perem_3 dd 0f54d567ah
mas db 10 dup ('0')
pole_1 db 5 dup (?)
adr dw perem_3
adr_full dd perem_3
fin db 'Конец сегмента данных программы$'
.code
start:
xor bh,bh
mov dx,0a0fh
mov ah,02h
int 10h
mov ax,@data
mov ds,ax
mov ah,09h
mov dx, offset message
int 21h
mov ax,4c00h
int 21h
end start
Определить структуру программы (режим программирования, количество и виды сегментов, модель памяти)
Определить с помощью электронного справочника, что делает каждое программное прерывание, и с помощью Turbo Debugger – какие регистры меняются после каждого из них.
Cпомощью программыTurboDebuggerопределить:
как хранятся переменные в сегменте данных. Заполните следующую таблицу:
Имя переменной
Значение в теле программы
Смещение в сегменте данных
Значение в сегменте данных
машинные коды используемых команд. Заполните следующую таблицу, записывая команды по алфавиту:
Команда на языке ассемблера |
Машинный код в шестнадцатеричном виде |
Лабораторная работа №7
Команды переходов и логических операций
Продолжительность: 4 часа.
Цель: научиться передавать управление в программе с помощью циклов и условных и безусловных переходов, а также научиться логическим и битовым операциям на языке Ассемблер.
Основные сведения
Большинство программ содержат циклы, в которых несколько команд повторяются до достижения определенного требования, и различные проверки, определяющие, какие из нескольких действий следует выполнять. Управление передается по адресу команды, которая не находится непосредственно за выполняемой в текущий момент командой. Такая передача может осуществляться вперед для выполнения новой группы команд или назад для повторения уже выполненных команд [6].
Ниже приведены четыре способа передачи управления:
Безусловный переход: JMP
Цикл: LOOP
Условный переход: Jnnn (больше, меньше, равно)
Вызов процедуры: CALL
Заметим, что имеется три типа адресов: SHORT (короткий), NEAR (близкий) и FAR (дальний). Адресация SHORT используется при циклах, условных переходах и некоторых безусловных переходах. Адресация NEAR и FAR используется для вызовов процедур (CALL) и безусловных переходов, которые не квалифицируются, как SHORT. Все три типа передачи управления воздействуют на содержимое регистра IP; тип FAR также изменяет регистр CS.