рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Практическая работа №1-3 Представление информации в ЭВМ. Кодирование и подсчет количества информации. Приобретение навыков представления двоичной информации в ЭВМ

Практическая работа №1-3 Представление информации в ЭВМ. Кодирование и подсчет количества информации. Приобретение навыков представления двоичной информации в ЭВМ - раздел Компьютеры, Практическая Работа №1-3 Представление Информации В Эвм...

Практическая работа №1-3 Представление информации в ЭВМ. Кодирование и подсчет количества информации.

ЦЕЛЬ РАБОТЫ

Приобретение навыков представления двоичной информации в ЭВМ

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

1. Прочитать задания к работе, просмотреть все предложенные примеры решения задач и дополнительные задания к ним

2. Сформулировать условие и решить задачу.

3. Оформите отчет по самостоятельной работе, который должен содержать:

-титульный лист (см. приложение);

-условие задачи;

-решение;

-ответ.

ЗАДАНИЯ К РАБОТЕ.

Системы счисления. Человек привык считать предметы десятками, сотнями: десять единиц образуют десяток, десять десятков — сотню, десять сотен —… Система счисления — способ именования и изображения чисел с помощью символов,… • непозиционные;

Перевод цифр из двоичной системы счисления в восьмеричную, шестнадцатеричную и десятичную и наоборот

Шестнадцатеричная система счисления часто используется при программировании. Перевод чисел из шестнадцатеричной системы счисления в двоичную весьма… Для изображения цифр, больших 9, в шестнадцатеричной системе счисления… Например, шестнадцатеричное число F17B в двоичной системе имеет вид: 1111000l01111011, а в десятичной — 61819.

Выполнение арифметических операций компьютере

Правила выполнения арифметических операций в двоичной системе счисления

аналогичны правилам операций в десятичной системе счисления.

 

Сложение 101110 + 001011 Вычитание 101110 001011
Результат Результат
У'множение X 101 101101 000000 101101 Деление 101101 /101 01 010 0101
'Результат произведение) Результат (частное)

Особенности выполнения операций над числами с плавающей запятой

При умножении чисел с плавающей запятой их мантиссы перемножаются, а порядки складываются. При делении чисел с плавающей запятой мантисса делимого делится на мантис­су…

Пример 3

Сложение 101110 + 001011 Вычитание 101110 001011
Результат Результат
У'множение X 101 101101 000000 101101 Деление 101101 /101 01 010 0101
'Результат произведение) Результат (частное)

 

Пример 4

Кодирование символьной информации

Кодируемые (обозначаемые) элементы входного ал­фавита обычно называют символами. Символом (служит условным знаком какого-нибудь понятия, явления), как правило,… Кодирующие (обозначающие) элементы выходного алфавита называются знаками; количество различных знаков в выходном…

Сформулировать задание для выбранных чисел и произвести вышеуказанные действия

Подтвердить решение, сделав обратное преобразование)

Пример 5

Двоичное кодирование мультимедиа-информации

Цветные изображения могут представляться в различных режимах: 16 цветов, 256 цветов, 65 536 цветов (true color), •6 777 216 цветов (high color) —… /== Iog265 536 = 16 бит = 2 байта. Таблица 1.11. Характеристики … Самой маленькой, используемой сейчас, разрешающей способностью эк­рана является разрешение 800 на 600 точек, т. е. 480…

Пример 6

Двоичное кодирование звуковой информации.

