"Ассемблер и программирование для IBM PC. (IBM PC assembler language and programming)" - читать интересную книгу автора (Абель Питер, Переводчик: Ю.В.Сальников)байте 1 (т.е. во втором байте).
Ниже показаны команды машинного языка, которые обрабатывают эти данные: Команда Назначение A10000 Переслать слово (два байта), начинающееся в DS по адресу 0000, в регистр AX. 03060200 Прибавить содержимое слова (двух байт), начинающегося в DS по адресу 0002, к регистру AX. A30400 Переслать содержимое регистра AX в слово, начинающееся в DS по адресу 0004. CB Вернуться в DOS. Обратите внимание, что здесь имеются две команды MOV с pазличными машинными кодами: A1 и A3. Фактически машинный код зависит от регистров, на которые имеется ссылка, количества байтов (байт или слово), направления передачи данных (из регистра или в регистр) и от ссылки на непосредственные данные или на память. Воспользуемся опять отладчиком DEBUG для ввода данной программы и анализа ее выполнения. Когда отладчик выдал свое дефисное приглашение, он готов к приему команд. Сначала введите команды E (Enter) для сегмента данных: E DS:00 23 01 25 00 00 00 (Нажмите Return) Первая команда записывает три слова (шесть байтов) в начало сегмента данных, DS:00. Заметьте, что каждое слово вводилось в обратной последовательности, так что 0123 есть 2301, a 0025 есть 2500. Когда команда MOV будет обращаться к этим cловам, нормальная последовательность будет восстановлена и 2301 станет 0123, а 2500 - 0025. Вторая команда записывает три звездочки (***) для того, чтобы их можно было видеть впоследствии по команде D (Dump) - другого назначения эти звездочки не имеют. Введем теперь команды в сегмент кодов, опять начиная с адреса CS:100: E CS:100 A1 00 00 03 06 02 00 E CS:107 A3 04 00 CB Теперь команды находятся в ячейках памяти от CS:100 до CS:10A. Эти команды можно выполнить как это делалось ранее. На рис.2.3 показаны все шаги, включая команды E. На экране дисплея должны появиться такие же результаты, хотя адреса CS и DS могут различаться. Для пересмотра информации в сегменте данных и в сегменте кодов введите команды D (Dump) соответственно: для сегмента данных: D DS:000 (Return) для сегмента кодов: D CS:100 (Return) |
|
|