Загрузка сегментных регистров — КиберПедия 

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

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

Загрузка сегментных регистров

2021-04-18 98
Загрузка сегментных регистров 0.00 из 5.00 0 оценок
Заказать работу

· Команда: LDS приемник, источник
· Назначение: Загрузить адрес, используя DS
· Процессор: 8086
· Команда: LES приемник, источник
· Назначение: Загрузить адрес, используя ES
· Процессор: 8086
· Команда: LFS приемник, источник
· Назначение: Загрузить адрес, используя FS
· Процессор: 80386
· Команда: LGS приемник, источник
· Назначение: Загрузить адрес, используя GS
· Процессор: 80386
· Команда: LSS приемник, источник
· Назначение: Загрузить адрес, используя SS
· Процессор: 8086

Второй операнд (источник) для всех этих команд — переменная в памяти размером в 32 или 48 бит (в зависимости от разрядности операндов). Первые 16 бит из этой переменной загружаются в соответствующий сегментный регистр (DS для LDS, ES для LES и т.д.), а следующие 16 или 32 — в регистр общего назначения, указанный в качестве первого операнда. В защищенном режиме значение, загружаемое в сегментный регистр, всегда должно быть правильным селектором сегмента (в реальном режиме любое число может использоваться как селектор).

Другие команды

· Команда: NOP
· Назначение: Отсутствие операции
· Процессор: 8086

NOP — однобайтная команда (код 90h), которая не выполняет ничего, только занимает место и время. Код этой команды фактически соответствует команде XCHG AL,AL. Можно многие команды записать так, что они не будут приводить ни к каким действиям, например:

mov ax,ax   ; 2 байта xchg ax,ax   ; 2 байта lea bx,[bx+0]; 3 байта (8Dh, 5Fh, 00h, но многие                     ; ассемблеры, встретив такую команду,                      ; реально используют более короткую команду                     ; lea bx,[bx] с кодом 8Dh 1Fh) shl eax,0   ; 4 байта shrd еах,еах,0; 5 байт
· Префикс: LOCK
· Назначение: Префикс блокировки шины данных
· Процессор: 8086

На все время выполнения команды, снабженной таким префиксом, будет заблокирована шина данных, и если в системе присутствует другой процессор, он не сможет обращаться к памяти, пока не закончится выполнение команды с префиксом LOCK. Команда XCHG автоматически всегда выполняется с блокировкой доступа к памяти, даже если префикс LOCK не указан. Этот префикс можно использовать только с командами ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD и XCHG.

· Команда: UD2
· Назначение: Неопределенная операция
· Процессор: P6

