Микропроцессоры и микрокомпьютеры

Автор: Пользователь скрыл имя, 26 Сентября 2011 в 00:48, контрольная работа

Краткое описание

Механизм шлюзов для передачи управления на сегменты кода с другими уровнями привилегий

Файлы: 1 файл

Контрольная по микропроцессорам.doc

— 136.50 Кб (Скачать)

_BS:    ; метка цикла

      mov  es:[di], ax ; отображаем регистр ax нарпрямую в видеобуфер

      add  di, 2  ; инкрементируем счётчик положения элемента

      loop _BS  ; повторяем на весь экран

red_screen:   ; делаем красное окно размером 16*16

      mov di, 704 ; заносим в регистр положения элемента верхний левый

                        ; угол окна (при этом  оно будет располагаться по  центру 

                        ; экрана

      mov ah, 4fh ; загружаем атрибут символа (белые символы на красном

                        ; фоне

      mov cx, 256 ; заносим в cx число повторений ? для окна 16*16

_rs:    ; метка цикла

      mov  es:[di], ax ; отображаем регистр ax нарпрямую в видеобуфер

      push ax  ; сохраняем в стеке регистр ax

      call _increment ; вызываем подпрограмму изменения положения курсора и

                        ; регистра расположения символа di

      pop ax  ; возвращаем из стека регистр ax

      loop _rS  ; повторяем для всего окна

in_text:   ; ввод текста

      mov di, 704 ; заносим в регистр положения элемента верхний левый

                        ; угол окна (при этом  оно будет располагаться по  центру 

                        ; экрана

_IT:    ; метка цикла

      Mov ah, 1  ; код функции "проверка готовности"

      Int 16h  ; обращение к BIOS

      Jz _IT  ; символ не введён, возвращаемся на начало подпрограммы

      Xor ah, ah ; код функции "чтение символа в AL"

      Int 16h  ; обращение к BIOS

      Cmp al, '$' ; сравнение полученного символа с "$"

      Je Quit  ; если это он, то выходим; иначе

      Mov ah, 4fh ; загружаем в ah атрибут символа (белый на красном)

      mov  es:[di], ax ; отображаем символ в видеопамять

      call _increment ; вызываем подпрограмму инкрементирования счётчиков

      jmp _IT  ; возвращаемся в бесконечный цикл

;*******************************************************************************

_increment:   ; инкрементирование строк и столбцов

      inc _stroka ; инкрементируем переменную строки

      cmp _stroka,16 ; сравниваем с 16

      je _CR  ; да ? конец строки ? идём на соотв. обработку

      jmp put_di ; нет ? идём сразу на изменение положения символа

_CR:    ; метка перехода на новую строку

      Mov _stroka, 0 ; загружаем в переменную строки 0

      Inc _stolb ; инкрементируем переменную столбца

      cmp _stolb,16 ; сравниваем с 16

      jne put_di ; нет ? идём сразу на изменение положения символа

      Mov _stolb, 0 ; да ? конец окна - загружаем в переменную столбца 0

Put_di:   ; Установка значения регистра di исходя из значений     ; строк и столбцов

      Mov ax, 160 ; Производим вычисления по формуле:

      Mul _stolb ; (160*y)+704+x+x, где

      Add ax, 704 ; x ? значение переменной _stroka

      Add ax, _stroka ; y ? значение переменной _stolb

      Add ax, _stroka ;

      Mov di, ax ; Заносим результат вычисления в регистр di

Put_d:   ; Установка положения курсора исходя из значений строк и

                        ; столбцов

      Mov bx, _stroka ; Вычисляем положение курсора по горизонтали

      mov ax, 32 ; по формуле x+32

      Add ax, bx ; x+32

      Mov dl, al ; заносим в младшую часть регистра dx

      Mov bx, _stolb ; Вычисляем положение курсора по вертикали

      mov ax, 4  ; по формуле

      Add ax, bx ; y+4

      Mov dh, al ; заносим в старшую часть регистра dx

Putpos:   ; Установка позиции курсора

      mov  ax, 0200h ; код функции BIOS

      xor  bx, bx ; видео страница

      int  10h  ; перемещение курсора

      ret   ; выходим из подпрограммы

;*******************************************************************************

Quit:    ; метка выхода

      int  20h  ; выход из программы

;*******************************************************************************

_stolb  dw 0  ; переменная столбца

_stroka  dw 0  ; переменная строки

CSEG ends   ; конец сегмента

end Start   ; конец программы. 
 

    Программа Pro8_5_2.

    Построить движущееся изображение квадратика со стороной 3 точки. Квадратик должен двигаться по диагоналям при начатии клавиш "л" и "п". Программа должна завершать работу при начатии клавиши F7.  
 

CSEG segment    ; имя сегмента, в котором находится программа

org  100h    ; начинается программа со смещения 100h

Start:    ; метка начала программы

      mov ah,0h   ; Установка видео режима

      mov al,13h   ; AL = режим (640*480, 16 цветов)

      int 10h       ; Видео сервис

;******************************************************************************

painting:    ; метка начала отрисовки квадратика

      mov cx, startx  ; загружаем стартовую позицию по горизонтали

      mov dx, starty  ; загружаем стартовую позицию по вертикали

painting1:    ; метка цикла рисования

      mov ah, 0ch  ; загружаем режим видео

      mov al, 4   ; загружаем цвет

      int 10h   ; рисуем точку

      inc cx   ; инкрементируем указатель x

      mov ax, startx  ; получаем позицию точки

      add ax, 3  ; +3

      cmp cx, ax  ; сравниваем с полученной позицией точки  

      jnz painting1  ; если не равна - рисуем следующую точку

      mov cx, startx  ; если равна, загружаем стартовую позицию по

          ; горизонтали

      inc dx   ; инкрементируем указатель y

      mov ax, starty  ; получаем позицию точки

      add ax, 3  ; +3

      cmp dx, ax  ; сравниваем с полученной позицией точки 

      jnz painting1  ; если не равно, продолжаем рисовать

;*******************************************************************************

           ; если равно, опрашиваем кнопки

main:     ; метка опроса кнопок

   Mov ah, 1   ; код функции "проверка готовности"

      Int 16h   ; обращение к BIOS

      Jz main   ; символ не введён, возвращаемся на метку

      Xor ah, ah  ; код функции "чтение символа в AL"

      Int 16h   ; обращение к BIOS

      cmp ah, 41h  ; нажата клавиша F7?

      jz exit_program ; да, идём на выход из программы

      cmp ah, 22h  ; нажата клавиша "п"?

      jz pravo_vverh  ; да, идём на отработку смещения стартовой точки

      cmp ah, 25h  ; нажата клавиша "л"?

      jz levo_vverh  ; да, идём на отработку смещения стартовой точки

      jmp main   ; нажата другая клавиша, идём на ожидание

;*******************************************************************************

pravo_vverh:   ; смещение стартовой точки право вверх

      call clearing  ; вызываем подпрограмму стирания квадратика

      mov ax, startx  ; грузим в ах стартовую позицию

      inc ax   ; увеличиваем на 1

      cmp ax, 321  ; проверяем, не вышла ли за пределы поля

      jnz pravo_vverh1 ; не вышла - прыгаем

      xor ax, ax  ; вышла ? обнуляем регистр ax

pravo_vverh1:   ; метка

      mov startx, ax  ; устанавливаем стартовую точку из ах

      mov ax, starty  ; производим такую же операцию по вертикали

      dec ax   ; только проверяем, не вышла ли слева за предел

      jnz pravo_vverh2 ;

      mov ax, 200  ;

pravo_vverh2:   ;

      mov starty, ax  ;

      jmp painting  ; прыгаем на отрисовку нового квадратика

;*******************************************************************************

levo_vverh:    ; аналогично перемещаем стартовую точку

      call clearing  ; влево и вверх

      mov ax, startx  ;

      dec ax   ;

      jnz levo_vverh1  ;

      mov ax, 320  ;

levo_vverh1:    ;

      mov startx, ax  ;

      mov ax, starty  ;

      dec ax   ;

      jnz levo_vverh2  ;

      mov ax, 200  ;

levo_vverh2:   ;

      mov starty, ax  ;

      jmp painting  ;

;*************************************************************************

clearing:    ; метка начала стирания квадратика

      mov cx, startx  ; где делаем то же, что в рисовании

      mov dx, starty  ; только цвет будет чёрный (цвет фона)

clearing1:    ;

      mov ah, 0ch  ;

      mov al, 0   ;

      int 10h   ;

      inc cx   ;

      mov ax, startx  ;

      add ax, 3  ;

      cmp cx, ax  ; 

      jnz clearing1  ;

      mov cx, startx  ;

      inc dx   ;

      mov ax, starty  ;

      add ax, 3  ;

      cmp dx, ax  ;

      jnz clearing1  ;

      ret

;****************************************************************************

exit_program:   ; метка

      mov ax,0003h  ; восстановливаем

      int 10h   ; текстовый режим  

      int 20h   ; выходим из программы

;****************************************************************************

; переменные

startx dw 159  

starty dw 99

;****************************************************************************

CSEG ends    ; метка конца сегмента

end Start    ; точка входа в программу. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

    Оглавление 

    Теоретический вопрос……………………………………………………………………2

    Практические  задания……………………………………………………………………5

    Оглавление………………………………………………………………………………..17

      Литература………………………………………………………………………………...18 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

   Литература 

  1. А.Е.Костин. Структура  и функционирование ЭВМ. -  М.: Высшая школа, 1987
  2. М.Гук, В.Юров. Процессоры Pentium, Athlon и другие. – С-П.: Питер, 2000
  3. Е.В.Бильдюкевич. ЭВМ и микропроцессор. - Мн.: Народная асвета, 1990
  4. П.Нортон. Персональный  компьютер. Аппаратно-программная реализация.  – С-П.: BHV, 1999
  5. Л.Залогова. Задачник – практикум в 2-х томах.- М.: Лаборатория базовых знаний, 1999
  6. К.Г.Финогенов. Основы языка Ассемблера. - М.: Радио и связь, 2000
  7. А.А.Ровдо. МП от 8086 до Pentium III Xeon. – М.: ДМК, 2000
  8. И.И.Шагурин. Процессоры семейства Intel P6. М.: Горячая линия, 2000
  9. В.Ф.Шаньгин. Программирование микропроцессорных систем. – М.: Высшая школа, 1990
  10. И.М.Русак. Технические средства ПЭВМ. – Мн.: Вышэйшая школа, 1996
  11. Е.Рудометов. Архитектура ПК, комплектующие, мультимедиа. – С.-П.: Питер, 2000
  12. Г.В.Майко. Ассемблер для IBM PC. – М.: Сирин, 1999
  13. Дж.Брукшир. Введение в компьютерные науки. – М.: издательский дом "Вильямс", 2001
  14. М.Гук. Энциклопедия. Аппаратные средства IBM PC. – C-П.: Питер, 2000
  15. В.В.Корнеев, А.В.Киселев. Современные микропроцессоры. - СПб.: БХВ-Петербург, 2003
  16. В.И.Бойко и др. Схемотехника электронных систем. Микропроцессоры и микроконтроллеры. - СПб.: БХВ-Петербург, 2004
  17. Ю.В.Новиков, П.К.Скоробогатов. Основы микропроцессорной техники. – М.: ИНТУИТ.РУ "Интернет Университет Информационных Технологий", 2003
  18. Э. Танненбаум. Архитектура компьютера. - СПб.: Питер, 2002
  19. Б.Я.Цилькер, С.А.Орлов. Организация ЭВМ и систем. Учебник для ВУЗов. - СПб.: Питер, 2004

Информация о работе Микропроцессоры и микрокомпьютеры