Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный практикум по ВМСиС.doc
Скачиваний:
25
Добавлен:
05.06.2015
Размер:
2.31 Mб
Скачать

Содержание отчета

Для защиты лабораторной работы каждым студентом должен быть написан отчет о лабораторной работе, оформленный в отдельной тетради для лабораторных работ по курсу «Вычислительные машины, системы и сети», включающий тему, цель работы и содержащий следующие пункты:

  1. Основные сведения по программированию на ассемблере.

  2. Листинг программы с комментариями на каждую команду (или группы команд, логически связанные).

  3. Заполненная таблица хранения переменных в сегменте данных.

  4. Заполненная таблица машинных кодов.

  5. Полное описание каждого прерывания, используемого в программе;

  6. Пояснение, что происходит в строках 20-22.

  7. Пояснение, что делает программа.

  8. Что произойдет, если в строке 23 поменять переменную message на переменную fin?

Контрольные вопросы

  1. Что такое язык ассемблера? Как он связан с машинным языком?

  2. Зачем нужны подпрограммы на языке ассемблера в программах на языках высокого уровня?

  3. Перечислите этапы разработки программы на языке ассемблера.

  4. Какие существуют режимы работы ассемблера? Чем они отличаются?

  5. Напишите формат команды языка ассемблер.

  6. Что такое программное прерывание?

  7. Для чего нужны входные и выходные параметры сервиса?

  8. Как определяются переменные в программе на языке ассемблера?

  9. Как определяются сегменты в программе?

  10. Каких типов бывают сегменты?

Задание на занятие

  1. Сделать исполняемый модуль (файл с расширением exe) для программы:

      1. masm

      2. model small

      3. .stack 100h

      4. .data

      5. message db 'Запустите эту программу в отладчике$'

      6. perem_1 db 0ffh

      7. perem_2 dw 3a7fh

      8. perem_3 dd 0f54d567ah

      9. mas db 10 dup ('0')

      10. pole_1 db 5 dup (?)

      11. adr dw perem_3

      12. adr_full dd perem_3

      13. fin db 'Конец сегмента данных программы$'

      14. .code

      15. start:

      16. xor bh,bh

      17. mov dx,0a0fh

      18. mov ah,02h

      19. int 10h

      20. mov ax,@data

      21. mov ds,ax

      22. mov ah,09h

      23. mov dx, offset message

      24. int 21h

      25. mov ax,4c00h

      26. int 21h

      27. end start

  2. Определить структуру программы (режим программирования, количество и виды сегментов, модель памяти)

  3. Определить с помощью электронного справочника, что делает каждое программное прерывание, и с помощью Turbo Debugger – какие регистры меняются после каждого из них.

  4. Cпомощью программыTurboDebuggerопределить:

    1. как хранятся переменные в сегменте данных. Заполните следующую таблицу:

      Имя переменной

      Значение в теле программы

      Смещение в сегменте данных

      Значение в сегменте данных

    2. машинные коды используемых команд. Заполните следующую таблицу, записывая команды по алфавиту:

Команда на языке ассемблера

Машинный код в шестнадцатеричном виде

Лабораторная работа №7

Команды переходов и логических операций

Продолжительность: 4 часа.

Цель: научиться передавать управление в программе с помощью циклов и условных и безусловных переходов, а также научиться логическим и битовым операциям на языке Ассемблер.

Основные сведения

Большинство программ содержат циклы, в которых несколько команд повторяются до достижения определенного требования, и различные проверки, определяющие, какие из нескольких действий следует выполнять. Управление передается по адресу команды, которая не находится непосредственно за выполняемой в текущий момент командой. Такая передача может осуществляться вперед для выполнения новой группы команд или назад для повторения уже выполненных команд [6].

Ниже приведены четыре способа передачи управления:

Безусловный переход: JMP

Цикл: LOOP

Условный переход: Jnnn (больше, меньше, равно)

Вызов процедуры: CALL

Заметим, что имеется три типа адресов: SHORT (короткий), NEAR (близкий) и FAR (дальний). Адресация SHORT используется при циклах, условных переходах и некоторых безусловных переходах. Адресация NEAR и FAR используется для вызовов процедур (CALL) и безусловных переходов, которые не квалифицируются, как SHORT. Все три типа передачи управления воздействуют на содержимое регистра IP; тип FAR также изменяет регистр CS.