Различные звуковые карты могут обеспечить как 8-, так и 16-битовые выборки. При замене непрерывного звукового сигнала его дискретным представлением… Частота дискретизации аналогового звукового сигнала (коли­чество выборок в… Можно оценить объем моноаудиофайла с длительностью звучания 1 с при среднем качестве звука (16 бит, 22 кГц). Для этого…

ПРИМЕРНЫЕ ВОПРОСЫ НА ЗАЩИТЕ РАБОТЫ

Расскажите о позиционных и непозиционных системах исчисления

Назовите некоторые наиболее известные коды

В чем сущность двоичного кодирования звуковой информации


 

ПРАКТИЧЕСКАЯ РАБОТА №4. Представление чисел в ЭВМ

1 ЦЕЛЬ РАБОТЫ

Изучить информацию о представлении чисел в ЭВМ

Прочитать МЕТОДИЧЕСКИЕ УКАЗАНИЯ

Прочитать задания к работе, просмотреть все предложенные примеры решения задач и дополнительные задания к ним

2. Сформулировать своё условие (подобное предложенным) и решить задачу.

3. Оформите отчет по самостоятельной работе, который должен содержать:

-титульный лист (см. приложение);

-условие задачи;

-решение;

-ответ.

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

Представление чисел в ЭВМ

• естественная форма, или форма с фиксированной запятой(точкой) - ФЗ (ФТ); • нормальная форма, или форма с плавающей запятой (точкой) - ПЗ (ПТ). Фиксированная запятая (точка). В форме представления с фиксированной запятой (точкой) числа изображаются в виде…

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

Выполнение арифметических операций компьютере

Правила выполнения арифметических операций в двоичной системе счисления

аналогичны правилам операций в десятичной системе счисления.

Пример:

 

Сложение 101110 + 001011 Вычитание 101110 001011
Результат Результат
У'множение X 101 101101 000000 101101 Деление 101101 /101 01 010 0101
'Результат произведение) Результат (частное)

Особенности выполнения операций над числами с плавающей запятой

При умножении чисел с плавающей запятой их мантиссы перемножаются, а по­рядки складываются. При делении чисел с плавающей запятой мантисса делимого делится на мантис­су…

Выполнение арифметических операций над числами, представленными в дополнительных кодах

Сложение производится по обычным правилам сложения двоичных чисел: едини­ца переноса, возникающая из старшего знакового разряда, просто… □ Х= -1101; F= 1001. Результат сложения: 11,0011 + 00,1001 = 11,1100… □ Х = 1101; Y" 1001. Результат сложения: 00,1101 + 00,1001 = 01,0110 (переполнение, после сдвига вправо…

ПРАКТИЧЕСКАЯ РАБОТА №5. Логические основы и элементы ЭВМ

1 ЦЕЛЬ РАБОТЫ

Изучить информацию о логических основах и элементах ЭВМ.

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

  1. Прочитать МЕТОДИЧЕСКИЕ УКАЗАНИЯ
  2. Нарисовать в тетради обозначения схемных элементов

3. Ответить на контрольные вопросы

3. ОФОРМИТЕ ОТЧЕТ, КОТОРЫЙ ДОЛЖЕН СОДЕРЖАТЬ:

-титульный лист (см. приложение);

-цель работы;

-порядок выполнения работы;

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

Алгебра логики оперирует с высказываниями. Под вы­сказыванием понимают повествовательное предложение, отно­сительно которого можно утверждать,… Высказывания (логические переменные) принято обозначать буквами латинского…

Логические операции и базовые элементы компьютера

В алгебре высказываний над высказываниями можно произ­водить определенные логические операции, в результате кото­рых получаются новые высказывания. Истинность результирую­щих высказываний зависит от истинности исходных и использованных для их преобразования логических операций. „

Схемные элементы ЭВМ. Преобразование информации в ЭВМ осуществляется элементами (схемами) двух классов:

- комбинационными;

- последовательностными (схемами с памятью).

Состояние выходов комбинационных схем однозначно определяется состояниями входов в данный момент времени.

Состояние выходов в последовательных схемах оп­ределяется не только состоянием входов, но и внутренними со­стояниями, имевшими место в предыдущие моменты времени.

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

Существует следующее определение — систему логических элементов, с помощью которых путем су­перпозиции можно представить любую сколь угодно сложную комбинационную схему, называют функционально полной. Известны различные функционально полные системы элементов, но наибольшее распростра­нение получили системы, использующие логические операции, выражаемые предлогами НЕ, и, или.

Логический элемент компьютера — это часть электронной схе­мы, которая реализует элементарную логическую функцию. Ло­гическими элементами компьютеров являются электронные схе­мы «И», «ИЛИ», «НЕ», «И-НЕ», «ИЛИ-НЕ» или другие (называе­мые также вентилями), а также триггер. Можно показать, что с помощью этих схем можно реализовать любую логическую функцию, описывающую работу устройств компьютера. Обычно у вен­тилей бывает от двух до восьми входов и один или два выхода.

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

Рассмотрим логические операции и соответствующие им элементы логических схем.

Конъюнкция. Соединение двух (или нескольких) высказываний в одно с помощью союза и (or) называется операцией логи­ческого умножения, или конъюнкцией. Эту операцию принято обозначать знаками «^, &» или знаком умножения «х». Сложное высказывание А ^ В истинно только в том случае, когда истин­ны оба входящих в него высказывания. Истинность такого вы­сказывания задается табл.

 

Коньюнкция Дизъюнкция
A B A&B A B AvB AxorB(исключающее или)

 

Логическая схема «И» реализует конъюнкцию двух или более логических значений. Условное обозначение на структурных диаграммах схемы «И» с двумя входами представлено на рис.

Единица на выходе схемы «И» будет тогда и только тогда, когда на всех входах будут единицы. Когда хотя бы на одном входе будет нуль, на выходе также будет нуль.

Связь между выходом z этой схемы и входами х и у описывается соотношением z = x&y (читается как «х и у»). Операция конъюнкции на структурных схемах обозначается знаком «&».

Дизъюнкция. Объединение двух (или нескольких) высказываний с помощью союза или (OR) называется операцией логического сложения, или дизъюнкцией. Эту операцию обозначают знаками «I, v» или знаком сложения «+». Сложное высказывание A v В истинно, если истинно хотя бы одно из входящих в него высказываний (см. табл. 1.14).

В последнем столбце табл. 1.14 размещены результаты модифицированной операции ИЛИ — Исключающее или (XOR). Отличается от обычного или последней строкой (см. также рис. 1.7, е).

Схема «ИЛИ» реализует дизъюнкцию двух или более логических значений. Когда хотя бы на одном входе схемы «ИЛИ» будет единица, на ее выходе также будет единица.

Условное обозначение на структурных схемах схемы «ИЛИ» с двумя входами представлено на рис. 1.7, б. Знак «1» на схеме происходит от классического обозначения дизъюнкции как «>=» (т. е. значение дизъюнкции равно единице, если сумма значений операндов больше или равна 1). Связь между выходом z этой схемы и входами х и у описывается соотношением z = x v у (читается как «х или у»).

 
 

Инверсия. Присоединение частицы НЕ (not) к некоторому высказыванию_ называется операцией отрицания (инверсии) и обозначается А (или ­А). Если высказывание А истинно, то В ложно, и наоборот (табл. 1.15)

Схема «НЕ» (инвертор) реализует операцию отрицания. Связь между входом х этой схемы и выходом z можно записать соотношением z = х, где х читается как «не х» или «Инверсия х».

Если на входе схемы «О», то на выходе «1», и наоборот. Условное обозначение на структурных схемах инвертора — на рис. 1.7, в.

Вентили. Кроме схемных элементов, соответствующих перечисленным логическим операторам, в состав логических схем ходят комбинированные связки, именуемые вентилями, напри­мер, следующие.

Схема «И-НЕ» состоит из элемента «И» и инвертора и осуществляет отрицание результата схемы «И» (табл. 1.16). Связь между выходом z и входами х и у схемы записывают как , или «Инверсия х и у». Условное обозначение на структурных схемах схемы «И-НЕ» с двумя входами приведено на рис. 1.7, г.

Таблица 1.16. Таблица истинности схем «И-НЕ», «ИЛИ-НЕ»

 

Инверсия х и у Инверсия x или у
x y x y
0

Схема «ИЛИ-НЕ» состоит из элемента «ИЛИ» и инвер­тора и осуществляет отрицание результата схемы «ИЛИ» (табл. 1.16). Связь между выходом z и входами хну схемы запи­сывают как х v у, или «Инверсия х или у». Условное обозначе­ние на структурных схемах схемы «ИЛИ-НЕ» с двумя входами представлено на рис. 1.7, д.

Схема «Исключающее ИЛИ» (рис. 1.7, е) соответству­ет «сложению по модулю два» (см. также табл. 1.14).

Следует отметить, что помимо операций и, или, не в алгебре высказываний существует ряд и других операций. Например, операция эквивалентности (эквиваленции)

А ~ В (А = В, или A eqv В) (табл. 1.17).

Таблица 1.17. Таблицы истинности операций эквивалентности и импликации

Эквивалентность Импликация
А В А~В А В АВ
----

Другим примером может служить логическая операция им­пликации или логического следования —> В, A IMP В)у иначе говоря, «если А, то В» (табл. 1.17).

Высказывания, образованные с помощью логических опера­ций, называются сложными. Истинность сложных высказыва­ний можно установить, используя таблицы истинности. Напри­мер, истинность сложного высказывания (^) определяется табл. 1.18.

Таблица 1.18. Таблица истинности высказывания(A&B)v(&)

А В &

Высказывания, у которых таблицы истинности совпадают, называются равносильными. Для обозначения равносильных вы­сказываний используют знак «=» (А = В). Рассмотрим сложное высказывание

^ В) v (^) — табл. 1.19.

Таблица 1.19. Таблица истинности выражения & В) v (&)

А B А&В & (А & В) v (А &B)

Если сравнить эту таблицу с таблицей истинности операции эквивалентности высказываний A v В (см. табл. 1.17), то можно увидеть, что высказывания (А ^ В) v (А ^ В) и А ~ В тождест­венны, т. е. (А ~ В) = (А л В) v (А л В).

В алгебре высказываний можно проводить тождественные преобразования, заменяя одни высказывания равносильными им другими высказываниями.

Свойства операций. Исходя из определений дизъюнкции, конъюнкции и отрицания, устанавливаются свойства этих операций и взаимные распределительные свойства. Приведем примеры некоторых из этих свойств:

 
 

Высказывания, образованные с помощью нескольких опера­ций логического сложения, умножения и отрицания, называют­ся сложными. Истинность всякого сложного высказывания устанавливается с помощью таблиц истинности. Сложные вы­сказывания, истинные (true) для любых значений истинности входящих в них простых высказываний, называются тождест­венно-истинными. Наоборот, тождественно-лож­ными являются формулы, принимающие значение false для любых значений входящих в него простых высказываний.

В табл. 1.20 приведено доказательство истинности дистрибутивного закона. Аналогичным образом могут быть доказаны и другие тождества.

 

Таблица 1.20. Доказательство истинности  
А B C BvC A^(BvC) А^B А^C (A ^B)v(A ^С)

Доказательство таблицы истинности дистрибутивного закона

    Операции над битовыми строками. В некоторых современных ЯП реализованы операции и/или функции обработки битовых строк… Рис.1.8. Некоторые примеры диаграмм Эйлера — Венна: а — конъюнкция высказываний А и В (AND); б — дизъюнкция высказываний А и В

