На бирже курсовых и дипломных проектов можно найти готовые бесплатные и платные работы или заказать написание уникальных курсовых работ, дипломов, лабораторных работ, контрольных работ, диссертаций, рефератов по самым низким ценам. Добавив заявку на написание требуемой для вас работы, вы узнаете реальную стоимость ее выполнения.

ЛИЧНЫЙ КАБИНЕТ 

 

Здравствуйте гость!

 

Логин:

Пароль:

 

Запомнить

 

 

Забыли пароль? Регистрация

Быстрая помощь студентам

 

Результат поиска


Наименование:


курсовая работа Основы микропроцессорной техники

Информация:

Тип работы: курсовая работа. Добавлен: 11.06.13. Сдан: 2012. Страниц: 25. Уникальность по antiplagiat.ru: < 30%

Описание (план):


1. ОБЩАЯ ЧАСТЬ
  1.1. Обоснование  выбора и описание операционной  системы
  Операционная  система, сокр. ОС (англ. operating system) — комплекс управляющих и обрабатывающих программ, которые, с одной стороны, выступают как интерфейс между устройствами вычислительной системы и прикладными программами, а с другой стороны — предназначены для управления устройствами, управления вычислительными процессами, эффективного распределения вычислительных ресурсов между вычислительными процессами и организации надёжных вычислений. Это определение применимо к большинству современных ОС общего назначения.
  Линейку самых гибких, универсальных и  надёжных операционных систем представляет компания Microsoft. Семейство операционных систем Windows претерпело сильные изменения по сравнению с начальной версией Windows 3.1, ставшей популярной в 90-е годы. На сегодняшний день пользователям предлагается несколько версий операционных систем.
  Моим выбором является ОС  MS Windows 7 Максимальная.  Это наиболее универсальный и производительный выпуск Windows 7. Он сочетает в себе:
      выпуск «Домашняя расширенная» с развлекательными функциями;
      выпуск «Профессиональная» с компонентами для ведения бизнеса;
      ОС Windows 7 Максимальная поддерживает 35 языков, обеспечивая дополнительную гибкость. Также предоставляет другие возможности для уверенной и стабильной работы, такие как:
  Повышенная производительность. При использовании Windows 7 Максимальная можно меньше задумываться о технологиях и посвящать больше времени достижению поставленных целей. Улучшения производительности и обновленный рабочий стол помогают быстрее выполнять больше задач. Можно с легкостью присоединяться к доменам и работать с автономными файлами даже без подключения к сети.
  Защита результатов работы. Все выпуски Windows 7 содержат улучшения компонента Архивация и восстановление, поэтому можно настроить архивацию файлов и папок и забыть об этой обязанности. Windows 7 Максимальная также позволяет архивировать файлы, папки и даже диски в сети, а шифрование файлов обеспечивает защиту конфиденциальных сведений на компьютерах с несколькими пользователями.
  Использование программ Windows XP. Большинство программ, предназначенных для Windows XP, эффективно работают и в Windows 7. Для тех программ, которые не удалось запустить, Windows 7 Максимальная предлагает отличное решение: режим Windows XP. Этот компонент для бесплатной загрузки, поддерживающий только выпуски Windows 7 Профессиональная, Максимальная и Корпоративная, может запускать программы Windows XP в отдельном окне на рабочем столе Windows 7.
  Развлечения. Использование компьютера для работы не означает, что нужно пожертвовать развлечениями. Во время перерыва можно сполна насладиться удивительно реалистичной графикой игр благодаря технологии DirectX 11, а также всеми аудиовизуальными возможностями приложения Windows Media Center (например, для просмотра, приостановки и записи телепередач) и проигрывателя Windows Media.
  Из вышеперечисленных возможностей ОС Windows 7 видно, что она более надежна, практична, удобна, не имеет конфликтов с другим программным обеспечением, следовательно ее можно с уверенностью использовать для разработки любой программы. 

   1.2. Описание языка Ассемблер
   Язык программирования наиболее полно учитывающий особенности "родного" микропроцессора и содержащий мнемонические обозначения машинных команд называется Ассемблером. Программа, написанная на Ассемблере называется исходной программой.
   Язы?к ассе?мблераязык программирования низкого уровня, мнемонические команды которого (за редким исключением) соответствуют инструкциям процессора вычислительной системы. Трансляция программы в исполняемый машинный код производится ассемблером (от англ. assembler - сборщик) - программой-транслятором, которая и дала языку ассемблера его название.
 
   Команды языка ассемблера один к одному соответствуют  командам процессора, фактически, они представляют собой более удобную для человека символьную форму записи (мнемокод) команд и их аргументов. При этом одной команде языка ассемблера может соответствовать несколько вариантов команд процессора.
   Кроме того, язык ассемблера позволяет использовать символические метки вместо адресов ячеек памяти, которые при ассемблировании заменяются на автоматически рассчитываемые абсолютные или относительные адреса, а также так называемые директивы (команды, не переводящиеся в процессорные инструкции, а выполняемые самим ассемблером).
   Директивы ассемблера позволяют, в частности, включать блоки данных, задать ассемблирование  фрагмента программы по условию, задать значения меток, использовать макроопределения с параметрами.
   Каждая  модель (или семейство) процессоров  имеет свой набор команд и соответствующий  ему язык ассемблера. Наиболее популярные синтаксисы — Intel-синтаксис и AT&T-синтаксис.
   Существуют  компьютеры, реализующие в качестве машинного язык программирования высокого уровня (Forth, Lisp, Эль-76); фактически, в них он является языком ассемблера.
   Достоинства:
    При достаточной квалификации программиста, язык ассемблера позволяет писать самый быстрый и компактный код. Возможно, даже лучше, чем генерируемый трансляторами языков более высокого уровня;
    Если код программы достаточно большой, данные, которыми он оперирует, не помещаются целиком в регистрах процессора, то есть частично или полностью находятся в оперативной памяти, то искусный программист, как правило, способен значительно оптимизировать программу по сравнению с высокоуровневыми трансляторами по одному или нескольким параметрам: скорость работы (за счёт оптимизации вычислений и/или более рационального обращения к ОП, перераспределения данных), объём кода (в том числе за счёт эффективного использования промежуточных результатов);
    Обеспечение максимального использования специфических возможностей конкретной платформы, что также позволяет создавать более эффективные программы с меньшими затратами ресурсов;
    При программировании на языке ассемблера возможен непосредственный доступ к аппаратуре, в том числе портам ввода-вывода, регистрам процессора и др;
    Язык ассемблера применяется для создания драйверов оборудования и ядра операционной системы;
    Язык ассемблера используется для создания «прошивок» BIOS;
    С помощью языка ассемблера создаются компиляторы и интерпретаторы языков высокого уровня, а также реализуется совместимость платформ;
    Существует возможность исследования других программ с отсутствующим исходным кодом с помощью дизассемблера.
   Недостатки:
    В силу машинной ориентации («низкого» уровня) языка ассемблера человеку сложнее читать и понимать программу на нём по сравнению с языками программирования высокого уровня; программа состоит из слишком «мелких» элементов — машинных команд, соответственно, усложняются программирование и отладка, растёт трудоёмкость, велика вероятность внесения ошибок;
    Требуется высокая квалификация программиста. Код на ассемблере выполняется быстрее, но написанный неопытным программистом, обычно оказывается хуже сгенерированного компилятором;
    Как правило, меньшее количество доступных библиотек по сравнению с современными индустриальными языками программирования;
    Отсутствует переносимость программ на компьютеры с другой архитектурой и системой команд.
   Исторически можно рассматривать язык ассемблера как второе поколение языков программирования ЭВМ (если первым считать машинный код). Недостатки языка ассемблера, сложность  разработки на нём больших программных  комплексов привели к появлению  языков третьего поколения — языков программирования высокого уровня (Фортран, Лисп, Кобол, Паскаль, Си и др.). Именно языки программирования высокого уровня и их наследники в основном используются в настоящее время в индустрии информационных технологий. Однако языки ассемблера сохраняют свою нишу, обусловливаемую их уникальными преимуществами в части эффективности и возможности полного использования специфических средств конкретной платформы.
  На  языке ассемблера пишутся программы  или фрагменты программ, для которых  критически важны:
    быстродействие (драйверы, игры);
    объем используемой памяти (загрузочные секторы, встраиваемое (англ. embedded) программное обеспечение, программы для микроконтроллеров и процессоров с ограниченными ресурсами, вирусы, программные защиты);
    С использованием программирования на языке ассемблера производятся: Оптимизация критичных к скорости участков программ, написанных на языке высокого уровня, таком как C++. Это особенно актуально для игровых приставок, имеющих фиксированную производительность, и для мультимедийных кодеков, которые стремятся делать менее ресурсоёмкими и более популярными;
    Создание операционных систем (ОС). ОС часто пишут на Си, языке, который специально был создан для написания одной из первых версий UNIX. Аппаратно зависимые участки кода, такие как загрузчик ОС, уровень абстрагирования от аппаратного обеспечения (hardware abstraction layer) и ядро, часто пишутся на языке ассемблера. Ассемблерного кода в ядрах Windows или Linux совсем немного, поскольку авторы стремятся к переносимости и надёжности, но, тем не менее, он присутствует. Некоторые любительские ОС, такие как MenuetOS, целиком написаны на языке ассемблера. При этом MenuetOS помещается на дискету и содержит графический многооконный интерфейс;
    Программирование микроконтроллеров (МК) и других встраиваемых процессоров. По мнению профессора Таненбаума, развитие МК повторяет историческое развитие компьютеров новейшего времени.[3] На сегодняшний день для программирования МК весьма часто применяют язык ассемблера. В МК приходится перемещать отдельные байты и биты между различными ячейками памяти. Программирование МК весьма важно, так как, по мнению Таненбаума, в автомобиле и квартире современного цивилизованного человека в среднем содержится 50 микроконтроллеров;
    Создание драйверов. Некоторые участки драйверов, взаимодействующие с аппаратным обеспечением, программируют на языке ассемблера. Хотя в целом в настоящее время драйверы стараются писать на языках высокого уровня в связи с повышенными требованиями к надёжности. Надёжность для драйверов играет особую роль, поскольку в Windows NT и Linux драйверы работают в режиме ядра. Одна ошибка может привести к краху системы;
    Создание антивирусов и других защитных программ;
    Написание трансляторов языков программирования.
   Поскольку на языке ассемблера часто разрабатываются  только фрагменты программ, их необходимо связывать с остальными частями программной системы, написанными на других языках программирования. Это достигается двумя основными способами:
    На этапе компиляции — вставка в программу ассемблерных фрагментов (англ. inline assembler) с помощью специальных директив языка (в частности, данный способ поддерживается языками программирования Си и Delphi), в том числе написание функций на языке ассемблера. Способ удобен для несложных преобразований данных, но полноценного ассемблерного кода, с данными и подпрограммами, включая подпрограммы с множеством входов и выходов, не поддерживаемых высокоуровневыми языками, с его помощью сделать нельзя;
    На этапе компоновки при раздельной компиляции. Для взаимодействия скомпонованных модулей достаточно, чтобы связующие функции (определённые в одних модулях и использующиеся в других) поддерживали нужные соглашения вызова (англ. calling conventions) и типы данных. Написаны же отдельные модули могут быть на любых языках, в том числе и на языке ассемблера.
   Синтаксис языка ассемблера определяется системой команд конкретного процессора.
   Формат  команд и их классификация. Инструкция записывается на отдельной строке и включает до четырех полей, необязательные из которых выделены [ ]:
