- •Методические указания
- •«Моделирование программы гипотетической машины с помощью макросредств»
- •1.Введение.
- •2.Пример выполнения курсовой работы.
- •2.1.Задание.
- •2.2.Анализ задачи и разработка алгоритма.
- •2.3.Разработка программы для гм.
- •2.3.1. Определение данных.
- •2.3.2.Определие команд гм.
- •2.4.Моделирование программы гм на реальной эвм.
- •2.4.1.Выборка и запиь слов гм.
- •2.4.2. Макроопрделения для команд гм.
- •2.5.Технология подготовки программы к выполнению и ее отладка.
- •2.6. Результаты работы программы
- •3. Варианты курсовой работы
- •4.Приложения
- •2. Блоки повторения
- •2.1. Rept-блоки
- •Irpc-блоки
- •2.4 Макрооператоры
- •3. Макросы
- •113.1. Макроопределения
- •3.1. Макрокоманды
- •3. 3. Макроподстановки и макрорасширения
- •3. 5. Макросы и процедуры
- •3. 6. Определение макроса через макрос
- •3.7. Директива local
- •113.8. Директива ехiтм
- •3. 9. Переопределение и отмена макросов
- •4. Условное ассемблирование
- •4. 1. Директивы if и ife
- •4.2. Операторы отношения. Логические операторы
- •4.3. Директивы ifidn ,ifdif , ifb и ifnb
2.4.Моделирование программы гм на реальной эвм.
2.4.1.Выборка и запиь слов гм.
Чтобы выполнить программу на реальной ЭВМ необходимо для всех ее операторов написать макроопределения. На их сложность и объем в первую очередь влияет величина fw – формат слова ГМ. С методической точки зрения выберем fw как параметр и укажем диапазон его изменения: 8..255. Наиболее сложными операциями (макрокомандами) в такой постановке являются выборка и запись слова ГМ по заданному индексу в массиве. Алгоритмы выборки и записи поясняются ниже. Пусть в качестве исходных данных выбраны значения из некоторой области памяти. Шестнадцатеричные и двоичные коды этой области приведены на рис.5.
а)
1E 33 C0 50 B8 BD 13 8E D8 1E 07 B4 06 B0 00 B7 07 BA 4F 18 B9 00 00 CD 10 B4 02 B7 00 BA 00 00 CD 10 06 1E B8 1E 12 33 24 C0 2E 50 0E B8 28 BD 04 13 26 8E 1A D8 FF 1E 46 07 20 B4 32 06 44 B0 16 00 2A B7 36 07 30 BA
б)
00011110 00110011 11000000 01010000 10111000 10111101 00010011 10001110 11011000 00011110 00000111 10110100 00000110 10110000 00000000 10110111 00000111 10111010 01001111 00011000 10111001 00000000 00000000 11001101 00010000 10110100 00000010 10110111 00000000
Рис.5 . Пример исходных данных для списка (объектный код в начале
кодового сегмента)
Пусть для примера разрядность ГМ fw выбрана равной 23 бита. Тогда массив слов ГМ можно рассматривать как непрерывную последовательность бит. На рис.5б. выделены слова ГМ с индексами 0,2,4,…
Разберем алгоритм выборки слова ГМ из массива S в регистр или переменную R по заданному индексу i (команда MovSR R,S,i )(рис.6).
S[i] – слово ГМ
S
байт байт байт байт байт байт байт байт
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|||||||||
|
адрес |
байта S |
00010000 |
maskS |
|
|
|
|||||||||
|
|
|
rotate |
|
|
|
|
|||||||||
|
адрес |
байтаR |
00000001 |
maskR |
|
|
|
|||||||||
|
|
|
rotate |
|
|
|
|
|||||||||
|
R |
|
|
|
|
|
|
|
fw разрядов
Рис.6. Схема копирования слова ГМ в регистр или переменную.
Поскольку значение fw заранее неизвестно, выбираем наиболее универсальный алгоритм побитового копирование S[i] -> R. Выделение и копирование битов ведется от конца к началу с помощью двух двоичных масок maskS и maskR . Вначале maskS настраивается на последний бит S[i](см. макроопределение InitMov). Адрес этого бита вычисляется по формуле A = fw*(i+1)-1 и представляет величину битового смещения в S, младшие 3 бита которого являются номером бита в байте, а старшие биты – смещением для этого байта. Таким образом, позиция «1» в maskS настраивается на выделение последнего бита слова ГМ в S. Аналогично позиция «1» в maskR соответствует младшему разряду R. После копирования очередного бита maskS и maskR подвергаются циклическому сдвигу влево настраиваясь на следующий бит. Когда биты очередного байта S или R скопированы, происходит уменьшение адреса этого байта. Момент уменьшения адреса определяется по единичному состоянию флага CF, в котором, как известно, дублируется выдвигаемый бит при циклическом сдвиге маски. Очевидно, что в общем случае, уменьшение адреса байта S или R может происходить асинхронно. Алгоритмы выборки и записи слова ГМ во многом совпадают, поэтому их общие части объединены в макрокоманде InitMov. В алгоритме выборки R предварительно обнуляется, поэтому если бит S в «1», то соответствующий бит R устанавливается в «1» командой OR. При записи (макрокоманда MovRS) копирование сводится к инвертированию некоторых бит S. Действительно, если соответствующие биты S и R совпадают, то копирования не нужно. Если же они имеют противоположные значения, то требуется инвертировать бит S. На рис.7 приведены значения слов ГМ после выборки их из области памяти, показанной на рис.5б.
0F19E0 142E2F 2271DB 01E07B 203580 02DC1E 749E31 390000 66885A 00ADC0
Рис.7. 23-разрядные слова ГМ в 16 с/c после их выборки из массива.
Алгоритмы остальных макрокоманд несложные и достаточно подробно прокомментированы в макроопределениях, поэтому предлагается изучить их самостоятельно. Все макроопределения помещены в файл macros.inc и подключаются к головной программе директивой include. Макрокоманда InitRealComputer осуществляет настройку программы ГМ для ее выполнения на реальной ЭВМ.