Синтез и оптимизация схем

    Для построения схемы, реализующей сигнал у1, достаточно рассмотреть строки, выделенные светлой штриховкой. Эти… Преобразования логических формул. Равносильные преобразования логических формул имеют то же назначение, что и…

ЦЕЛЬ РАБОТЫ

Приобретение навыков работы с регистрами процессора. и памятью.

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

  1. Прочитать методические указания 1, 2
  2. Разобрать приведенные примеры 1, 2
  3. Выполнить задания к работе 1 и 2
  4. Ответить на контрольные вопросы 1, 2

Оформите отчет, который должен содержать:

- титульный лист (см. приложение);

-постановку задачи;

-формулировка варианта задания.

-размещение данных в ОЗУ.

-программа в форме таблицы

-последовательность состояний регистров ЭВМ при выполнении программы в режиме Шаг для одного значения аргумента.

-результаты выполнения программы для нескольких значений аргумента, выбранных самостоятельно.

МЕТОДИЧЕСКИЕ УКАЗАНИЯ 1

адресации и адрес. Выполнение программы, записанной в памяти ЭВМ, осуществляется последовательно по командам в порядке возрастания адресов команд… Для того чтобы получить результат выполнения программы, пользователь должен: … □ ввести программу в память ЭВМ;

Пример 1

Дана последовательность мнемокодов, которую необходимо преобразовать в машинные коды, занести в ОЗУ ЭВМ, выполнить в режиме Шаги зафиксировать изменение состояний программно-доступных объектов ЭВМ (табл. 9.1).

 

          Таблица 9.1. Команды и коды
Последовательность Значения          
Команды RD#20 WR30 ADD #5   WR@30   JNZ 002
Коды 21 1 020 22 0 030 23 1   22 2 030   12 0002

 

Введем полученные коды последовательно в ячейки ОЗУ, начиная с адреса 000. Выполняя команды в режиме Шаг,будем фиксировать изменения про­граммно-доступных объектов (в данном случае это Асе, PC и ячейки ОЗУ 020 и 030) в табл. 9.2.

Таблица 9.2.Содержимое регистров

 

PC Асc М(30) М(20) PC Асc М(30) М(20)
   
         
       
       

Задание 1

1. Ознакомиться с архитектурой ЭВМ

2. Записать в ОЗУ "программу", состоящую из пяти команд— варианты задания выбрать из табл.. Команды разместить в последовательных ячейках памяти.

3. При необходимости установить начальное значение в устройство ввода IR.

4. Определить те программно-доступные объекты ЭВМ, которые будут изменяться при выполнении этих команд.

IR Команда 1 Команда 2 Команда 3 Команда 4 Команда 5
IN MUL #2 WR10 wr @10 JNS 001
X RD #17 SUB #9 WR16 WR @16 JNS 001
IN ADD #16 WR8 WR @8 JS 001
X RD #2 MUL #6 WR 11 WR @11 JNZ 00
IN WR8 DIV #14 WR @8 JMP 002
X RD #4 WR 11 RD @11 ADD #330 JS 000
IN WR9 RD @9 SUB#1 JS 001
X RD 4 SUB #8 WR8 WR @8 JNZ 001
IN ADD #12 WR 10 WR @10 JS 004
X RD 4 ADD #15 WR 13 WR @13 JMP 001
IN SUB #308 WR11 WR @11 JMP 001
X RD #988 ADD #19 WR9 WR @9 JNZ 001
IN WR11 ADD 11 WR @11 JMP 002
X RD #5 MUL #9 WR10 WR @10 JNZ 001

5. Выполнить в режиме Шагвведенную последовательность команд, фиксируя изменения значений объектов, определенных в п. 4, в таблице (см. форму табл. 9.2).

6. Если в программе образуется цикл, необходимо просмотреть не более двух повторений каждой команды, входящей в тело цикла.

ТаблицаВарианты задания 1

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

1. Из каких основных частей состоит ЭВМ и какие из них представлены
в модели?

2. Что такое система команд ЭВМ?

3. Какие классы команд представлены в модели?

4. Какие действия выполняют команды передачи управления?

5. Какие способы адресации использованы в модели ЭВМ? В чем отличие между ними?

6. Какие ограничения накладываются на способ представления данных модели ЭВМ?

7. Какие режимы работы предусмотрены в модели и в чем отличие между ними?

8. Как записать программу в машинных кодах в память модели ЭВМ.

9. Как просмотреть содержимое регистров процессора и изменить содермое некоторых регистров?

10. Как просмотреть и, при необходимости, отредактировать содержи ячейки памяти?

11 Как запустить выполнение программы в режиме приостановки работы
после выполнения каждой команды?

12 Какие способы адресации операндов применяются в командах ЭВМ?

13 Какие команды относятся к классу передачи управления?

МЕТОДИЧЕСКИЕ УКАЗАНИЯ 2. ПРОГРАММИРОВАНИЕ РАЗВЕТВЛЯЮЩЕГОСЯ ПРОЦЕССА

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

Пример 2

В качестве примера (несколько упрощенного по сравнению с заданиями практической работы № 3) рассмотрим программу вычисления функции

 
 


причем х вводится с устройства ввода IR, результат у выводится на OR. Граф-схема алгоритма решения задачи показана на рис.

В данной практической работе используются двухсловные команды с непо­средственной адресацией, позволяющие оперировать отрицательными чис­лами и числами по модулю, превышающие 999, в качестве непосредственного операнда.

Оценив размер программы примерно в 20—25 команд, отведем для области данных ячейки ОЗУ, начиная с адреса 030. Составленная программа с комментариями представлена в виде табл. 9.4.

Таблица Пример программы

Адрес Команда Примечание
    Мнемокод Код    
IN 01 0 000 Ввод х
WR 30 22 0 030 Размещение х в ОЗУ(ОЗО)
SUB #16 24 1016 Сравнение с границей — -16)
JS 010 Переход по отрицательной разности
RD 30 21 0 030 Вычисления по первой формуле
SUB #11 24 1011  
WR 31 22 0 031  
MUL 31 25 0 031  
SUB #125 24 1 125  
JMP 020 10 0 020 Переход на вывод результата
RD 30 21 0 030 Вычисления по второй формуле
MUL 30 25 0 030  
WR 31 22 0 031  
RD 30 21 0 030  
MUL #72 25 1 072  
ADD 31 23 0 031  
ADI 106400 43 0 000  
   
DIVI 100168 46 0 000  
   
OUT 02 0 000 Вывод результата
HLT 09 0 000 Стоп
         

Задание 2

1. Разработать программу вычисления и вывода значения функции:

Fi(x), при х>=а,

Fj(x) при x< а,

для вводимого из IR значения аргумента х. Функции и допустимые пре­делы изменения аргумента приведены в табл. 9.5, варианты заданий — в табл. 9.6.

2. Исходя из допустимых пределов изменения аргумента функций (табл. 9.5) и значения параметра а для своего варианта задания (табл. 9.6) выделить на числовой оси Ох области, в которых функция у вычисляется по представленной в п. 1 формуле, и недопустимые значения аргумента. На недопустимых значениях аргумента программа должна выдавать на OR максимальное отрицательное число: 199 999.

3. Ввести текст программы в окно Текст программы,при этом возможен набор и редактирование текста непосредственно в окне Текст программы

или загрузка текста из файла, подготовленного в другом редакторе.

