Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭВМ лабароторные работы 2006 года.doc
Скачиваний:
37
Добавлен:
20.05.2014
Размер:
2.34 Mб
Скачать

1 7 B a

1 7 B a

0 0

44

4 5 6 7 7 6 5 4

Байт с наиболее значащей частью

(“big-end”, в исходном числе он находится слева) сохраняется в память по наименьшему адресуN(n=4),

машины: Sparc, Apple, IBM-370 ….

Байт с наиболее значащей частью (слева)

сохраняется в память по наибольшему адресу N=3 (n=7), (“little-end”),

машины: Intel

Рис. 3. Два способа хранения многобайтовых данных

Необходимо отметить, что и в том, и в другом случае слово, содержащее это число, имеет, адрес – 0, но в первом случае мы записываем его в прямом виде - 17BA, а во втором в перевернутом. Принято в качестве адреса слова, которое состоит из нескольких последовательно расположенных байтов, использовать адрес байта с наименьшим номером. В итоге адреса слов уже не будут меняться через единицу, приращение будет зависеть от длины машинного слова.

Экспериментальная часть

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

Таблица 1. Коды логических операций между регистрами AX и BX

Команда

Код

Примечание

AND AX, BX

21 D8

Логическое И

OR AX, BX

09 D8

Логическое ИЛИ

XOR AX, BX

31 D8

Исключающее ИЛИ

Код первой формируемой команды – 21 D8 поместим сначала в регистрCX, а затем оттуда в оперативную память.

Получим следующую программу на ассемблере.

Таблица 2. Программа, формирующая и выполняющая логическую операцию

Адрес

Команда

Действие

Пояснение

100

movax,1234

поместить 1234 в регистр AX

1-ый операнд

103

movbx,5678

поместить 5678 в регистр BX

2-ой операнд

106

movcx,D821

поместить D821 в регистрCX

команда И

109

mov[10D],cx

скопировать CXв ячейку 10D

записать команду в ОЗУ

Как вы видите, первые две команды задают абсолютно произвольные константы (все данные приведены в шестнадцатеричном формате), над которыми будет произведена логическая операция И. Следующая команда (106) заносит в CXперевернутый код операции (D8 21 вместо 21D8). Причину этого мы уже обсуждали. Команда 109 заносит в ячейку ОЗУ со следующей командой (нетрудно убедится, что ее адрес 10D) выбранную логическую операцию.

Чтобы запустить программу можно использовать стандартный отладчик DEBUG, входящий в состав ОСWindows(кнопкаПуск, затемВыполнить).

Рис. 4. Вызов программы Debug

После ввода программы проверим ее правильность, для этого введем u, затем нажмем клавишу <Enter>. Обратите внимание на следующий важный факт. Начиная с ячейки 10Dинформация не вводилась, тем не менее вы увидите пятую команду, которой не было.

Рис. 5. Ввод программы и проверка

Теперь, исполним нашу программу. Для этого командой t5 попросимDebugвыполнить очередные 5 команд.

Рис. 6. Исполнение программы

Задание:

  1. Убедитесь в правильности работы программы (проверьте результат).

  2. Задайте команду XOR(D8 31). Проверьте ее выполнение для операндов 2476 и 0F31.

  3. Задайте команду OR(09D8). Проверьте ее выполнение для операндов 2476 и 0F31.

Выводы

Мы убедились в том, что можно реализовать вычислительную машину чисто программным способом.

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

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