|[метка:]|мнемоника_команды      |[операнд(ы)]  |[;комментарий]   |
   Метка или символический адрес содержит до 31 символа из букв цифр и знаков ? @ . _ $. Причем цифра не должна стоять первой, а точка, если есть должна быть первой.
   Мнемоника - сокращенное обозначение кода операции (КОП) команды, например мнемоника ADD обозначает сложение (addition).
   Операндами  могут быть явно или неявно задаваемые двоичные наборы, над которыми производятся операции.Операнды приводятся в одной  из четырех систем счисления и  должны оканчиваться символом b(B), o(O), d(D), h(H) для 2, 8, 10 или 16-ной СС. К шестнадцатеричному числу добавляется слева ноль если оно начинается с буквы.
   Система команд может быть классифицирована по трем основным признакам:
    длина команды или число занимаемых ею байтов,
    функциональное назначение и
    способ адресации.
   Для МП 1810ВМ86 (8086) команда занимает от одного до шести байтов. Первым байтом команды  всегда является код операции, например код команды INT XXh равен CD(HEX).
По функциональному  признаку инструкции можно разбить  на пять больших групп:
1) команды  пересылки данных;
2) арифметические  команды;
3) логические  команды;
4) команды  переходов;
5) команды  управления.
   Существует  пять основных способов адресации:
    регистровая;
    непосредственная;
    прямая;
    косвенная;
    стековая.
   Большинство остальных способов адресации являются комбинациями или видоизменениями перечисленных. В первом случае операнд(ы) располагаются в регистрах микропроцессора (МП), например по команде MOV AX,CX пересылается содержимое CX в AX. При непосредственной адресации операнд располагается в памяти непосредственно за КОП, инструкция MOV AL,0f5h записывает число 245(f5) в регистр AL. В случае прямой адресации за КОП следует не сам операнд, а адрес ячейки памяти или внешнего устройства, например команда IN AL,40h вводит байт данных из внешнего устройства с адресом 40h. Косвенная адресация отличается от регистровой тем, что в регистре хранится адрес операнда, т.е. по команде MOV AL,[BX] в аккумулятор al будет записано число из ячейки памяти с адресом, хранящимся в регистре BX. Стековая адресация производится к операндам расположенным в области памяти, называемой стек.
