Организация ввода-вывода на ассемблере
МЕТОДИЧЕСКОЕ УКАЗАНИЕ
для проведения лабораторной работы по теме ''Программирование контроллера приоритетных прерываний'' по курсу ''Организация ЭВМ'' для студентов специальностей 220100, 071900
Тольятти Создание и компиляция программ на ассемблере
Процесс разработки программы на ассемблере состоит из пяти этапов: 1. Создание файла с исходным текстом программы в любом текстовом редакторе. Расширение файла с исходным текстом может быть .asm, или .txt, или .doc. 2. Создание объектного модуля. В среде DOS или NORTON или FAR в командной строке набираете следующую команду: Tasm name.asm или Tasm.exe name.asm name.obj name.asm файл с исходным текстом программы. При этом файлы tasm.exe и name.asm должны находится в одном каталоге. После запуска этой команды мы получаем объектный файл с расширением .obj. Если объектный файл не появился, то в программе содержатся ошибки. Перечень ошибок можно посмотреть, отключив панели (ctrl+o или Ctrl+f1 и ctrl+f2). 3. Создание исполнительного файла. В командной строке набираем следующую команду: Tlink name.obj или Tlink.exe name.obj name exe При этом файлы tlink.exe и name.obj должны находится в одном каталоге. После запуска этой команды мы получаем запускной файл с расширением .exe. Если запускной файл не появился в этом каталоге, то в данном каталоге не хватает некоторых библиотек. Перечень файлов можно посмотреть, отключив панели (ctrl+o или Ctrl+f1 и ctrl+f2). 4. Тестирование программы. Запустите исполнительный файл. 5. Пошаговая отладка. В командной строке набираем следующую команду: Td name . exe Структура программы на ассемблере Model small ;модель программы, или же количество памяти на сегмент . data ;сегмент данных ;описание переменных . stack 100 h ;сегмент стека . code ;сегмент данных ;процедуры, макрокоманды main : mov ax,@data mov ds , ax;основная программа mov ax ,4 c 00 h int 21 h ;выход из программыEnd main Директивы резервирования памяти Для описания простых типов данных в программе используются специальные директивы резервирования и инициализации данных, которые, по сути, являются указаниями транслятору на выделение определенного объема памяти. Если проводить аналогию с языками высокого уровня, то директивы резервирования и инициализации данных являются определениями переменных. Машинного эквивалента этим директивам нет; просто транслятор, обрабатывая каждую такую директиву, выделяет необходимое количество байт памяти и при необходимости инициализирует эту область некоторым значением . Директивы резервирования и инициализации данных простых типов имеют формат:
Рис. 1. Директивы описания данных простых типов
На рис. 1 использованы следующие обозначения: · ? показывает, что содержимое поля не определено, то есть при задании директивы с таким значением выражения содержимое выделенного участка физической памяти изменяться не будет. Фактически, создается неинициализированная переменная; · значение инициализации — значение элемента данных, которое будет занесено в память после загрузки программы. Фактически, создается инициализированная переменная, в качестве которой могут выступать константы, строки символов, константные и адресные выражения в зависимости от типа данных. Подробная информация приведена в приложении 1; · выражение — итеративная конструкция с синтаксисом, описанным на рис. 5.17. Эта конструкция позволяет повторить последовательное занесение в физическую память выражения в скобках n раз. · имя — некоторое символическое имя метки или ячейки памяти в сегменте данных, используемое в программе. · db — резервирование памяти для данных размером 1 байт. Директивой db можно задавать следующие значения: o выражение или константу, принимающую значение из диапазона: для чисел со знаком –128...+127; для чисел без знака 0...255; o символьную строку из одного или более символов. Строка заключается в кавычки. В этом случае определяется столько байт, сколько символов в строке. · dw — резервирование памяти для данных размером 2 байта. o выражение или константу, принимающую значение из диапазона: для чисел со знаком –32 768...32 767; для чисел без знака 0...65 535; o выражение, занимающее 16 или менее бит, в качестве которого может выступать смещение в 16-битовом сегменте или адрес сегмента; o 1- или 2-байтовую строку, заключенная в кавычки. · dd — резервирование памяти для данных размером 4 байта. o выражение или константу, принимающую значение из диапазона: для чисел со знаком –2 147 483 648...+2 147 483 647; для чисел без знака 0...4 294 967 295; o относительное или адресное выражение, состоящее из 16-битового адреса сегмента и 16-битового смещения; o строку длиной до 4 символов, заключенную в кавычки. · df — резервирование памяти для данных размером 6 байт; · dp — резервирование памяти для данных размером 6 байт. Директивами df и dp можно задавать следующие значения: o выражение или константу, принимающую значение из диапазона: для чисел со знаком –2 147 483 648...+2 147 483 647; для чисел без знака 0...4 294 967 295; o относительное или адресное выражение, состоящее из 32 или менее бит (для i80386) или 16 или менее бит (для младших моделей микропроцессоров Intel); o адресное выражение, состоящее из 16-битового сегмента и 32-битового смещения; o строку длиной до 6 байт, заключенную в кавычки. · dq — резервирование памяти для данных размером 8 байт. относительное или адресное выражение, состоящее из 32 или менее бит o константу со знаком из диапазона –263...263–1; o константу без знака из диапазона 0...264–1; o строку длиной до 8 байт, заключенную в кавычки. · dt — резервирование памяти для данных размером 10 байт. относительное или адресное выражение, состоящее из 32 или менее бит o адресное выражение, состоящее из 16-битового сегмента и 32-битового смещения; o константу со знаком из диапазона –279...279-1; o константу без знака из диапазона 0...280-1; o строку длиной до 10 байт, заключенную в кавычки; o упакованную десятичную константу в диапазоне 0...99 999 999 999 999 999 999. Очень важно уяснить себе порядок размещения данных в памяти. Он напрямую связан с логикой работы микропроцессора с данными. Микропроцессоры Intel требуют следования данных в памяти по принципу: младший байт по младшему адресу. Для иллюстрации данного принципа рассмотрим пример 1, в котором определим сегмент данных. В этом сегменте данных приведено несколько директив описания простых типов данных. Пример 1. Пример использования директив резервирования и инициализации данных. Результатом работы данной программы будет строка 'Привет, все работает' model small . stack 100 h .datames db 'Привет, все работает',’$' ;определение строки perem_1 db 0ffh ;определение контстантыperem_2 dw 3a7fh ;определение контстантыperem_3 dd 0f54d567ah ;определение контстантыmas db 10 dup (' ') ;определение пустого массива из 10 байтadr dw perem_3 ;переменная adr содержит адрес ;внутри сегмента переменной perem_3a_full dd perem_3 ;переменная a_full содержит полный ;адрес переменной perem_3fin db 'Конец сегмента данных программы $'.code start:;занесение в сегментный регистр адреса сегмента данных mov ax,@data mov ds , ax mov ah,09hmov dx,offset mesint 21h ;вывод на экран строки mesmov ax ,4 c 00 h int 21 h ;выход из программыEnd start
Окончание работы программы сопровождается полной выгрузкой программы из оперативной памяти, это осуществляется функцией 4с00h прерывания int 21h. Все что в данной программе выделено жирным шрифтом обязательно при написании любой программы. При написании программ на ассемблере регистр букв не важен. Организация ввода-вывода на ассемблере
Ввод-вывод данных в компьютер осуществляется посредством различных периферийных устройств. Общение процессора с различными периферийными происходит через систему прерываний. Для ввода-вывода данных служит прерывание int 21h. Основная последовательность действий при использовании прерываний 2lh (DOS): 1. Поместить номер функции в регистр ah. 2. Поместить передаваемые функции параметры в определенные регистры (они приведены при описании каждой функции). 3. Вызвать прерывание 2lh (DOS) командой int 21h 4. Извлечь результаты работы функций из определенных регистров. Какие именно регистры и что они содержат после возврата управления из функции программе пользователя, указывается при описании каждой функции. Прерывание DOS 2lh предназначено для предоставления программисту различных услуг со стороны операционной системы. Этими услугами является набор функций. Какая именно функция должна быть вызвана, указывается числом в регистре ah.
Популярное: Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Почему стероиды повышают давление?: Основных причин три... Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (233)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |