Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metodichka_lab__rab_spo.doc
Скачиваний:
14
Добавлен:
05.09.2020
Размер:
433.66 Кб
Скачать

2.2.24. Использование оператора ptr

В предыдущих примерах, помещавших данные в регистр, DEBUG мог определить, исходя из типа регистра (AL или АХ, например), сколько байтов необходимо переместить. Приведенная ниже программа помещает непосредственные данные в память. Поскольку инструкция вроде MOV [120],25 не указывает количества байт, для этой цели можно использовать оператор PTR. Вот инструкции программы:

100 MOV AX,[11A]

103 ADD AX,[11C].

107 ADD AX,25

10А MOV [11Е],АХ

10D MOV WORD PTR [120],25

113 MOV BYTE PTR [122],30

118 JMP 100

11A DB 14 23

11C DB 05 00

11E DB 00 00

120 DB 00 00 00

Ниже приведено описание инструкций.

100: Поместить содержимое ячеек памяти 11АН и 11ВН в АХ. Квадратные скобки указывают на то, что операнд - адрес в памяти, а не непосредственное значение.

103: Добавить содержимое ячеек памяти 11СН и 11ВН к АХ.

107:Добавить непосредственное значение 25Н к АХ.

10А: Поместить содержимое регистра АХ в ячейки памяти с адресами 11EH и11FH.

10D: Поместить непосредственное значение 25Н в ячейки памяти 120Н и 121Н. Оператор WORD PTR, указывает DEBUG, что значение 25Н должно быть помещено в слово в памяти. Если записать данную инструкцию в виде MOV [120],25, DEBUG не смогла бы определить, какая длина выделенного участка памяти подразумевалась, и вывела бы сообщение об ошибке.

113: Поместить непосредственное значение 30Н в ячейку памяти по адресу 122Н. На этот раз используется оператор BYTE PTR для указания длины в 1 байт.

11А: Определить значения байт 14Н и 23Н. DB определяет байты для элементов данных, на которые инструкции (например, первая) ссылаются.

11С, 11Е, и 120: Определить другие значения, используемые в программе.

Для ввода этой программы сначала введите команду DEBUG A 100, а затем последовательно введите все инструкции (но не адреса, с которых начинаются строки). В конце еще раз нажмите клавишу <Enter> для завершения ввода. Для выполнения программы сначала воспользуйтесь командой R для просмотра состояния регистров и первой инструкции, а затем используйте последовательность команд Т. Остановите выполнение, когда дойдете до команды JMP 100 по адресу 118Н. Командой D просмотрите содержимое области памяти программы и убедитесь, что изменилось содержимое АХ (23ЗН) и ячеек памяти с адресами 11EH-11FH (ЗЕ23), 120Н-121Н (2500) и 122Н (30). Введите Т для повторения программы или Q – для выхода.

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

1. Область видеопамяти (Video Display Area) для цветного монитора в текстовом режиме начинается с адреса В800[0]. (а) Используйте команду DEBUG D для просмотра этой области памяти. Заметьте, что за каждым символом в этой области следует байт атрибутов (07Н для черно-белого режима). Используйте дополнительные команды D для просмотра всей области видеопамяти. (б) Используйте команду DEBUG F (Fill – заполнить) для вывода на экран 50 звездочек (символов * – код 2АН). Например, следующая команда заполняет всю видеопамять 4000 (FA0H) сердечками (03) и атрибутами (где 16H соответствует коричневым символам на синем фоне):

F B800:0 LFA0 03 16.

2. Рассмотрим следующие инструкции машинного языка:

В0 1С D0 E0 ВЗ 12 F6 ЕЗ ЕВ F6

Эти инструкции выполняют следующие действия.

(а) помещают 1СН в регистр AL,

(б) смещают регистр AL на один бит влево (эквивалент умножения на 2),

(в) помещают 12Н в регистр BL,

(г) умножают AL на BL.

Используйте команду DEBUG E для ввода этой программы, начиная с адреса CS:100. Затем введите D CS:100 для просмотра введенного кода. После этого введите R и последовательными командами Т выполните программу до достижения инструкции JMP. Каков конечный результат в регистре АХ?

3. Используйте DEBUG для ввода следующей программы в машинных кодах:

Код (с адреса 100Н): А0 00 02 D0 E0 F6 26 01 02 A3 02 02 90

Данные (с адреса 200Н): 1E 16 00 00

Эта программа выполняет следующие действия: (а) помещает значение байта DS:0200H (1E) в регистр AL; (б) сдвигает содержимое AL на один бит влево; (в) умножает AL на байт, содержащийся в ячейке с адресом DS:0201H (16), (г) помещает произведение из АХ в слово, начинающееся с адреса DS:0202H.

Введите команды D для просмотра введенных кода и данных. После этого введите команду R и последовательными командами Т выполните программу до достижения инструкции JMP. Каков конечный результат в регистре АХ? Введите еще одну команду D DS:0200 и посмотрите, в каком виде произведение хранится в памяти.

4. Для пункта 2, введите команды, записывающие программу на диск под именем HEXMULT.COM (см. приложение 1).

5. Используйте команду DEBUG А для ввода следующих инструкций:

MOV DX,2E

ADD DX,IF

SHL DX,01

SUB DX,BA

JMP 100.

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

6. Используйте DEBUG для создания и выполнения программы, выводящей на экран фразу "Coffee Break". Начните с А 100 для ввода инструкций и с А 120 для ввода фразы (не забудьте про ограничитель $).

7. Используйте DEBUG для создания и запуска программы, запоминающей три введенных с клавиатуры символа и выводящей их на экран.

(а) Начните с А 100.

(б) Используйте INT 16 для помещения символа в AL и скопируйте его из AL в ячейку с адресом [200].

(в) Опять используйте INT 16 для помещения символа в AL и скопируйте его из AL в ячейку с адресом [201].

(г) В третий раз используйте INT 16 для помещения символа в AL и скопируйте его из AL в ячейку с адресом [202].

(д) Используйте команду Е 123 '$' для установки ограничителя $ после трех введенных символов.

(е) Наконец, используйте INT 21 для вывода символов.

Соседние файлы в предмете Системное программное обеспечение