Эта команда всегда вызывает ошибку «неопределенная операция» (исключение #UD). Впервые она описана как таковая для Pentium Pro, но во всех предыдущих процессорах эта команда (код 0Fh 0Bh) не была определена и, естественно, приводила к такой же ошибке. UD2 предназначена для тестирования программного обеспечения, в частности операционных систем, которые должны уметь корректно обрабатывать такую ошибку. Название команды происходит от команды UD (код 0Fh 0FFh), которая была определена AMD для процессоров AMD K5.

· Команда: CPUID
· Назначение: Идентификация процессора
· Процессор: 80486

CPUID сообщает информацию о производителе, типе и модификации процессора, о наличии и поддержке различных расширений. Команда CPUID поддерживается Intel, начиная с процессоров Intel 80486DX/SX/DX2 SL, UMC U5S, Cyrix M1, AMD 80486DX4. Чтобы проверить, поддерживает ли процессор эту команду, попробуйте установить флаг ID в 1 (бит 21 в регистре EFLAGS) — если это получается, значит, команда CPUID поддерживается.

Результат работы CPUID зависит от значения регистра ЕАХ. Если ЕАХ = 0, CPUID возвращает в ЕАХ максимальное значение, с которым ее можно вызывать (2 для Р6, 1 для Р5), а регистры EBX:ECX:EDX содержат 12-байтную строку — идентификатор производителя (табл. 8).

Таблица 8. Строки производителей в CPUID

 

Производитель Строка в ЕВХ:ЕСХ:ЕРХ
Intel GenuineIntel
UMC UMC UMC UMC
Cyrix CyrixInstead
AMD AuthenticAMD
NexGen NexGenDriven
Centaur Technology CentaurHalls

 

Например, для процессоров Intel регистр ЕВХ содержит «Genu» (756E6547h), ЕСХ содержит «ineI» (49656E69h), a EDX — «ntel» (6C65746Eh).

Если ЕАХ = 1, CPUID возвращает в ЕАХ информацию о версии процессора, а в EDX — информацию о поддерживаемых расширениях. Многие понятия в этом описании относятся к работе процессора в защищенном режиме и рассмотрены ниже.

Биты 3 – 0 ЕАХ — Модификация.

Биты 7 – 4 ЕАХ — Модель.

Биты 11 – 8 ЕАХ — Семейство (3 для 386, 4 для 486, 5 для Pentium, 6 для Pentium Pro).

Биты 13 – 12 ЕАХ — Тип (0 — OEM, 1 — Overdrive, 2 — Dual).

Биты 31 – 14 ЕАХ зарезервированы и равны нулю.

Бит 0 EDX — «FPU» Процессор содержит FPU и может выполнять весь набор команд 80387.

Бит 1 EDX — «VME» Процессор поддерживает усовершенствованный режим V86 (флаги VIF и VIP в EFLAGS, биты VME и PVI в CRO).

Бит 2 EDX — «DE» Процессор поддерживает точки останова по вводу/выводу, бит DE в CR0.

Бит 3 EDX — «PSE» Процессор поддерживает страницы до 4 Мб, бит PSE в CR4, модифицированные биты в элементах списков страниц (РDЕ) и таблиц страниц (РТЕ).

Бит 4 EDX — «TSC» Процессор поддерживает команду RDTSC и бит TSC в CR4.

Бит 5 EDX — «MSR» Процессор поддерживает команды RDMSR и WRMSR и машинно-специфичные регистры, совместимые с Pentium.

Бит 6 EDX — «РАЕ» Процессор поддерживает физические адреса больше 32 бит, дополнительный уровень в таблицах трансляции страниц, страницы по 2 Мб и бит РАЕ в CR4. Число бит для физических адресов зависит от модели процессора. Так, Pentium Pro поддерживает 36 бит.

Бит 6 EDX — «РТЕ» (только для Cyrix).

Бит 7 EDX — «МСЕ» Процессор поддерживает бит МСЕ в CR4.

Бит 8 EDX — «СХ8» Процессор поддерживает команду CMPXCHG8B.

Бит 9 EDX — «APIC» Процессор содержит встроенный контроллер прерываний (APIC), и он активирован и доступен.

Бит 9 EDX — «PGE» (только для AMD).

Бит 10 EDX зарезервирован.

Бит 11 EDX — «SEP» Процессор поддерживает быстрые системные вызовы, команды SYSENTER и SYSEXIT (Pentium II).

Бит 12 EDX — «MTRR» Процессор поддерживает машинно-специфичные регистры MTRR.

Бит 13 EDX — «PGE» Процессор поддерживает бит PGE в CR4 и глобальные флаги в PTDE и РТЕ, указывающие элементы TLB, которые принадлежат сразу нескольким задачам.

Бит 14 EDX — «МСА» Процессор поддерживает машинно-специфичный регистр MCG_CAP.

Бит 15 EDX — «CMOV» Процессор поддерживает команды CMOVcc и (если бит 0 EDX установлен) FCMOVcc (Pentium Pro).

Бит 16 EDX — «PAT» Процессор поддерживает таблицу атрибутов страниц.

Биты 17 – 22 зарезервированы.

Бит 23 EDX — «ММХ» Процессор поддерживает набор команд ММХ.

Бит 24 EDX — «FXSR» Процессор поддерживает команды быстрого чтения/записи (ММХ2).

Биты 31 – 25 EDX зарезервированы.

Если ЕАХ = 2, CPUID на процессорах семейства Р6 возвращает в регистрах ЕАХ, ЕВХ, ЕСХ и EDX информацию о кэшах и TLB. Самый младший байт ЕАХ (регистр AL) указывает, сколько раз надо вызвать CPUID с ЕАХ = 2, чтобы получить информацию обо всех кэшах (1 для Pentium Pro и Pentium II). Самый старший бит (бит 31) каждого регистра указывает, содержит ли этот регистр правильную информацию (бит 31 = 0) или он зарезервирован (бит 31 = 1). В первом случае регистр содержит информацию в 1-байтных дескрипторах со следующими значениями:

00h — Пустой дескриптор.

01h — TLB команд, 4-килобайтные страницы, 4-сторонняя ассоциативность, 32 элемента.

02h — TLB команд, 4-мегабайтные страницы, 4-сторонняя ассоциативность, 4 элемента.

03h — TLB данных, 4-килобайтные страницы, 4-сторонняя ассоциативность, 64 элемента.

04h — TLB данных, 4-мегабайтные страницы, 4-сторонняя ассоциативность, 8 элементов.

06h — Кэш команд, 8 Кб, 4-сторонняя ассоциативность, 32 байта в строке.

08h — Кэш команд, 16 Кб, 4-сторонняя ассоциативность, 32 байта в строке.

0Ah — Кэш данных, 8 Кб, 2-сторонняя ассоциативность, 32 байта в строке.

0Ch — Кэш данных, 16 Кб, 2-сторонняя ассоциативность, 32 байта в строке.

41h — Унифицированный кэш, 128 Кб, 4-сторонняя ассоциативность, 32 байта в строке.

42h — Унифицированный кэш, 256 Кб, 4-сторонняя ассоциативность, 32 байта в строке.

43h — Унифицированный кэш, 512 Кб, 4-сторонняя ассоциативность, 32 байта в строке.

44h — Унифицированный кэш, 1 Мб, 4-сторонняя ассоциативность, 32 байта в строке.

Совместимые с Intel процессоры AMD и Cyrix поддерживают вызов «расширенных функций» CPUID со значениями ЕАХ, в которых самый старший бит всегда установлен в 1.

ЕАХ = 80000000h: Возвращает в ЕАХ максимальный номер расширенной функции CPUID, поддерживаемой данным процессором.

ЕАХ = 80000001h: Возвращает в ЕАХ 051Xh для AMD K5 (X — номер модификации) или 061Хh для AMD К6. В EDX эта функция возвращает информацию о поддерживаемых расширениях (указаны только флаги, отличающиеся от CPUID с ЕАХ = 1).

Бит 5 EDX «MSR» — Процессор поддерживает машинно-специфичные регистры, совместимые с К5.

Бит 10 EDX — Процессор поддерживает команды SYSCALL и SYSRET.

Бит 16 EDX — Процессор поддерживает команды FCMOVcc.

Бит 24 EDX — Процессор поддерживает ММХ с расширениями от Cyrix.

Бит 25 EDX — Процессор поддерживает набор команд AMD 3D.

ЕАХ = 80000002h, 80000003h и 80000004h — последовательный вызов CPUID с этими значениями в ЕАХ возвращает в EAX:EBX:ECX:EDX последовательно четыре 16-байтные части строки — имени процессора. Например: «AMD-K5(tm) Processor».

ЕАХ = 80000005h — Команда возвращает информацию о TLB в регистре ЕВХ (старшее слово — TLB данных, младшее слово — TLB команд, старший байт — ассоциативность, младший байт — число элементов), о кэше данных в регистре ЕСХ и о кэше команд в регистре EDX (биты 31 – 24 — размер в килобайтах, биты 23 – 16 — ассоциативность, биты 15 – 8 — число линий на тэг, биты 7 – 0 — число байт на линию.

Числа с плавающей запятой

В процессорах Intel все операции с плавающей запятой выполняет специальное устройство, FPU (Floating Point Unit), с собственными регистрами и собственным набором команд, поставлявшееся сначала в виде сопроцессора (8087, 80287, 80387, 80487), а начиная с 80486DX — встраивающееся в основной процессор. FPU полностью соответствует стандартам IEEE 754 и (начиная с 80486) IEEE 854.

Расширение IА ММХ

Начиная с модификации процессора Pentium Р54С, все процессоры Intel содержат расширение ММХ, предназначенное для увеличения эффективности программ, работающих с большими потоками данных (обработка изображений, видео, синтез и обработка звука), то есть для всех тех случаев, когда нужно выполнить несложные операции над большими массивами однотипных чисел. ММХ предоставляет несколько новых типов данных, регистров и команд, позволяющих выполнять арифметические и логические операции над несколькими числами одновременно.

Программа DEBUG

 

Данный раздел описывает программу DEBUG и способы ее применения. 

 

Программа DEBUG применяется в качестве:

• удобного средства для тестирования программ. Она DEBUG позволяет отслеживать выполнение пользовательской программы и, кроме того, вводить в эту программу изменения. Поскольку нет необходимости повторной трансляции модифицированной программы, правильность введенных изменений можно проверить, запустив сразу же эту программу.

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

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

 

 

Запуск программы DEBUG

Программа DEBUG запускается следующей командой:

DEBUG [d:] [путь] [имя_файла[. тип)] [napl] [пар2]

Если команда DEBUG содержит имя_файла, то указанный файл загружается в память и все последующие действия модификации, вывода на экран или запуска будут выполняться именно для этого Файла.

Отсутствие имени файла в команде обозначает, что пользователь работает с Файлом находящимся в памяти, или файл будет загружен в дальнейшем с помощью команд Наше и Load. Затем можно использовать команды модификации, вывода на экран или запуска содержимого памяти-Параметры napl и пар2 представляют собой параметры для загружаемого файла. Например,

DEBUG DISKCOMP.СОM А: В:

В этой команде А: и В: это параметры, которые программа DEBUG передает программе DISKCOMP.

Программа DEBUG устанавливает содержимое регистров и указателей запускаемой программы следующим образом:

• сегментные регистры (CS, DS,ES и SS) определяют начало свободной памяти в первом сегменте, расположенном за программой DEBUG.

• Указатель команд (IP) содержит 01ООН.

• Указатель стека (SP) определяет конец сегмента памяти или начало области памяти занимаемой загрузочной программой в зависимости от того,
которая из этих величин меньше.  Величина сегмента, адрес которой определяется сдвигом 6, уменьшается на 100H, что позволяет создать стек такой же величины.

• Остальные регистры (АХ, ВХ, СХ, DX, BP,SI, DI} обнулены. После запуска программы DEBUG с указанием файла регистр СХ содержит длину этого
Файла (в байтах). В случае, когда длина Файла больше 64К, этот параметр находится в двух регистрах ВХ и СХ (старшие байты в регистре ВХ).

• Начальное состояние флагов: NV UP El PL HZ NА РО NС

 

• Текущий адрес передачи из диска равен 8ОН в кодовом сегменте (CS).

 

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

Замечания:

1.  Если программа DEBUG загружает Файл типа, ЕХЕ, то она выполняет необходимое перемещение и устанавливает регистр сегмента, указатель стека и указатель команд равными величинам, указанным в программе. Регистры DS и ES определяют префикс сегмента программы в самом младшем доступном адресном сегменте. Регистры ВХ и СХ содержат размер программы, который меньше размера Файла.

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

2. Если программа DEBUG загружает Файл типа.HEX, то этот Файл считается программой в машинном коде INTEL. Данная программа во время загрузки преобразуется к выполняемому виду.

 

Команды программы DEBUG

Данный раздел содержит описание всех команд программы DEBUG приведенных в алфавитном порядке. Описание каждой команды содержит формат этой команды и способы ее применения. Иногда приведен пример употребления команды.

Общие сведения о командах программы debug

Нижеприведенные примечания касаются всех команд программы DEBUG:

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

• Команды и параметры должны быть разделены. Но разделители необходимы лишь между двумя очередными шестнадцатеричными числами. Нижеприведенные команды тождественные:

dcs:100 110

d cs:100 110

 d, cs: 100, 110

• Нажатие клавиш [Ctrl]+[Break] прерывает программу DEBUG.

• Выполнение команды программы DEBUG начинается после нажатия клавиши [Enter].

• Нажатие клавиш [Ctrl]+[NumLocK] задерживает вывод данных на экран. Этими клавишами следует пользоваться в случае, когда данных много и они не помещаются на экране.  Нажатие любой клавиши возобновляет вывод данных.

• Программа DEBUG допускает использование управляющих клавиш и других клавиш ДОС описанных во втором разделе руководства программиста.

• После обнаружения синтаксической ошибки, программа DEBUG выводит на экран ошибочную строку:

d cs:1OO CS:110

^error

В приведенном примере второй адрес в команде Dump должен быть шестнадцатеричным числом определяющим сдвиг. Буква S не является шестнадцатеричным числом, и из-за этого возникла ошибка.

• Подсказкой программы DEBUG является тире (—).

 

A(Assemble)

Команла трансляции

 

функция: Команда выполняет трансляцию операторов языка    macroassembler(непосредственно в памяти).

формат: А[адрес}

Комментарии: Все числа в команде Assemble представлены в шестнадцатеричном виде. Результат трансляции записывается в очередных ячейках памяти, начиная с адреса указанного параметром адрес. Если параметр адрес в команде отсутствует, то оттранслированная программа загружается, начиная с адреса CS:O1OO в случае, когда команда Assemble используется впервые, иди в область за последней командой, записанной командой Assemble. После ввода всех подлежащих трансляции строк, следует нажать клавишу [Enter], что позволит возвратиться к подсказке программы DEBUG.

Программа DEBUG сигнализирует возникновение ошибки путем вывода на экран сообщения ^error с текущим адресом трансляции. Синтаксис программы DEBUG соответствует стандартному синтаксису ассемблера 8086/8x86 и 8087, т. е.:

• все числовые значения являются шестнадцатиричными; их длина с 1 до 4 символов,

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

• допустимыми именами сегментов являются следующие имена: CS:, DS:, ES:, SS:,

• имена операций с последовательностями должны соответствовать длине последовательности. К примеру, MOVSW может пересылать только последовательности слов, MOVSB – последовательности байтов

• RETF является именем команды удаленного возврата,

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

Пример:

 

0100:0500 JHP 502  ; 2-х байтовый короткий переход

0100:0502 JMP NEAR 505; 3-х байтовый близкий переход

              0100:0505 JMP FAR 50A    ; 5-ти байтовый далекий переход

Префикс NEAR может быть сокращен до NE. Префикс FAR не сокращается.

•     Программа DEBUG не в состоянии отличить, относятся ли аргументы операций к словам или к байтам. В таком случае тип данных должен быть определен префиксами "WORD PTR" или "BYTE PRT", которые могут быть сокращены к "WO" и "BY". Примеры:

NEG BYTE PTR[126]

DEC WO [SI]

•     DEBUG не различает, является ли аргумент операции адресом памяти или непосредственным аргументом. Поэтому принимается, что операнд в квадратных скобках является адресом. Например:

MOV АХ, 21; запись значения 21Н в АХ

MOV АХ, [21];запись в АХ содержимого ячейки памяти с адресом 21Н

•     в программу DEBUG включены еще два псевдооператора.  Оператор DB транслирует непосредственно в памяти значение байта. Оператор DW транслирует непосредственно в памяти значение слова. 

       Примеры:

DB 1,2, 3, 4, "ЭТО ПРИМЕР”

DВ 'ЭТО КАВЫЧКИ: "'

DB "ЭТО АПОСТРОф: '"

DW 1000, 2000, 3000: ", BACH: "

•     допускаются все виды косвенной адресации с помощью регистров.

        Примеры:

ADD BX, 34[BP+2][S1-1]

POP [BP+DI] PUSH [SI]

•     поддерживаются все синонимы кодов операции.
Например:

 

LOOPZ 100

LOOPE 100

JA      200

JNBE  200

 

Для кодов операции WAIT и FWAIT ассемблера 8087 префиксы должны быть явно указаны. Например:

FWAIT FADD ST,ST(3)                  ; Эта строка ассемблирует префикс

      FWAIT FLD ТВУТЕ PTR [BX]; Эта строка не ассемблирует

Пример:

С>debug

-а200

08В4:0200      хог ах, ах

08В4:0202   mov [bx],ax

08В4:0204      ret

08В4:0205

 

С(Compare)

Команда сравнения

функция: Команда сравнивает содержимое двух блоков памяти, формат:

С диапазон адрес

Комментарий: Команда сравнивает содержимое двух блоков памяти; пределы сравнения определяет параметр диапазон. Если команда обнаружит два неравные друг другу байта, то на экран выводится сообщение:

адрес 1 байт1 6айт2 адрес2

где первая часть (адрес1, байт1) определяет место и содержимое рассогласованной ячейки (в области памяти определенной параметром диапазон), вторая часть (байт2, адрес2) относится к байту указанному параметром адрес.

Если начальный адрес параметра диапазон содержит только сдвиг, то команда С принимает по умолчанию сегмент содержащийся в регистре DS. Конечный адрес диапазона следует вводить только вместе со значением сдвига.

Пример: С 100 L20 200

32 байта памяти, начиная с адреса DS:100 сравниваются с 32-мя байтами, заданными по адресу DS:200. L20 это диапазон.

 

D(Dump)

Команда вывода на экран содержимого памяти

функция: Команда выводит на экран содержимое определенной области памяти.

формат: D[адрес]

или

D [диапазон]

 Примечания: Картина содержимого памяти состоит из двух частей:

1. Шестнадцатеричная часть. Каждый байт выводится в виде шестнадцатеричного числа.

2. Часть ASCII. Байты выводятся в виде символов ASCII. Невыводимые символы (ASCII 0 до 31 и 127 до 255) принимают вид точки '. '.

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

Если ширина экрана равна 80 символам в строке, то каждая строка экрана содержит адрес (являющийся кратностью 16), за которым следует 16 байтов с данными. Между 8-мым и 9-тым байтами находится дефис.

Замечание: Если начальный адрес выводимой памяти не является кратностью 8 (или 16), то в первой строке будет меньше чем 8 (16) байтов. В этом случае следующая строка будет начинаться с адреса кратного 8 (16).

Команда Dump существует в двух вариантах:

Вариант 1

Этот вариант следует применять для вывода 40Н байтов памяти (40 символов в строке) или 80Н байтов памяти (80 символов в строке),

D адрес

или

D

Начиная с указанного адреса, содержимое памяти выводится на экран. Если параметр адрес в команде отсутствует, то принимается, что начальным адресом является адрес ячейки следующей за последней ячейкой выведенной последней командой D. Т. о. возможен последовательный вывод на экран областей памяти по 40 или 80 байт путем многократного ввода команды D без параметров.

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

Замечание: Если параметр команды D содержит только относительный адрес начала в сегменте, то команда использует сегмен, определенный регистром DS.

Вариант 2

Команда выводит на экран содержимое памяти из указанного диапазона. Пример:

D диапазон

Замечание: Если команда D содержит только относительный адрес начала в сегменте, то она использует сегмент определенный регистром DS. Конечный адрес следует вводить только как относительный.

Пример:   после команды

      D cs:100 10C

на экране шириной 40 символов в строке появляются результаты:

 

04ВА:0100 42 45 52 54 41 20 54 00 BERTA Т.

             04ВА:0108 80 42 4F 52 47                 BORG

 

E(Enter)

Команда ввода

 

функция: Команда Enter работает в двух режимах:

• Начиная с указанного адреса, записывает в память приведенные в списке значения (см. вариант 1).

• Выводит на экран указанные байты и предоставляет возможность их модификации в последовательном режиме (см. вариант 2).

формат: Е адрес[список]

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

Существуют два варианта команды Е:

Вариант 1

Е адрес список

Начиная с указанного адреса команда загружает в память указанный список

Пример: команда

Е ds:100 F3 "xyz"8D

загружает в область памяти, ограниченную адресами PS:100 - DS:104, 5 элементов указанного списка.

Вариант 2

Е адрес

Команда выводит на экран адрес и содержимое очередной ячейки памяти, и ждет ввода.

Новое содержание байта данных вводится в виде одной или двух шестнадцатеричных цифр. Затем можно выполнить следующие действия:

1. Нажать клавишу пробел — переход к следующей ячейке памяти и вывод ее содержимого на экран. Теперь можно ввести новое содержание этой ячейки.

Переход к следующей ячейке памяти (текущая остается без изменений) — снова нажать пробел.

 

2. Нажать тире '-' - возврат к предыдущей ячейке. В новой строке на экран выводится адрес этой ячейки и ее содержимое. Теперь можно ввести новое содержание этой ячейки.

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

3. Клавиша Enter завершает работу команды Е.

Замечание: В зависимости от ширины экрана (40 или 80 символов в строке) на экран в одной строке выводится содержимое 4-ех или 8-ми байтов памяти.

Пример: Команда

E cs:100

выведет на экран следующую строку:

04ВА:0100 ЕВ._

Теперь изменим содержимое ячейки памяти 04ВА:100 с ЕВН на 41Н набрав на клавиатуре 41:

04ВА:0100 ЕВ. 41_

Нажав трижды пробел выведем на экран содержимое трех очередных ячеек памяти:

04ВА.0100 EВ. 41 10. 00. ВС. _

Следующая команда изменяет содержимое текущей ячейки памяти с ВСН на 42Н:

04ВА:0100  КВ.41 10. 00. ВС. 42_

Допустим теперь, что необходимо возвратиться и изменить 10H на 6FH. После двухкратного нажатия тире и выполнения замены экран будет выглядеть следующим образом:

04ВА:0100 ЕВ. 41 10. 00. ВС. 42-04ВА:0102 00.-

04ВА:0101 10. 6F_

Нажав клавишу Enter, завершаем работу команды Е. На экране появляется подсказка программы DEBUG.

F (FILL)

Команда заполнения памяти

функция; Команда заполняет область памяти определенную параметром диапазон значениями, приведенными в параметре список.

формат: F диапазон список

Комментарий: Если параметр список содержит меньше элементов, чем это указано параметром диапазон, то команда F будет выполняться многократно, пока не заполнится указанная область памяти. Если параметр список содержит больше элементов, чем помещается в указанной области памяти, то все лишние элементы игнорируются.

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

Пример: F 4ВА:100 L 5 F3 "XYZ" 8D

Заполняется память с адреса 04ВА:100 по адрес 04ВА:104 указанными пятью байтами, следует помнить о том, что в память записываются коды символов ASCII, т.е. ячейки 100-104 Содержат F3 58 59 5А 8D.

 

G(Go)

Команда выполнения программы

функция: Команда выполняет загруженную программу.

Выполнение программы прекращается после обнаружения команды, адрес которой указан в команде Go (точка останова). На экран выводятся: содержимое регистров, Флагов и очередная команда.

формат: G[=адрес] [адрес 1 [адрес n...) ]

Комментарий: Ecли команда Go не содержит параметра [:адрес] (символ равенства '=' обязателен), то программа начинает выполняться с адреса указанного в регистрах CS и IP. в противном случае программа будет выполняться с адреса CS:=адрес.

Команда Go работает в двух вариантах:

Вариант 1

Этот вариант применяется для выполнения программ, не содержащих точек останова, формат команды:

G [:адрес]

Такой вид команды Go удобно применять для многократного выполнения программы с различным набором входных параметров. (См. описание команды Name). Применяя команду G без параметра адрес, следует убедиться в том, что регистры CS и IP содержат правильные адреса.

Вариант 2

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

G [;адрес] адрес [адрес... ]

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

Команда G допускает определение до 1.0 точек останова в программе, приведенных в произвольном порядке. Применение команды Go это очень удобное средство тестирования программ, особенно в случае сложных, разветвляющихся программ.

В точках останова программа DEBUG заменяет коды операция кодом прерывания (СС Hex), следовательно, если программа дойдет до такой точки, то она будет прервана, на экран выводится содержимое регистров и Флагов. Затем восстанавливается правильное содержимое ячеек содержащих коды прерываний, т. е. в эти ячейки загружаются коды операций. Если операция в точке останова не выполнилась, то правильный код операции не восстанавливается.

Замечания:

1. Появление на экране сообщения "Program terminated normal1у" говорит о том, что программа выполнилась до конца. В таком случае для повторного выполнения этой программы следует ее еще раз загрузить.

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

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

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

5. Нельзя указать точки останова в программах записанных в постоянном запоминающем устройстве (ROM BIOS ИЛИ ROM BASIC).

Пример:

Команда G 102 IEF 208

запускает программу с текущей операции, адрес которой находится в CS:IF. Параметр =адрес вообще не используется.

В программе определены три точки останова. Допустим, что программа останавливается во второй, перед выполнением команды находящейся в ячейке CS:1EF. Восстанавливаются правильные коды операций и точки останова удаляются. На экран выводится соответствующее сообщение, и команда Go завершает работу.

 

H(Hexarithmetic)

Команда шестнадцатиричной арифметики

 

Функция: Команда складывает два шестнадцатиричные числа и затем вычитает второе число из первого.

Полученные результаты: сумма и разность выводятся на экран в одной строке.

формат: Н Число1 число2

 

Пример: Н 0F 08

17 07

Команда выполняет сложение и вычитание чисел 000F и 0008 их сумма равна 0017, разность 0007.

 

I(Input)

Команда ввода

 

функция: Команда считывает один байт из указанного порта и выводит его на экран (в шестнадцатеричном виде).

формат: Iадрес_порта

Пример: I 2F8

    6В

Из порта с адресом 02F8 считывается один байт (6ВН). Затем прочитанный байт выводиться на экран.

 

L(Load)

Команда загрузки

Функция: Команда загружает в память указанный файл или сектор;

формат: L [адрес [накопитель сектор1 сектор2]]

Комментарий: Одна команда Load может загрузить до 80 секторов (шестнадцатирично)

Замечание: Если во время чтения с диска появилась ошибка, то программа DEBUG выводит на  экран соответствующее сообщение. После нажатия Функциональной клавиши F3 на экране снова появится строка команды LOAD; затем нужно нажать клавишу Enter.

Существуют два варианта команды LOAD:

Вариант 1

Данные, прочитанные с диска, установленного в указанном накопителе, загружаются, начиная с указанного адреса. Пример:

L адрес накопитель сектор1 сектор2

Параметр сектор1 определяет начальный адрес чтения; параметр сектор2 - число считываемых секторов.

Замечание: Если в качестве начального адреса выступает относительный адрес в сегменте, то команда L использует сегмент, указанный регистром CS.

Например, команда загрузки может выглядеть следующим образом:

L 4BA:100 1 0F 6D

С дискеты установленной в накопителе В данные загружаются в память, начиная с адреса 4ВА:100. Данная команда перепишет 6DH (109) очередных секторов начиная с сектора 0FH (15), т.е. с 16-того сектора на дискете.

Замечание: Этого варианта команды Load нельзя применять в случае, когда указанный накопитель подключен к сети.

 

M(Move)

Команда передачи содержимого памяти

функция: Команда передает содержимое памяти из области определенной параметром диапазон в область, начало которой определяется параметром адрес

формат: М диапазон адрес

Комментарий: Передача, в которой область считываемых данных частично совпадает с областью записи данных, выполняется правильно. Исходные данные не теряются и не изменяются во время передачи. Замечания:

1. Если в параметре диапазон в качестве начального адреса выступает относительный адрес в сегменте, то команда М относится к сегменту указанному регистром DS. конечный адрес также должен представлять собой относительный адрес в этом
сегменте.

2. Если параметр адрес является относительным адресом начала, то команда М относится к сегменту указанному регистром DS.

Пример: Команда

М CS:100 110 500

переписывает 17 байтов из области CS:100 - CS:110 в область начинающуюся с адреса DS:500.

 

N(Name)

Команда наименования файла

функция:    Команда Name выполняет две функции:

•     Для двух первых файлов образует два контрольных блока файлов (FCB), адреса которых CS:5C и CS:6C. Запуск программы DEBUG с указанием имени Файла образует лишь один контрольный блок файла FCB (адрес  блока CS:5C).

Контрольные блоки файлов используются командами Load и Write и, кроме того, передают имена Файлов тестирующим программам.

•     Все введенные имена файлов и все параметры запоминаются начиная с адреса CS:8l, в таком же виде, в каком они были введены (вместе с разделителями). Адрес CS:80 содержит число введенных символов. Регистр АХ указывает
правильность определений накопителей, находящихся в двух первых описаниях Файлов.

формат: N [d:] [дорожка] имя_файла. [тип]

Примечание: Если программа DEBUG была загружена без указания имени файла, то перед загрузкой Файла командой L необходимо употребить команду Name.

Пример:

DEBUG

-N prog

-L

-

 

В следующем примере определяются файлы и другие параметры, применяемые в загруженной программе:

DEBUG prog

-N file1 file2

Программа DEBUG загружает программу prog с адреса CS:100 и записывает контрольный блок файла в ячейку с адресом CS:5C. затем команда Name образует контрольные блоки файлов filel и file2, адреса которых соответственно CS:5C и CS:6C. Контрольный блок файла prog записывается заново. Область хранения параметров (с адреса CS:8l) содержит все символы, находящиеся за кодом команды N, включая разделители; в ячейке CS:80 записано число  этих символов (0С Hex).

 

 

0(Output)

Команда вывода

функция: Команда передает байт в указанный выходной порт,

формат: О адрес_порта байт

Пример: Нижеприведенная команда передает значение 4F в выходной порт F8H:

О 2F8 4F

P(Proceed)

Команда возобновления

Функция: применение команды Р во время выполнения подпрограммы, оператора цикла, прерывания и оператора повторения строки прерывает их выполнение при следующей инструкции.

Формат: P[=адрес][значение]

Комментарий: Если во время выполнения подпрограммы, оператора цикла, прерывания и оператора повторения строки, запрашивается команда Proceed, то завершается выполнение текущего оператора и управление передается следующей инструкции, синтаксис команды Proceed такой же, как команды Trace. P0 определяется точно так же, как и ТО.

Пример: Если выполняется следующая программа:

0100 CALL 1000

0103  JC     2000

.

.

.

1000 XOR  АХ, АХ

.

.

.

1ХХХ RET

и CS: IP содержит адрес оператора CALL 1000, то нажатие Р вызывает выполнение подпрограммы и передает управление программе DEBUG при инструкции JC

 

 

Q (Quit)

Завершение программы DEBUG

функция: Команда завершает программу DEBUG.

формат: Q

Комментарий: Поскольку после выполнения команды Quit рабочий файл не сохраняется в памяти, необходимо командой Write записать этот файл на диск.

Команда Q передает управление командному процессору, который выводит на экран обычную системную подсказку.

Пример:

-Q

А>

 

R(Register)

Команда операции с регистрами

функция: Команда Register выполняет три функции:

• Выводит на экран содержимое указанного регистра (в шестнадцатеричном виде) и предоставляет возможность его модификации.

• Выводит на экран содержимое всех регистров (в шестнадцатиричном виде), содержимое флагов и очередную команду.

• Выводит на экран и предоставляет возможность изменит


Поделиться с друзьями:

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.285 с.