Предопределенные  имена.
1. $ - программный  счетчик. Этот символ отмечает  текущий адрес в текущем сегменте. Полезен при определении длины цепочек байтов или строк.
text  DB 'This string has NN letters'
NN = $ - text;  NN = длине строки text (количеству байтов в этой строке). Не путать часть строки '..NN..' и константу NN!
2. @data - адрес  начала сегмента данных.
....
mov ax,@data
mov ds,ax;
в сегментном регистре DS теперь адрес сегмента данных.
3. ??date, ??time, ??filename - эти имена во время трансляции  заменяются, соответственно на текущие дату, время и имя файла в формате ASCII.
Операторы.
1. () - скобки, определяют порядок вычислений.
2. [] - например [BX] означает содержимое ячейки  памяти с адресом в регистре bx. Признак косвенной адресации.
3. +, -, *, / - операторы  сложения, вычитания, умножения и  деления.
mov ax, (2 * 3 + 8 / 2) - 2; в регистр ax будет помещено  число 8.
4. MOD - деление  по модулю. Даёт остаток.
5. SHL,SHR - сдвиг  операнда влево, вправо.
mov si, 01010101b SHR 3; в регистр SI будет загружено  число 0Ah (00001010).
6. NOT - побитовая  инверсия.
7. AND,OR,XOR - операции "И","ИЛИ","ИСКЛ.ИЛИ".
mov dl, (10d OR 5d) XOR 7d; (dl) будет равно 8.
8. :  - переназначение  сегмента.
mov dl,[es:bx]; поместить  в dl байт данных из сегмента es и отстоящий от его начала на (bx) байтов (смещение).
9. OFFSET - оператор  получения смещения адреса относительно  начала сегмента (то есть количества байтов от начала сегмента до идентификатора адреса).
mov bx, OFFSET table
Директивы (псевдооператоры).
1. : - определяет  близкую метку (в пределах сегмента).
jmp lbl .... ....
lbl:  ....
2 . = - присваивает  символическому имени значение  выражения.
videoram = 0B800h; присвоение videoram = 0B000h;
3.  .CODE - определяет  начало кодового сегмента, то  есть сегмента, где располагаются коды программы.
4. .DATA  - определяет  начало сегмента данных.
5. DB,DW - директивы  резервирующие один или несколько  байтов: DB, или одно или несколько слов: DW.
....
.DATA
fibs  DB 1,1,2,3,5,8,13
rus   DB 'Турбо Ассемблер'
buf   DB 80 DUP(0); резервируется 80 байтов, каждый обнуляется
int   DW 65535; в двух байтах располагается число FFFFh.
Array DW 100 DUP (0); резервируется 100 слов
6. END - обозначает  конец программы.
....
.CODE
MyPROG:....; точка  входа (начало программы).
....; команды  программы
....
END MyPROG
7. ENDM - окончание  блока или макроопределения
8. ENDP - обозначает  конец подпрограммы.
9. EQU - присваивает  символическому имени или строке  значение выражения.
BlkSize EQU 512
BufBlks EQU 4
BufSize EQU BlkSize * BufBlks
10. LABEL - определяет  метку соответствующего типа.
....
.DATA
m_byte LABEL BYTE;метка  m_byte типа BYTE позволяет теперь
m_word DW 0;иметь  доступ отдельно к каждому  байту данных
.CODE;m_word типа WORD
....
mov [m_word],0204h
add [m_byte],'0';теперь  в m_word хранится код
add [m_byte+1],'0';3234h,ASCII код '0' равен 30h
11. LOCAL - определяет  метки внутри макроопределений  как локальные и в каждом макрорасширении вместо них ассемблер вставляет уникальные метки:
??XXXX, где  XXXX = (0000...FFFF)h. Почему ??XXXX ? Да потому  что никому не
должно прийти в голову начинать символическое  имя с ??, и транслятор смело
может генерировать метки не боясь совпадений.
12. MACRO - задает  макроопределение.
Swap   MACRO a,b; a,b - параметры макро (ячейки  памяти)
mov ax,b;данное  макрооопределение позволяет делать mov bx,a; обмен данными между ячейками памяти, в mov a,ax;отличие от команды xchg ;
mov b,bx;нельзя mov a,b;
ENDM
Вызов этого  макроса производится командой: Swap m,n
13.  .MODEL - определяет размер памяти под  данные и код программы.
.MODEL tiny; под программу, данные и стек отводится один общий сегмент (64 Kb).
14.  PROC - определяет  начало подпрограммы.
Print  PROC NEAR
;здесь команды  подпрограммы
Print  ENDP
....
call Print;вызов подпрграммы.
15.  .STACK - определяет размер стека.
.STACK 200h; выделяет 512 байтов для стека.
16.  .RADIX base - определяет систему счисления  по умолчанию, где base -
основание системы счисления: 2, 8, 10, 16.
.RADIX 8
oct    = 77; oct равно 63d.
17.  ; - начало  комментария.
Арифметические  команды.
1. ADD DST, SRC; сложить  содержимое SRC и DST и результат  переслать в DST.
add al, [mem_byte]; mem_byte однобайтовая ячейка памяти;
add [mem_word], dx; mem_word двухбайтовая ячейка памяти;
add ch,10001010b;
2. INC DST; увеличить  (DST) на 1 (инкремент (DST)).
inc si; (SI) <-- (SI) + 1.
inc count; (count) <-- (count) + 1.
3. SUB DST, SRC; вычесть  (SRC) из (DST) и результат поместить  в DST.
4. DEC DST; декремент  (DST).
5. CMP DST, SRC; сравнить  содержимое DST и SRC. Эта команда  выполняет вычитание (SRC) из (DST)   но разность не помещает в DST и по результату операции воздействует на флаги.
условие                                  флаги
OF  SF  ZF  CF
DST > SRC                            0/1   0   0   0
DST = SRC                              0   0   1   0
DST < SRC                            0/1   1   0   1
0/1 - означает, что флаг может быть равен  0 или 1 в зависимости от значений операндов. Флаги OF и SF имеют смысл при операциях со знаковыми числами, CF для беззнаковых чисел. Флаг переполнения OF устанавливается в 1, если в результате операции сложения или вычитания значения переноса в старший двоичный разряд и из старшего двоичного разряда не совпадают. По другому определению OF принимает значение 1, если результат превышает диапазон представления соответствующих чисел. Пусть DST > SRC и оба являются
однобайтовыми числами, тогда:
DST:       1.   (+127)         2.    (+127)
SRC:           -  (+2)              -  (-2)
-------               -------
(+125) (OF)=0        (+129)? (OF)=1
   Во  втором примере результат превышает  диапазон: -128 <= x < = +127. Флаг знака SF устанавливается в '1', если старший бит результата операции равен 1, т.е. при отрицательном результате. В противном случае сбрасывается. Флаг нуля ZF устанавливается в '1' при нулевом результате (!), иначе сбрасывается. Флаг переноса CF = 1, если есть перенос из старшего разряда при сложении или есть заем в младший разряд при вычитании. Иначе флаг сбрасывается. Для первого примера SF = ZF = CF = 0, для второго: SF = 1, ZF= CF = 0.