4. Ассемблировать текст программы, при необходимости исправить синтаксические ошибки.

5. Отладить программу. Для этого:

а) записать в IR значение аргумента х > а (в области допустимых значений);

б) записать в PC стартовый адрес программы;

в) проверить правильность выполнения программы (т. е. правильность результата и адреса останова) в автоматическом режиме. В случае наличия ошибки выполнить пп. 5, г и 5, д; иначе перейти к п. 5, е;

г) записать в PC стартовый адрес программы;

д) наблюдая выполнение программы в режиме Шаг, найти команду, являющуюся причиной ошибки; исправить ее; выполнить пп. 5, а — 5, в;

е) записать в IR значение аргумента х < а (в области допустимых значений); выполнить пп. 5, б и 5, в;

ж) записать в IR недопустимое значение аргумента х и выполнить пп. 5, 6 и 5, в.

6. Для выбранного допустимого значения аргумента х наблюдать выполнение отлаженной программы в режиме Шаг и записать в форме табл. 9.2 содержимое регистров ЭВМ перед выполнением каждой команды.


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

1. Как работает механизм косвенной адресации?

2. Какая ячейка будет адресована в команде с косвенной адресацией через
ячейку 043, если содержимое этой ячейки равно 102 347?

3. Как работают команды передачи управления?

4. Что входит в понятие "отладка программы"?

5. Какие способы отладки программы можно реализовать в модели?


 

Практическая работа 9. Программирование цикла с переадресацией

.

ЦЕЛЬ РАБОТЫ

Приобретение навыков работы с регистрами процессора. и памятью.

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

  1. Прочитать методические указания 1, 2
  2. Разобрать приведенные примеры 1, 2
  3. Выполнить задания к работе 1 и 2
  4. Ответить на контрольные вопросы 1, 2

Оформите отчет, который должен содержать:

- титульный лист (см. приложение);

-постановку задачи;

-формулировка варианта задания.

-размещение данных в ОЗУ.

-программа в форме таблицы

-последовательность состояний регистров ЭВМ при выполнении программы в режиме Шаг для одного значения аргумента.

-результаты выполнения программы для нескольких значений аргумента, выбранных самостоятельно.

МЕТОДИЧЕСКИЕ УКАЗАНИЯ 1.

Программирование цикла с переадресацией

При решении задач, связанных с обработкой массивов, возникает необходи­мость изменения исполнительного адреса при повторном выполнении неко­торых команд. Эта задача может быть решена путем использования косвен­ной адресации.

ПримерЗ

Разработать программу вычисления суммы элементов массива чисел С], С2,..., С„ . Исходными данными в этой задаче являются: п — количество суммируемых чисел и Сх, С2,..., С„ — массив суммируемых чисел. Заме­тим, что должно выполняться условие п > 1, т. к. алгоритм предусматривает, по крайней мере, одно суммирование. Кроме того, предполагается, что сумми­руемые числа записаны в ОЗУ подряд, т. е. в ячейки памяти с последователь­ными адресами. Результатом является сумма S.

 
 

Составим программу для вычисления суммы со следующими конкретными параметрами: число элементов массива— 10, элементы массива расположены в ячейках ОЗУ по адресам 040, 041, 042,..., 049. Используемые для решения задачи промежуточные переменные имеют следующий смысл: At — адрес числа С,, i е {l, 2,..., 10}; ОЗУ( At) — число по адресу At, S — текущая сум­ма; к — счетчик цикла, определяющий число повторений тела цикла.

Распределение памяти таково. Программу разместим в ячейках ОЗУ, начиная с адреса 000, примерная оценка объема программы — 20 команд; промежу­точные переменные: Аг — в ячейке ОЗУ с адресом 030, к — по адресу 031, S — по адресу 032. ГСА программы показана на рис. 9.2, текст программы с комментариями приведен в табл. 9.7.

Адрес Команда Примечание
RD #40 Загрузка начального адреса массива 040
WR 30 в ячейку 030
RD #10 Загрузка параметра цикла к = 10 в ячейку 031
WR 31  
RD #0 Загрузка начального значения суммы S = 0
WR 32 в ячейку 032
Ml: RD 32 Добавление
ADD @30 к текущей сумме
WR 32 очередного элемента массива
RD 30 Модификация текущего
ADD #1 адреса массива
WR 30 (переход к следующему адресу)
RD 31 Уменьшение счетчика
SUB #1 (параметра цикла)
WR 31 на1
JNZ Ml Проверка параметра цикла и переход при к ■*■ 0
RD 32 Вывод
OUT результата
HLT Стоп

Задание 3

1. Написать программу определения заданной характеристики последовательности чисел С1, С2,..., Сп . Варианты заданий приведены в табл. 9.8.

2. Записать программу в мнемокодах, введя ее в поле окна Текст программы.

3. Сохранить набранную программу в виде текстового файла и произвести ассемблирование мнемокодов.

4. Загрузить в ОЗУ необходимые константы и исходные данные.

Отладить программу