Логические  команды и команды сдвига.
1. AND DST, SRC; поразрядное  логическое "И".
mov dh, 10101100b;
and dh, 0f0h;
в результате выполнения этих двух команд содержимое DH станет равно 10100000b.
2. OR DST, SRC; поразрядное  логическое "ИЛИ".
or bx,dx;если (BX)=5F0Fh,а  (DX)=7777h, то после операции
;(BX)=7F7Fh.
|BX       |0101 1111 0000 1111 =|
|         |5F0F                 |
|DX       |0111 0111 0111 0111 =|
|         |7777                 |
|BX       |0111 1111 0111 1111 =|
3. XOR DST, SRC; поразрядное  логическое "исключающее ИЛИ".
xor al,55h;если (AL)=5ah, то после операции (AL)=0fh.
4. NOT DST; инверсия  всех битов приемника.
5. TEST DST, SRC; выполняет  операцию AND над операндами, но воздействует только на флаги и не изменяет самих операндов.
6. SHR DST, CNT; логический  сдвиг вправо, освобождающиеся слева  биты заполняются нулем, крайний правый бит выталкивается во флаг CF. Операнд DST может быть ячейкой памяти. 

   2. СПЕЦИАЛЬНАЯ ЧАСТЬ
   2.1. Постановка  задачи
   Написать  программу, которая вычисляет следующее арифметическое выражение: a/b+c*d/(c+b). В программе использовать тип p-строки, первые 2 байта которые хранят информацию о её длине.
   2.2. Текст программы
<p>
 .model    small
.386                        ; используется адресация по базе с помощью AX, DX и т. д.
 .stack    1000h
 .data
 
a    DW    ?                    ; операнды вычисления
b    DW    ?
c    DW    ?
d    DW    ?
 
msg1    DB    71,0,"Vychislenie: a/b+c*d/(c+b)",10,13
 DB    "Vvedite a, b, c, d, razdeliteli - [ENTER]",10,13,"    "
div_zer    DB    14,0,"Delenie na 0",10,13        ; сообщение об ошибке
answer    DB    11,0,"Rezul'tat: "
 
str_c    DB    4,0, 4 DUP(?)                ; буфер p-строки вывода
 
 .code
 
 ASSUME    SS:@stack,DS:@data,CS:@code
 
; ==== Макросы =====
; очистка экрана
clear    MACRO
 MOV AX, 03h
 INT 10h
ENDM
 
; переводит каретку  на новую строку
nl    MACRO
 MOV    AH,2h
 MOV    DL,10
 INT    21h
 MOV    DL,13
 INT    21h
ENDM
 
 
; ==== Процедуры =====
 
 
 
; выводит на экран  строку, указанной длины
; @param STACK 1 - смещение  начала строки
puts    PROC    NEAR
 MOV    BX,SP
 MOV    DX,SS:BX[2]                ; смещение строки
 MOV    BX,DX                    ; для адресации по базе используем тот же BX
 ADD    DX,2                    ; смещаемся на единицу, т. е. первые байты - длина p-строки
 MOV    CX,[BX][0]                ; длина строки хранится в первом байте
 MOV    BX,1
 MOV    AH,40h
 INT    21h
 RET    2
ENDP
 
; сравнивает число  с нулём, аварийно завершает  программу если выполняется деление  на ноль
; @param STACK 1 - делимое
c_zero    PROC    NEAR
 MOV    BX,SP
 MOV    AX,SS:[BX][2]
if_zer1:
 CMP    AX,0
 JE    ifdo_zer1
 JMP    endif_zer1
ifdo_zer1:
 PUSH    OFFSET div_zer
 CALL    puts
 JMP    exit
endif_zer1:
и т.д.................


Перейти к полному тексту работы


Скачать работу с онлайн повышением уникальности до 90% по antiplagiat.ru, etxt.ru или advego.ru


Смотреть полный текст работы бесплатно


Смотреть похожие работы


* Примечание. Уникальность работы указана на дату публикации, текущее значение может отличаться от указанного.