Номер варианта Характеристика последовательности чисел С,, С2,..., С„
Количество четных чисел
Номер минимального числа
Произведение всех чисел
Номер первого отрицательного числа
Количество чисел, равных С}
Количество отрицательных чисел
Максимальное отрицательное число
Номер первого положительного числа
Минимальное положительное число
Номер максимального числа
Количество нечетных чисел
Количество чисел, меньших С{
Разность сумм четных и нечетных элементов массивов
Отношение сумм четных и нечетных элементов массивов

Примечание.Под четными (нечетными) элементами массивов понимаются элементы масси­вов, имеющие четные (нечетные) индексы. Четные числа — элементы массивов, делящиеся без остатка на 2.

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

1. Формулировка варианта задания.

2. Граф-схема алгоритма решения задачи.

3. Распределение памяти (размещение в ОЗУ переменных, программы и не­
обходимых констант).

4. Программа.

5. Значения исходных данных и результата выполнения программы.

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

1. Как организовать цикл в программе?

2. Что такое параметр цикла?

3. Как поведет себя программа, приведенная в табл. 9.7, если в ней будет отсутствовать команда wr 31 по адресу 014?

4. Как поведет себя программа, приведенная в табл. 9.7, если метка mi будет поставлена по адресу 005? 007?

Практическая работа №9-10 Работа со стековой памятью. (Ассемблер)

ЦЕЛЬ РАБОТЫ

Приобретение навыков работы со стековой памятью. (Ассемблер)

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

1. Прочитать задания к работе

4. Оформите отчет, который должен содержать:

-титульный лист (см. приложение);

-постановку задачи;

- описание пошагового исполнения;

- отчет о полученном результате

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

ПОДПРОГРАММЫ И СТЕК

Для вызова подпрограммы необходимо указать ее начальный адрес в памяти и передать (если необходимо) параметры — те исходные данные, с которыми будут… Возврат в точку вызова обеспечивается сохранением адреса текущей коман­ды… Для реализации механизма вложенных подпрограмм (возможность вызова подпрограммы из другой подпрограммы и т. д.) адреса…

Пример

Даны три массива чисел. Требуется вычислить среднее арифметическое их максимальных элементов. Каждый массив задается двумя параметрами: адре­сом первого элемента и длиной. Очевидно, в программе трижды необходимо выполнить поиск максимального элемента массива, поэтому следует написать соответствующую подпро­грамму.

Параметры в подпрограмму будем передавать через регистры: R1 — началь­ный адрес массива, R2 — длина массива.

Рассмотрим конкретную реализацию этой задачи. Пусть первый массив на­чинается с адреса 085 и имеет длину 14 элементов, второй— 100 и 4, тре­тий— 110 и 9. Программа будет состоять из основной части и подпрограм­мы. Основная программа задает параметры подпрограмме, вызывает ее и со­храняет результаты работы подпрограммы в рабочих ячейках. Затем осуществляет вычисление среднего арифметического и выводит результат на устройство вывода. В качестве рабочих ячеек используются регистры общего назначения R6 и R7 — для хранения максимальных элементов массивов. Подпрограмма получает параметры через регистры R1 (начальный адрес мас­сива) и R2 (длина массива). Эти регистры используются подпрограммой в качестве регистра текущего адреса и счетчика цикла соответственно. Кроме того, R3 используется для хранения текущего максимума, a R4 — для вре­менного хранения текущего элемента. Подпрограмма возвращает результат через аккумулятор. В табл. 9.9 приведен текст основной программы и под­программы. Обратите внимание, цикл в подпрограмме организован с по­мощью команды jrnz, а модификация текущего адреса— средствами пост­инкрементной адресации.

Программа примера

 

Команда Примечания  
Основная программа  
RD #85 Загрузка  
WR R1 параметров  
RD #14 первого  
WR R2 массива  
CALL M Вызов подпрограммы  
WR R6 Сохранение результата  
RD #100 Загрузка  
WR R1 параметров  
RD #4 второго  
WR R2 массива  
CALL M   Вызов подпрограммы
WR R7   Сохранение результата
RD #110   Загрузка
WR Rl   параметров
RD #9   третьего
WR R2   массива
CALL M   Вызов подпрограммы
ADD R7   Вычисление
ADD R6   среднего
DIV #3   арифметического
OUT   Вывод результата
Подпрограмма MAX  
HLT   Стоп
M: RD @R1   Загрузка
WR R3   первого элемента в R3
L2: RD @R1+   Чтение элемента и модификация адреса
WR R4   Сравнение
SUB R3   и замена,
JS LI   если R3 < R4
MOV R3,R4    
LI: JRNZ R2,L2   Цикл
RD R3   Чтение результата в Асе
RET   Возврат
         

Задание

Составить и отладить программу учебной ЭВМ для решения следующей за­дачи. Три массива в памяти заданы начальными адресами и длинами. Вычис­лить и вывести на устройство вывода среднее арифметическое параметров этих массивов. Параметры определяются заданием к предыдущей лаборатор­ной работе (см. табл. 9.8), причем соответствие между номерами вариантов заданий 3 и 4 устанавливается по табл. 9.10.

 

Номер варианта задания 4
Номер строки в табл. 9.9

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

Формулировка варианта задания.

Граф-схема алгоритма основной программы.

Граф-схема алгоритма подпрограммы.

Распределение памяти (размещение в ОЗУ переменных, программы и необходимых констант).

Тексты программы и подпрограммы.

Значения исходных данных и результата выполнения программы.

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

Как работает команда mov R3, R7?

Какие действия выполняет процессор при реализации команды call?

Как поведет себя программа примера 4, если в ней вместо команд call m использовать команды jmp m?

После начальной установки процессора (сигнал Сброс) указатель стека SP устанавливается в 000. По какому адресу будет производиться запись в стек первый раз, если не загружать SP командой wrsp?

Как, используя механизмы постинкрементной и преддекрементной адресации, организовать дополнительный стек в произвольной области памяти, не связанный с SP?


 

Практическая работа 11-12 ПРИНЦИПЫ РАБОТЫ КЭШ-ПАМЯТИ

ЦЕЛЬ РАБОТЫ

Приобретение навыков работы с кэш-памятью.

Проверить работу различных алгоритмов замещения при различных режимах записи в кэш-память.

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

- Прочитать методические указания

- Разобрать приведенные примеры

- Выполнить задания к работе

- Ответить на контрольные вопросы

Оформите отчет, который должен содержать:

- титульный лист (см. приложение);

постановку задачи;

формулировка варианта задания.

размещение данных в ОЗУ.

программа

результаты выполнения программы для нескольких значений аргумента, выбранных самостоятельно.

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

  Обратная О, с учетом бита записи 2,5,9 Сквозная БИ, без учета бита записи   Обратная О, с учетом бита записи 3,6, 12 …   Обратная СЗ, с учетом бита записи 4, 8, 10 Сквозная БИ, без учета бита…

Порядок выполнения работы

Ввести в модель учебной ЭВМ текст своего варианта программы (см. табл. 2), ассемблировать его и сохранить на диске в виде txt-файла.

Установить параметры кэш-памяти размером 4 ячейки, выбрать режим записи и алгоритм замещения в соответствии с первой строкой своего варианта из табл. 9.13.

В шаговом режиме выполнить программу, фиксируя после каждого шага состояние кэш-памяти.

Для одной из команд записи (WR) перейти в режим Такти отметить, в каких микрокомандах происходит изменение кэш-памяти.

Для кэш-памяти размером 8 ячеек установить параметры в соответствии со второй строкой своего варианта из табл. 9.13 и выполнить программу в шаговом режиме еще раз, фиксируя последовательность номеров замещаемых ячеек кэш-памяти.

Напомним, что программа определяется как последовательность команд, выполнение кото­рых позволит получить некий результат.

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

Вариант задания — текст программы и режимы кэш-памяти.

Последовательность состояний кэш-памяти размером 4 ячейки при однократном выполнении программы (команды 1—7).

Последовательность микрокоманд при выполнении команды wr с отметкой тех микрокоманд, в которых возможна модификация кэш-памяти.

Для варианта кэш-памяти размером 8 ячеек — последовательность номеров замещаемых ячеек кэш-памяти для второго варианта параметров кэш памяти при двукратном выполнении программы (команды 1—7).

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

В чем смысл включения кэш-памяти в состав ЭВМ?

Как работает кэш-память в режиме обратной записи? Сквозной записи?

Как зависит эффективность работы ЭВМ от размера кэш-памяти?

В какую ячейку кэш-памяти будет помещаться очередное слово, если свободные ячейки отсутствуют?

Какие алгоритмы замещения ячеек кэш-памяти вам известны?

Тема: АЛГОРИТМЫ ЗАМЕЩЕНИЯ СТРОК КЭШ-ПАМЯТИ

Цель: изучение влияния параметров кэш-памяти и выбранного алгоритма замещения на эффективность работы системы. Эффективность в данном случае оценивается числом кэш-попаданий по отношению к общему числу обращений к памяти. Учитывая разницу в алгоритмах в режимах сквозной и обратной записи, эффективность использования кэш-памяти вычисляется выражениям (8.2) и (8.3) соответственно для сквозной и обратной записи.

Очевидно, эффективность работы системы с кэш-памятью будет зависеть не только от параметров кэш-памяти и выбранного алгоритма замещения, но и от класса решаемой задачи. Так, линейные программы должны хорошо ра­ботать с алгоритмами замещения типа очередь, а программы с большим чис­лом условных переходов, зависящих от случайных входных данных, могут да­вать неплохие результаты с алгоритмами случайного замещения. Можно предположить, что программы, имеющие большое число повторяющихся уча­стков (часто вызываемых подпрограмм и/или циклов) при прочих равных ус­ловиях обеспечат более высокую эффективность применения кэш-памяти чем линейные программы. И, разумеется, на эффективность напрямую дол­жен влиять размер кэш-памяти.

Для проверки высказанных выше предположений выполняется настоящая лабораторная работа.

Задание

В данной лабораторной работе все варианты задания одинаковы: исследовать эффективность работы кэш-памяти при выполнении двух разнотипных про­грамм, написанных и отлаженных вами при выполнении лабораторных работ № 2 и 4.

Порядок выполнения работы

В меню Работаустановить режим Кэш-память. В меню Видвыбрать команду Кэш-память,открыв тем самым окно Кэш­память,в нем… Запустить программу в автоматическом режиме; по окончании работы просмотреть результаты работы кэш-памяти в окне…

Совет_______________________________________________________

При очередном запуске программы не забывайте устанавливать про­цессор модели в начальное состояние, нажимая кнопку R в окне Процессор!

Повторить все действия, описанные в пп. 1—7 для программы из лабораторной работы № 4, заполняя вторую таблицу по форме табл. 9.15

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

Две таблицы по форме табл. 9.15 с результатами моделирования программ из лабораторных работ № 2 и 4 при разных режимах работы кэш-памяти.

Выводы, объясняющие полученные результаты.

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

Как работает алгоритм замещения очередь при установленном флажке С учетом бита записи в диалоговом окне Параметры кэш-памяти?

Какой алгоритм замещения будет наиболее эффективным в случае применения кэш-памяти большого объема (в кэш-память целиком помещается программа)?

Как скажется на эффективности алгоритмов замещения учет значения бита записи W при работе кэш-памяти в режиме обратной записи? Сквозной записи?

Для каких целей в структуру ячейки кэш-памяти включен бит использования. Как устанавливается и сбрасывается этот бит?

Таблица 3. Результаты эксперимента

 

Способ Сквозная запись
Алгоритм Случайное замещение Очередь Бит U
Размер безАУ cW 6e3\V cW без\У cW
*          
           
           
           
           
           
           

 


 

Практическая работа №14-15FASM (Flat Assembler).

ЦЕЛЬ РАБОТЫ

Приобретение навыков работы в FASM (Ассемблер)

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

Прочитать задания к работе

Оформите отчет, который должен содержать:

-титульный лист (см. приложение);

-постановку задачи;

- описание пошагового исполнения;

- отчет о полученном результате

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

Если вы распаковали FASM в другое место — замените "D:\FASM\" на свой путь. Сохраните и закройте FASMW.INI. Забегая вперед, вкратце… include '%fasminc%/win32ax.inc' .dataCaption db 'Моя первая программа.',0 Text db 'Всем привет!',0

Msg MSG

section '.code' code readable executable

start:

Invoke GetModuleHandle,0

mov [wc.hInstance],eax

Invoke LoadIcon,0,IDI_APPLICATION

mov [wc.hIcon],eax

Invoke LoadCursor,0,IDC_ARROW

mov [wc.hCursor],eax

Invoke RegisterClass,wc

Cmp eax,0

Je error

invoke CreateWindowEx,0,_class,_title,WS_VISIBLE+WS_DLGFRAME+WS_SYSMENU,128,128,256,192,0,0,[wc.hInstance],0

Cmp eax,0

Je error

msg_loop:

Invoke GetMessage,msg,0,0,0

Cmp eax,0

Je end_loop

Invoke TranslateMessage,msg

Invoke DispatchMessage,msg

Jmp msg_loop

error:

invoke MessageBox,0,_error,0,MB_ICONERROR+MB_OK

end_loop:

invoke ExitProcess,[msg.wParam]

Proc WindowProc hwnd,wmsg,wparam,lparam

Push ebx esi edi

cmp [wmsg],WM_DESTROY

Je .wmdestroy

.defwndproc:

invoke DefWindowProc,[hwnd],[wmsg],[wparam],[lparam]

Jmp .finish

.wmdestroy:

Invoke PostQuitMessage,0

Mov eax,0

.finish:

Pop edi esi ebx

Ret

Endp

section '.idata' import data readable writeable

library kernel32,'KERNEL32.DLL',\

user32,'USER32.DLL'

include 'api\kernel32.inc'

include 'api\user32.inc'


Столько кода, и ничего особенного в результате. В MessageBox хотя бы присутствовала кнопка ОК, а тут — пустое окно. Не волнуйтесь: как только мы разберемся с устройством простейшего окна, мы сразу же перейдем к навешиванию на него прочих элементов. Используя MessageBox, мы были ужасно ограничены набором стандартных параметров этой функции. Кроме того, программа не могла продолжать исполняться до тех пор, пока пользователь не прореагирует нажатием кнопки в окошке или его закрытием. В случае использования окна программа может исполняться, параллельно реагируя на действия пользователя. Сразу будет нелегко понять алгоритм работы окна, но, как только вы его поймете, все остальное пойдет намного легче. Приступаем к разбору полетов. В секции данных после объявления трех текстовых строк (класс окна, его заголовок, сообщение об ошибке) объявляются две структуры данных. Первая — WNDCLASS — структура класса окна. Она описана в файле FASM\INCLUDE\EQUATES\USER32.INC (смотрим файл прямо в компиляторе или через блокнот — кому как удобно) и содержит 10 атрибутов класса окна: style — стиль окна; lpfnWndProc — указатель на процедуру обработки сообщений, посланных окну; cbClsExtra — количество дополнительных байт в памяти для данной структуры; cbWndExtra — количество дополнительных байт в памяти для данных, присоединенных к окну; hInstance — идентификатор приложения, создавшего окно; hIcon — идентификатор иконки окна; hCursor — идентификатор курсора окна; hbrBackground — цвет фона окна; lpszMenuName — указатель на имя меню окна; указатель на имя класса. Вторая — MSG — структура сообщения. Описана там же, где и первая. Состоит из шести элементов: hwnd — идентификатор окна — получателя сообщения; message — сообщение; wParam — дополнительная информация о сообщении; lParam — дополнительная информация о сообщении; time — время отправки сообщения; pt — координаты курсора на время отправки сообщения. Последний элемент, кстати, тоже является структурой, которая описана в том же файле. Это наглядный пример вложенной структуры. Не старайтесь все сразу запомнить — просто примите к сведению. После объявления структур wc будет считаться указателем на первый байт структуры данных, созданной в соответствии с шаблоном WNDCLASS, а msg — указателем на MSG. Элементам структуры wc присваиваются соответствующие значения, разделенные запятыми (в основном пока что ноли). Значения элементов структуры msg считаются сейчас неопределенными — хотя на практике они будут иметь нулевые значения, правильно считать их значения неопределенными. В тексте программы можно обращаться к отдельным элементам структуры, например, wc.hCursor или wc.hIcon, хотя в оперативной памяти все данные будут просто идти друг за другом безо всяких пометок. Элементы структур для 32-битных версий windows обычно имеют размер 32 бита — это 4 байта или двойное слово (dword). Поэтому в описании структуры написано dd (data in dwords). Следовательно, мы могли бы заменить, например, wc.hInstance на wc+16, потому что элементы структуры wc в адресном пространстве будут выглядеть примерно так:

Элемент Адрес
wc.style wc+0
wc.lpfnWndProc wc+4
wc.cbClsExtra wc+8
wc.cbWndExtra wc+12
wc.hInstance wc+16
wc.hIcon wc+20
wc.hCursor wc+24
wc.hbrBackground wc+28
wc.lpszMenuName wc+32
wc.lpszClassName wc+36

Можно было бы сейчас не вдаваться в эти подробности, но лучше, если вы сразу получите правильное представление о размещении данных в памяти. Теперь попробуем разобраться с исполняемым кодом (section '.code'). Функция GetModuleHandle возвращает в eax идентификатор исполняемого модуля. Она имеет всего один параметр — указатель на строку — имя модуля (exe или dll). Если параметр равен нулю, то функция возвращает идентификатор вызвавшего функцию модуля, то есть нашей программы. Этот идентификатор нужен нам для заполнения элемента wc.hInstance, поэтому следующей командой мы сразу помещаем в этот элемент содержимое eax. LoadIcon загружает указанную иконку из ресурсов исполняемого файла. Первый параметр — идентификатор исполняемого файла или ноль для загрузки стандартной иконки. Второй параметр — строка — имя иконки из ресурсов либо идентификатор стандартной иконки, если первый параметр ноль. В нашем случае иконка стандартная. IDI_APPLICATION — это константа — ее и идентификаторы других стандартных иконок вы легко отыщете все в том же EQUATES\USER32.INC. Возвращаемое значение — идентификатор загруженной иконки, который мы тут же помещаем в wc.hIcon. LoadCursor работает по аналогии. Идентификаторы стандартных курсоров вы найдете чуть выше идентификаторов иконок. Теперь, когда все необходимые данные структуры wc находятся на своих местах, вызывается функция RegisterClass. Единственный параметр этой функции — указатель на структуру, содержащую описание класса окна. Если класс был успешно зарегистрирован, возвращаемое значение будет отлично от нуля. Если по каким-либо причинам не удалось зарегистрировать класс, то в eax вернется ноль. Исходя из этого, мы сравниваем eax и 0 (cmp) и в случае равенства прыгаем на метку ошибки (je error). Если не равно нулю — значит, все в порядке, и мы переходим к созданию окна. Функция CreateWindowEx создает окно. Параметры соответственно: расширенный стиль окна; указатель на зарегистрированное имя класса; указатель на имя окна; стандартный стиль окна; X координата левого верхнего угла окна; Y координата левого верхнего угла окна; ширина окна; высота окна; идентификатор родительского окна или окна-владельца; идентификатор меню или дочернего окна; идентификатор исполняемого модуля, с которым связано окно; указатель на значение, которое передается окну через структуру CREATESTRUCT в параметре lParam сообщения WM_CREATE. Возвращаемое значение — идентификатор созданного окна. В случае ошибки возвращается ноль. Названия расширенных стилей окна вы можете найти в файле EQUATES\USER32.INC в группе Extended Window Styles, названия стандартных стилей находятся чуть выше в группах Window Styles и Common Window Styles.

Далее следует цикл msg_loop. Этот цикл будет повторяться до тех пор, пока окно не будет закрыто. Функция GetMessage получает сообщение из очереди сообщений приложения. Если сообщения отсутствуют, функция ожидает их, и цикл приостанавливается до появления нового сообщения. Сообщения посылаются окну операционной системой, когда с окном происходит какое-либо действие — например, когда окно перемещается, изменяется его размер или даже когда курсор мыши просто движется над областью окна. Также окну могут передаваться сообщения от других процессов. Параметры функции следующие: указатель на структуру, в которой разместятся элементы сообщения; идентификатор окна — получателя сообщения: если ноль, то сообщения принимаются для любого окна данного приложения; минимальное значение сообщения; максимальное значение сообщения. Последние два параметра исполняют роль фильтра сообщений. Так как все сообщения являются целочисленными значениями, можно установить фильтрацию типа "от… и до…" Если максимальное и минимальное значения равняются нулю, фильтрация не выполняется, и принимаются все сообщения без исключения. Если функция получает сообщение WM_QUIT (выход), то возвращает ноль. В других случаях eax не будет равен нулю. Следовательно, если eax равен нулю, мы выходим из цикла (je end_loop), иначе цикл продолжается. TranslateMessage переводит комбинации wm_KeyDown/Up в wm_Char или wm_DeadChar, а комбинации wm_SysKeyDown/Up — в wm_SysChar или wm_SysDeadChar — и отправляет переведенное сообщение снова в очередь. Таким образом в процедуру обработки сообщений поступят и виртуальные клавиши и их символьные значения. DispatchMessage передает сообщения процедуре обработки сообщений (WindowProc). В газетной статье нет возможности привести список всех сообщений и их описание, поэтому я рекомендую вам скачать англоязычную справку по API-функциям размером около 22 Мб: сайт . К сожалению, нормального аналогичного справочника на русском языке я вам посоветовать не могу. Так уж сложилось, что не в моде у программистов русский язык.

Процедура обработки сообщений WindowProc вызывается каждый раз при получении окном нового сообщения и передаче его через DispatchMessage. Синтаксис записи этой и других процедур предельно прост: макроинструкция proc, имя процедуры и ее параметры через запятую, которые по умолчанию считаются 32-битными (4 байта каждый). Возврат из процедуры осуществляет команда ret. Каждая процедура должна завершаться инструкцией endp, которая указывает компилятору, где заканчивается код данной процедуры и начинается следующий фрагмент кода. Команда push помещает значение указанного регистра в стек, а команда pop извлекает последнее значение из стека в указанный регистр. Стек — это специально выделенная область памяти для передачи или сохранения данных. Его можно представить, например, как вертикальную штангу тренажера, на которую можно одевать по одному грузу и снимать тоже по одному. Команда push будто указывает, откуда взять груз, а команда pop сообщает, куда поместить груз, снятый со штанги. Такую аналогию я привел для того, чтобы вы уже таки уяснили, что, если мы хотим сохранить содержимое нескольких регистров в стек, а потом вернуть эти значения в регистры, то нам необходимо сохранять в одном порядке, а извлекать — в обратном. Это важно запомнить и не путать: если сохраняем push eax ebx ecx — извлекаем pop ecx ebx eax. А сохраняем мы содержимое этих регистров, чтобы предотвратить потерю данных: функция DefWindowProc спокойно может затереть содержимое этих регистров. Так как окно у нас простейшее, и на нем нет никаких кнопок, кроме крестика для закрытия, единственное сообщение, которое мы должны обработать — это WM_DESTROY, которое будет послано окну перед его удалением. Стало быть, если сообщение равно WM_DESTROY, мы прыгаем на метку .wmdestroy, где будет вызвана функция PostQuitMessage, параметром которой является код завершения. Ноль означает, что программа самостоятельно завершает работу. Эта функция посылает нашему процессу сообщение WM_QUIT, после обработки которого функция GetMessage вернет ноль, и цикл обработки сообщений прервется переходом на end_loop — выход из программы. Если сообщение не WM_DESTROY, то выполняется следующая функция — DefWindowProc. Эта функция обычно вызывается после того, как обработаны все предусмотренные нами сообщения (в нашем случае предусмотрено только одно, но их ведь может быть и сотня), для того, чтобы операционная система своими средствами произвела стандартную обработку сообщения, которое получило наше окно. Параметры функции: идентификатор окна — получателя сообщения; сообщение; дополнительная информация о сообщении; дополнительная информация о сообщении. Что ж, теперь мы можем навесить на наше окно кнопку. Для этого добавим в секцию данных (section '.data') ее класс и имя, а заголовок главного окна немного подправим:

_title db 'НеПустое Окно',0
_classb db 'BUTTON',0
_textb db 'КНОПКА',0

В секцию кода добавим обработку сообщения WM_CREATE, которое приходит окну один раз при его создании, чтобы при создании главного окна создавать дочерние окна. Кнопка — это окно стандартного класса BUTTON, поэтому регистрировать этот класс нам не понадобится. Также добавим обработку сообщения WM_COMMAND, которое приходит окну, когда пользователь выбирает пункт меню или совершает действие с другим дочерним элементом окна (в нашем случае — нажатие на кнопку):

proc WindowProc hwnd,wmsg,wparam,lparam
push ebx esi edi
cmp [wmsg],WM_CREATE
je .wmcreate
cmp [wmsg],WM_COMMAND
je .wmcommand
cmp [wmsg],WM_DESTROY
je .wmdestroy
.defwndproc:
invoke DefWindowProc,[hwnd],[wmsg],[wparam],[lparam]
jmp .finish
.wmcreate:
invoke CreateWindowEx,0,_classb,_textb,WS_VISIBLE+WS_CHILD+BS_PUSHBUTTON, 10,10,100,50,[hwnd],1001,[wc.hInstance],NULL

jmp .finish
.wmcommand:
cmp [wparam],1001
jne .finish

invoke MessageBox,[hwnd],_textb,_title,0
jmp .finish
.wmdestroy:
invoke PostQuitMessage,0
mov eax,0
.finish:
pop edi esi ebx

ret
endp

Теперь при создании окна выполнятся команды после метки .wmcreate, и на главном окне будет создана кнопка с идентификатором 1001. При нажатии на эту кнопку окно получает сообщение WM_COMMAND, а wparam сообщения будет содержать в старших двух байтах BN_CLICKED (кликнута кнопка), а в младших двух байтах — идентификатор кнопки (1001). Так как константа BN_CLICKED равна нулю (убеждаемся в этом в EQUATES\USER32.INC), можно не учитывать ее и просто сравнить wparam с 1001, чтобы убедиться, что была нажата наша кнопка. Если не равно — значит, не наша или не нажата — jne .finish . Иначе — показываем мессадж-бокс. По аналогии можете самостоятельно добавить еще пару кнопок, только не забывайте изменять координаты их местоположения, иначе они будут накладываться друг на друга, и вы увидите лишь одну из них. Поэкспериментируйте со стилями и другими параметрами. К следующему занятию постарайтесь четко усвоить принципы создания и работы простых окон, чтобы мы смело могли двигаться дальше.

format PE GUI 4.0

include '%fasminc%/win32ax.inc'

;задание: X=z^3-t^3 Если результат вычитания получится /

;отрицательный, то выдать на экран кроме полученного /

;результата сообщение: «Результат отрицательный».

.data

formatd db "%d",0 ;output format DEC

result db 256 dup(?)

z db 3

t db 2 ;корректируем значение Т

;t db 4 ; перемещением значка комментария

.code

start:

xor eax,eax ; обнуление

mov al,[z] ; в al вводим z

mul [z] ; умножаем на z

mul [z] ; умножаем на z

mov ebx,eax ; смещаем результат в еbx

mov al,[t] ; в al вводим t

mul [t] ; умножаем на t

mul [t] ; умножаем на t

sub ebx,eax ; вычитаем

cmp ebx,eax ; сравниваем ebx,eax

jns metka ; перейти если нет отрицательного знака на метку

;иначе продолжаем выполнение

invoke wsprintf,result,formatd,ebx,eax ;показываем отрицательный результат

invoke MessageBox,0,result,'Результат отрицательный',MB_OK

invoke ExitProcess,0

metka: ;

invoke wsprintf,result,formatd,ebx,eax

invoke MessageBox,0,result,'вычисление z^3-t^3 (z=3,t=3)',MB_OK

invoke ExitProcess,0

.end start

Заполнение данными.

db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 30 раз Это неудобно и некрасиво, тем более можно обсчитаться. Для сделана директива… db 30 DUP (0) ; тот же результат

– Конец работы –

Используемые теги: практическая, работа, Представление, информации, ЭВМ, кодирование, счет, количества, информации, обретение, навыков, представления, двоичной, информации, ЭВМ0.165

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Практическая работа №1-3 Представление информации в ЭВМ. Кодирование и подсчет количества информации. Приобретение навыков представления двоичной информации в ЭВМ

Что будем делать с полученным материалом:

Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Еще рефераты, курсовые, дипломные работы на эту тему:

Приобрести студентам основные навыки практической работы с клавиатурой ПК при выполнении практических работ в Microsoft Office
Современные сервисные пакеты прикладных программ ППП Microsoft Office... Такое положение привело к мысли разработать и составить практическое руководство в котором процесс освоения...

АЛГОРИТМЫ ВЫПОЛНЕНИЯ ПРАКТИЧЕСКИХ НАВЫКОВ, НЕОБХОДИМЫХ ДЛЯ ОКАЗАНИЯ ПЕРВОЙ ВРАЧЕБНОЙ ПОМОЩИ ПРИ НЕОТЛОЖНЫХ АЛГОРИТМЫ ВЫПОЛНЕНИЯ ПРАКТИЧЕСКИХ НАВЫКОВ, СОСТОЯНИЯХ И ЗАБОЛЕВАНИЯХ
АЛГОРИТМЫ ВЫПОЛНЕНИЯ ПРАКТИЧЕСКИХ НАВЫКОВ НЕОБХОДИМЫХ ДЛЯ ОКАЗАНИЯ ПЕРВОЙ ВРАЧЕБНОЙ ПОМОЩИ ПРИ СОСТОЯНИЯХ И ЗАБОЛЕВАНИЯХ...

Дисциплина Операционные системы на тему: СКРИПТЫ, ПЛАНИРОВЩИКИ - изучение работы скриптов и приобретение навыков работы с ними
Кафедра компьютерных технологий... ОТЧЕТ по лабораторной работе...

Пояснительная записка Перечень практических работ Практические работы Действия с рациональными числами
Практическая работа Действия с рациональными числами Место проведения учебная аудитория... Практическая работа Решение рациональных... Практическая работа Решение рациональных уравнений неравенств систем уравнений и...

Цель работы. Изучение особенностей структурных и фазовых превращений в сталях при закалке; приобретение практических навыков проведения закалки.
На сайте allrefs.net читайте: Цель работы. Изучение особенностей структурных и фазовых превращений в сталях при закалке; приобретение практических навыков проведения закалки....

Практическая работа № 1 Основные приемы работы с электронными таблицами EXCEL
Основные приемы работы с электронными таблицами EXCEL... УПРАЖНЕНИЕ... Применение основных приемов работы с электронными таблицами ввод данных в ячейку изменение ширины столбца...

Двоичное кодирование информации. Физические, математические и информационные модели
Контрольные вопросы Дайте определение логики Какие высказывания называются ложными а какие истинными Какие логические связки... Лекция Постановка цели... Контрольные вопросы...

Приобретение практических навыков набора, редактирования и форматирования текста в редакторе Microsoft Word
Цель и задачи лабораторий работы... Приобретение практических навыков набора редактирования и форматирования... Форматирование символов...

Задания для выполнения контрольной работы и лабораторной работы для самостоятельной работы студентов Менеджмент и маркетинг
На сайте allrefs.net читайте: "Задания для выполнения контрольной работы и лабораторной работы для самостоятельной работы студентов Менеджмент и маркетинг"

Кодирование числовой информации: позиционные и непозиционные системы счисления. Двоичная система счисления
Основные достоинства любой позиционной системы счисления простота выполнения арифметических операций и ограниченное количество символов цифр... Арифметические операции во всех позиционных системах счисления выполняются по...

0.032
Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • По категориям
  • По работам