Руководство пользователя UBUG (справочное руководство по отладчику)
для контроллера движения Radysis
Монитор
UBUG представляет собой отдельный программный пакет, предназначенный для
оценки и отладки печатной платы контроллера движения на базе UIMC 68EC030
. Он имеет возможность загружать и выполнять пользовательский код и включает в себя
ассемблер/дизассемблер, предназначенный для быстрой работы с программами. Монитор
работает в интерактивном командном режиме пользователя, на что указывает
приглашение UIC>. Командная строка, введенная после этого приглашения,
определяет, какая операция будет выполнена.
УБУГ МОНИТОР
ОГЛАВЛЕНИЕ
1. ОБЩАЯ ИНФОРМАЦИЯ
1.1 Описание УБУГ………………….. 3
2. НАБОР КОМАНД UBUG
2.1 Введение………………………… 3
2.2 Автообнуление (an)……………………… 4
2.3 Ассемблер/Дизассемблер (как) ………….. 4
2.4 Блок заполнения памяти (бф)…………….. 6
2.5 Блок памяти Ход (bm)…………….. 6
2.6 Точка останова (br)…………………….. 6
2.7 Поиск блока (бс)……………………. 7
2.8 Встречный тест (кт)………………. 7
2.9 Тест DAC16, ADC8 (dac16t)……………. 7
2.10 Преобразование данных (постоянный ток)…………………. 8
2.11 Идти (идти)……………………………….. 8
2.12 Помощь (?/он/помощь)…………………….. 8
2.13 Доступ к IO (io)……………….. 8
2.14 Загрузка S-записей (lo)………………….. 9
2.15 Дисплей памяти (md)………………….. 9
2.16 Изменение памяти (мм)…………………… 10
2.17 Тест памяти (мт)………………….. 10
2.18 Отображение регистра (rd)………………… 10
2.19 Изменение регистра (rm)…………………. 11
2.20 Определение символа (sd)…………………… 11
2.21 Тест – Диагностика (тест)………………. 11
2.22 Прозрачный режим™………………… 12
2.23 След (тр)………………………….. 12
3 ИСПОЛЬЗОВАНИЕ ОДНОЛИНЕЙНОГО АССЕМБЛЕРА/ДИСАССЕБЛЕРА
3.1 Введение………………………. 12
3.2 Ввод и изменение исходной программы…. 12
3.3 Ввод исходной строки……………….. 13
3.4 Ввод смены инструмента потока ……… 14
3.5 Ввод списков регистров ……………… 15
3.6 Ввод непосредственных данных с плавающей запятой … 16
3.7 Ввод инструкций MMU ……………. 17
1. ОБЩАЯ ИНФОРМАЦИЯ
1.1 ОПИСАНИЕ УБУГ
Монитор
UBUG представляет собой отдельный программный пакет, предназначенный для
оценки и отладки печатной платы контроллера движения на базе UIMC 68EC030
. Он имеет возможность загружать и выполнять пользовательский код и включает в себя
ассемблер/дизассемблер, предназначенный для быстрой работы с программами. Монитор
работает в интерактивном командном режиме пользователя, на что указывает
приглашение UIC>. Командная строка, введенная после этого приглашения,
определяет, какая операция будет выполнена.
2. НАБОР КОМАНД UBUG
2.1 ВВЕДЕНИЕ
В этом
разделе объясняются команды монитора UBUG и связанный с ними синтаксис.
Таблица 2.1 суммирует доступные команды и показывает раздел, в котором
команда объясняется более подробно.
ТАБЛИЦА 2.1 КОМАНДЫ МОНИТОРА UBUG |
||
Команда/мнемоника |
Имя |
Раздел |
ан |
Авто обнуление |
2.2 |
как |
Ассемблер/Дизассемблер |
2.3 |
бойфренд |
Блок заполнения памяти |
2,4 |
бм |
Блок памяти |
2,5 |
бр |
Точка останова |
2,6 |
бс |
Поиск блока памяти |
2,7 |
кт |
Счетчик испытаний |
2,8 |
dac16t |
ЦАП16, тест АЦП8 |
2,9 |
Округ Колумбия |
Конверсия данных |
2.10. |
идти |
Идти |
2.11 |
?/он/помощь |
Помощь |
2.12 |
ио |
Доступ к вводу-выводу |
2.13 |
вот |
Загрузить S-записи |
2.14 |
Мэриленд |
Дисплей памяти |
2,15 |
мм |
Модификация памяти |
2.16 |
метр |
Тест памяти |
2.17 |
рд |
Зарегистрировать дисплей |
2.18 |
г.м. |
Зарегистрировать Изменить |
2.19 |
сд |
Символ Определить |
2.20. |
тест |
Тест – Диагностика |
2.21 |
тм |
Прозрачный режим |
2,22 |
тр |
След |
2,23 |
Командная строка состоит из:
<COMMAND IDENTIFIER>: указывает, какая команда (например, br )
<SP>: хотя бы один пробел
СПИСОК ОПЦИИ: опция может использовать разделитель (-) с опциями, если
опции не по умолчанию разрешены и используются. (например,
[<-r>])
<SP>: хотя бы один пробел
АРГУМЕНТЫ: любые требуемые аргументы, указанные командой, разделенные
запятыми/пробелами, как показано в
описании команды. (например, <АДРЕС,АДРЕС>)
где «<>» заключает символы, которые требуются в командной строке,
а «[<>]» заключает символы, которые являются необязательными в командной
строке. Обратите внимание, что в приведенных выше примерах параметр -r был примером необязательного
символа, а поля ADDR являются обязательными в
командной строке. Параметры, доступные для данной команды, полностью
описаны в разделе, описывающем эту команду. Монитор
не чувствителен к регистру при вводе с терминала. Весь ввод с
терминала преобразуется в нижний регистр перед внутренним использованием (кроме
текста, следующего за текстовым разделителем; см. ТЕКСТ ниже). Аргументы данной
команды описываются с помощью следующих символов:
<EXP>: Выражение может быть любым числовым выражением, которое можно
вычислить, используя только арифметические операторы + и –.
Бывший. 1000
Бывший. 1+3
Примечание. Цифрам может предшествовать базовое обозначение, если значение по умолчанию
(шестнадцатеричное) нежелательно. Эти обозначения показаны ниже в Таблице
2.2:
ТАБЛИЦА 2.2 БАЗОВЫЕ ОБОЗНАЧЕНИЯ
База |
Обозначение |
шестнадцатеричный |
$ |
Десятичная дробь |
& |
восьмеричный |
@ |
Бинарный |
% |
<ADDR>: Поле адреса представляет собой любое допустимое выражение. Примечание. Это
поле адреса не следует путать с адресами источника и
назначения, требуемыми при использовании ассемблера/дизассемблера.
<COUNT>: Поле счетчика — это любое допустимое выражение, которому предшествует COUNTDEL (разделитель счетчика, т. е. «:»)
Бывший. :100
<RANGE>: диапазон ячеек памяти, обозначаемый ADDR,ADDR или ADDR:COUNT.
Бывший. 0,100
Бывший. 0:50
<TEXT>: строка ASCII длиной до 255 символов, перед которой ставится TEXTDEL (текстовый разделитель, т. е. «;»)
Бывший. ;Образец текста
<SIZE>: может быть:
байт (8 бит) ====> -b
слово (16 бит) ====> -w
длинный (32 бита) ====> -l
**Примечание: ====> означает «представляется» или «возвращает».
<DATA>: данные могут быть любым допустимым выражением.
<MASK>: Маска может быть любым выражением. После оценки
выражения 0 представляют все равно. Маска иногда
используется для квалификации
<ДАННЫЕ>. См. раздел 2.6 для примера использования.
2.2 АВТОМАТИЧЕСКОЕ ОБНУЛЕНИЕ
<ОСЬ>
Функция автоматического обнуления выполняет обнуление смещения нуля 16-битного ЦАП указанной оси.
Примеры использования:
1 (нулевая ось один)
2.3 МОНТАЖНИК/РАЗБОРЩИК
как <АДРЕС>
Ассемблер/дизассемблер вызывается по указанному адресу и
дизассемблирует объектный код в этом месте. Использование
ассемблера/дизассемблера полностью описано в главе 3.
2.4 ЗАПОЛНЕНИЕ БЛОКА ПАМЯТИ
bf [<РАЗМЕР>] <ДИАПАЗОН> <ДАННЫЕ>
Команда заполнения блока заполняет указанный диапазон памяти
перечисленными данными. Если параметр размера не указан, по умолчанию используется размер
слова. Если кратное <SIZE> <DATA> не
помещается равномерно в <RANGE>, команда оставляет последнее частичное
слово или длинное слово без изменений.
Примеры использования:
бф 100,110 и 10
100:8 и 10
бф -ш 100:8 а
бф -л 100,110 а000а
**Примечание. Все эти примеры выполняют одно и то же заполнение памяти.
(т.е. $00000100: $000a $000a $000a $000a $000a $000a
$0000010C: $000a $000a $0000 $0000 $0000 $0000 )
2.5 ПЕРЕМЕЩЕНИЕ БЛОКА ПАМЯТИ
bm [<РАЗМЕР>] <ДИАПАЗОН> <АДРЕС>
Команда перемещения блока позволяет пользователю копировать сегменты памяти в
разные места в памяти. Выполнение этой команды не
уничтожит исходную версию, если местоположение, перемещенное в <ADDR>,
не находится в диапазоне <RANGE> копируемого кода. Параметр размера
доступен только в том случае, если диапазон описан как
<ADDR>:<COUNT> . Если диапазон описывается в
режиме <ADDR>,<ADDR>, размер по умолчанию равен байту. Поле размера
представляет передачу размера, которая используется для выполнения
перемещения памяти.
Примеры использования:
бм 1000,2000 10000
бм 1000:800 10000
bm -l 1000:400 10000 **Примечание. Этот вариант выполняется быстрее всего.
**Примечание. Все эти примеры выполняют одно и то же перемещение памяти.
2.6 ТОЧКА РАЗЛОМА
бр
br <АДРЕС>
br <АДРЕС> <:COUNT>
br -r [<АДРЕС>]
бр-р
Команда точки останова позволяет пользователю перечислять, вставлять или удалять
точки останова в целевом коде. Это позволяет пользователю остановить выполнение
программы и вернуться в среду монитора, когда указанный
<ADDR> предварительно выбран. Различные варианты использования этой команды
приведены ниже:
br список всех известных точек останова
br <ADDR> вставить точку останова по этому адресу
br <ADDR> <:COUNT> вставить точку останова по этому адресу, однако вернуться в среду монитора можно только после того, как
точка останова встретится <COUNT> количество раз.
br -r [<ADDR>] удалить точку останова по этому адресу
br -r удалить все точки останова
2.7 ПОИСК БЛОКА
bs [<РАЗМЕР>] <ДИАПАЗОН> <ДАННЫЕ>
bs [<РАЗМЕР>] <ДИАПАЗОН> <ДАННЫЕ> <МАСКА>
Команда поиска блока позволяет пользователю найти определенный шаблон
в памяти. Область поиска может выходить за пределы указанного <RANGE>
, если шаблон запускается в пределах <RANGE>. Существует два
основных типа поиска:
bs [<SIZE>] <RANGE> <DATA> ищет в диапазоне точное совпадение с <DATA>.
bs [<SIZE>] <RANGE> <DATA> <MASK> ищет
в диапазоне любой шаблон, соответствующий <DATA>
, где в двоичном представлении маски есть «1»
.
Бывший. С памятью по адресу $100, как показано ниже, выполнение
«BS 100 118 $1234 $ffbf» ====>
Начальный адрес: $00000100
Конечный адрес: $00000117
Найдено по адресу: $00000110:$1234.
Найдено по адресу: $00000114:$1274.
Память для примера выше:
$00000100: $0000 $0000 $0000 $0000 $0000 $0000
$0000010C: $0000 $0000 $1234 $0000 $1274 $0000
2.8 СЧЕТЧИК-ТЕСТ
кт
Команда проверки счетчика выполняет диагностическую проверку счетчиков 4 осей, и возвращается информация о прохождении/не прохождении.
2.9 ТЕСТ DAC16, DAC8
dac16t <ОСЬ №>
Команда dac16t выполняет диагностический тест 16-разрядного ЦАП и
8-разрядного АЦП для оси, указанной с помощью возможности циклического диагностирования
UIMC. Возвращается информация о прохождении/не прохождении.
2.10 ПРЕОБРАЗОВАНИЕ ДАННЫХ
постоянный ток <EXP>
Команда преобразования данных позволяет пользователю оценить входное
выражение и определить его шестнадцатеричный и десятичный эквивалент.
Примеры использования:
**ПРИМЕЧАНИЕ. Следующие символы были определены ранее, чтобы
для использования в приведенных ниже примерах:
Пример 1. использует /start= 0
Пример 2. использует /start= — $18
Пример 3. использует /finish= 10000 и /start=10000$
(см. раздел 2.17)
Бывший. 1 dc $17+/начало ====> $17 = &23
Бывший. 2 dc $17+/start ====> UNSIGNED: $FFFFFFFF =
&4294967295 SIGNED
: -$1 = -&1
Бывший. 3 dc $/окончание-/начало ====> $10000 = 65536
2.11 ИДТИ [<АДРЕС>]
Команда go позволяет пользователю выполнять целевые программы. Если
адрес не указан в командной строке,
используется текущее значение ПК. Это значение либо:
1.) инициализированное значение ПК, если целевой код не был запущен.
2.) последнее значение ПК, используемое при выполнении целевого кода.
3.) значение, помещенное в регистр ПК с помощью команды RM (изменение регистра, см. раздел 2.16).
Если адрес указан в командной строке, то ПК изменяется
на указанный адрес. и выполнение начинается с этого адреса. В
обоих случаях состояние регистра, в котором инициализируется микропроцессор
, перед выполнением целевого кода в этом месте можно просмотреть,
выполнив команду rd (см. раздел 2.15).
2.12 ПОМОЩЬ
? [<символ>]
он [<символ>]
помощь [<символ>]
Команда help позволяет пользователю просмотреть список допустимых команд
и связанный с ними синтаксис.
Также можно просмотреть символы, используемые для описания использования команды.
Примеры использования:
?, он или помощь ====> вернуть полный список всех команд с использованием
? as ====> AS <адрес> help addr ====> <номер>
число ====> <hex> || <дек> || <октябрь> || <бин> || <символ>
** Примечание: <число> также может быть выражением
2.13 ДОСТУП В/В
ио
Команда доступа IO позволяет пользователю получить доступ к различным параметрам
контроллера движения UIMC. После выдачи команды IO пользователю будет
представлен следующий список вариантов:
Меню интерфейса ввода/вывода:
i — Просмотр входов (отладчик отображает текущее состояние цифровых входов)
o – Изменить выходные данные (отладчик позволяет пользователю изменять выходные данные)
c – Изменить счетчики (отладчик отображает текущее состояние счетчиков и позволяет пользователю изменять их содержимое)
r — Modify Relays (отладчик позволяет пользователю изменять состояние реле)
x — изменить 16-битные ЦАП (отладчик позволяет пользователю изменять 16-битные выходы ЦАП)
y — изменение 8-битных ЦАП (отладчик позволяет пользователю изменять 8-битные
выходы ЦАП) z — просмотр 8-битных АЦП (отладчик отображает текущее состояние
АЦП)
После выбора одного из вышеперечисленных пользователю будет выведен соответствующий запрос.
2.14 ЗАГРУЗИТЬ S-ЗАПИСЬ
lo [<порт>] [<СМЕЩЕНИЕ>] ;<ТЕКСТ>
Команда load позволяет пользователю загружать S-Records из хост-
системы. Если в командной строке присутствует смещение, то целевой
адрес является смещением, добавленным к адресу, определенному S-записью.
В обычном режиме команда отправляет <TEXT> за «;» к
ХОЗЯИНУ. Затем он ожидает, что HOST начнет отправлять S-Records на
терминал. Если используется опция 't' no ; необходим, и отладчик
ожидает, что терминал начнет посылать S-Record.
Примеры использования:
вот ;кошка ubug.mx
**Примечание. Команда «cat» — это команда UNIX, которая объединяет
и затем печатает указанные файлы, используя стандартный вывод.
Это эффективно отправляет содержимое файла на терминал. Затем монитор
загружает содержимое S-Records в файл по
адресам, определенным S-Records через хост-порт.
.
lo a0000 ;cat ubug.mx
**Примечание. Эта команда загружает тот же файл S-Record, что и в
первом примере, за исключением того, что он загружается в память по адресу, определенному S-Record + $a0000 (т. е.
добавляется
смещение ).
много
**Примечание. Эта команда использует «t» для терминала порта загрузки S-Record.
2.15 ОТОБРАЖЕНИЕ ПАМЯТИ
md [<РАЗМЕР>] <адрес>
md [<РАЗМЕР>] <ДИАПАЗОН>
md -di <адрес>
Команда отображения памяти позволяет пользователю просматривать память. Размер,
используемый для отображения памяти, определяется опцией размера. Если никакая
опция не используется, по умолчанию используется слово. Если диапазон превышает
возможности экрана, вывод на экран приостанавливается до тех пор, пока не будет нажата любая клавиша.
Примеры использования:
мд-л 100,110
мд-л 100:4
мд 100:8
мд-ди 100
**Примечание. Эта команда начинает дизассемблировать память в
это место.
2.16 ИЗМЕНЕНИЕ ПАМЯТИ
мм [<SIZE>] [<verify>] <ADDR>
мм <УПРАВЛЕНИЕ>
Команда изменения памяти позволяет пользователю просматривать и изменять память.
Размер, используемый для отображения памяти, определяется опцией размера.
Размер по умолчанию — word. Опция только для записи определяется
опцией проверки. По умолчанию используется чтение/запись, а «n» используется
только для записи. Память отображается, начиная с указанного адреса, за которым следует
'?' быстрый. Пользователь может ввести <exp>, чтобы заменить это
значение памяти, или нажать клавишу возврата, чтобы просмотреть следующее значение памяти. Чтобы выйти из
команды, введите «. <cr>” (период <возврат каретки>). Другие
доступные символы <CONTROL> перечислены ниже в таблице 2.3:
ТАБЛИЦА 2.3 УПРАВЛЯЮЩИЕ СИМВОЛЫ
Обозначение управляющего символа
– <EXP> резервное копирование <EXP> ячеек памяти
+ <EXP> вперед ” ” “
= <ЧИСЛО> не переходить Не переходить к следующей ячейке памяти
Примеры использования:
мм -l 100 ====> $00000100 $00000000 ?
мм 100 ====> $00000100 $0000 ?
(т.е. использует размер «слова» по умолчанию)
мм n 100 ====> $00000100 ?
(т.е. не читается с места)
2.17 ТЕСТ ПАМЯТИ
мт <начало> <окончание>
Тест памяти выполняет побитовый тест памяти в указанном диапазоне ОЗУ, и возвращается информация о прохождении/не прохождении.
2.18 РЕГИСТРАЦИЯ ДИСПЛЕЙ
рд
rd -f Примечание: отображаются регистры сопроцессора, если они присутствуют
Команда register display позволяет пользователю просматривать содержимое регистров mpu/fpu.
2.19 РЕГИСТРАЦИЯ ИЗМЕНЕНИЕ
rm [<РЕГИСТР> [<Новое значение>]]
Команда RM позволяет пользователю изменять содержимое регистров микропроцессора.
Примеры использования:
Чтобы изменить значение ПК:
rm pc 3000 ====> изменяет значение ПК на 3000
или
rm ====> Какой регистр?
ПК ====> ПК=00004000НОВОЕ ЗНАЧЕНИЕ?
3000 ====> изменяет значение ПК на 3000
или
rm pc ====> PC=00004000НОВОЕ ЗНАЧЕНИЕ?
3000 ====> изменяет значение ПК на 3000
2.20 ОПРЕДЕЛЕНИЕ СИМВОЛА
sd [<SYMBOL> <EXP>]
sd -r <СИМВОЛ>
Команда определения символа позволяет пользователю определять символы. Затем эти
символы можно использовать в выражениях. Использование символа в
выражении приводит к замене символа выражением
, которое использовалось для его определения. После определения символ доступен
до тех пор, пока монитор не будет сброшен. Если символ определен несколько раз,
монитор использует первое определение.
Примеры использования:
sd ====> перечисляет, какие символы уже известны
sd /reset 10000 ====> определяет /reset равным $10000 всякий раз, когда он
используется в выражении. sd /start -$18 ====> определяет
/start как -$18 всякий раз, когда он используется в выражении. sd -r
/start ====> удаляет первое определение /start из
списка
**ПРИМЕЧАНИЕ. Символы, определенные с помощью команды sd,
можно использовать в любых выражениях. Примером этого является использование
символа, определенного для ввода исходного кода в
ассемблере (например, bsr /startsub после определения /startsub).
2.21 ТЕСТ – ДИАГНОСТИКА
тест [<ЦИКЛ #>]
Команда test инициирует серию диагностических тестов, состоящих из
функции автоматического обнуления, теста счетчика, теста RAM и теста DAC16/ADC8, и
возвращает информацию о прохождении/непрохождении. Количество
выполнений диагностического теста определяется указанным номером цикла. Если цикл # не
указан, команда повторяется бесконечно.
2.22 ПРОЗРАЧНЫЙ РЕЖИМ
тм
Команда Transparent Mode переводит пользователя в прозрачный режим,
устанавливая программное соединение между HOST и TERMINAL.
Прозрачный режим вытесняет нормальную связь между ТЕРМИНАЛОМ и
отладчиком. В этом режиме весь ввод с клавиатуры передается непосредственно
на HOST. Ответы HOST, в свою очередь, возвращаются на экран.
Нажатие CTRL A возвращает пользователя в среду монитора.
2.23 СЛЕД
tr [<АДРЕС>][<COUNT>]
Команда trace позволяет пользователю отслеживать целевой код и
наблюдать за регистрами после выполнения командной строки. Если количество
указано, то микропроцессор выполняет <COUNT> количество
инструкций, прежде чем вернуться в среду монитора. Трассировка начинается
с <ADDR>, указанного в командной строке, или с текущего ПК,
если <ADDR> не указан. Инструкцию трассировки можно
продолжить, нажав клавишу возврата каретки. Для выхода символ «.» необходимо ввести.
Примеры использования:
tr ====> трассирует 1 инструкцию с текущего ПК
tr :10 ====> выполняет 10 инструкций после текущего ПК, затем возвращается в
среду монитора
tr 1000====> трассирует 1 инструкцию, начиная с $1000
3.0 ИСПОЛЬЗОВАНИЕ ОДНОЛИНЕЙНОГО АССЕМБЛЕРА/ДИСАССЕБЛЕРА
3.1 ВВЕДЕНИЕ
В состав монитора UBUG входит команда ассемблера/дизассемблера
, которую можно выполнить, как описано в предыдущем разделе. Этот
ассемблер/дизассемблер позволяет пользователю изменять целевой код. Каждая
исходная строка, введенная пользователем, заносится в память по
отображаемому адресу. Затем эта строка разбирается, чтобы пользователь мог
проверить фактический код, введенный в память. Если никаких изменений не требуется,
<CR> перемещает пользователя к следующему коду операции в памяти.
ВНИМАНИЕ: Этот ассемблер/дизассемблер не вставляет код в
исходную программу; он просто перезаписывает память в этом месте. В результате
исправление программы, требующее вставки кода, может быть выполнено
с помощью сначала кода перемещения блока, чтобы освободить область вставки, а затем
вставки в эту область.
3.2 ВВОД И ИЗМЕНЕНИЕ ИСХОДНОЙ ПРОГРАММЫ
Чтобы ввести и изменить исходный код, необходимо
выполнить команду as, как описано в разделе 2.2 (т. е. как <ADDR>). Это
помещает пользователя в подпрограмму ассемблера/дизассемблера.
Таблица 3.1 суммирует команды, которые могут быть выполнены в рамках этой процедуры:
ТАБЛИЦА 3.1 ПОДКОМАНДЫ АССЕМБЛЕРА/ДИСАССЕБЛЕРА
Обозначение команды
РЕЗЕРВНАЯ КОПИЯ <EXP> – <EXP>
ПРОДВИЖЕНИЕ <ОПЫТ> + <ОПЫТ>
ЗАКАНЧИВАТЬ .
ПОМОЩЬ ?
ШАГ ПРОШЛЫЙ возврат каретки
ОПРЕДЕЛИТЬ ПОСТОЯННУЮ DC #<EXP>
**Примечание. Выполнение '?' в то время как в ассемблере/дизассемблере возвращает
УСТРОЙСТВО, которое поддерживает ассемблер/дизассемблер.
3.3 ВХОД В ИСТОЧНУЮ ЛИНИЮ
После выполнения команды as <ADDR> ассемблер/дизассемблер
возвращается с дизассемблированием кода, найденного в этом месте. В
это время пользователь может выполнить команду ассемблера, показанную в разделе 3.2,
или ввести исходную строку, которая должна заменить отображаемый исходный
код.
При вводе источника используются стандартные эффективные режимы адресации MOTOROLA . Эти режимы приведены ниже в таблице 3.2:
ТАБЛИЦА 3.2 ДЕЙСТВУЮЩИЕ РЕЖИМЫ АДРЕСАЦИИ АССЕМБЛЕРОВ/ДИСАССЕБЛЕРОВ
Синтаксис эффективного режима адресации
Зарегистрируйтесь в Direct Dn
Прямой регистр адресов An
Непрямой регистр адреса (An)
Непрямой регистр адреса с постинкрементом (An)+
Косвенный регистр адреса с преддекрементом -(An)
Непрямой регистр адреса со смещением (d16, An)
Косвенный регистр адреса с индексом (d8) (d8,An,Xn.SIZE*SCALE)
Непрямой регистр адреса с индексом (базовый дисплей) (bd,An,Xn.SIZE*SCALE)
Косвенная память с постиндексацией ([bd,An],Xn.SIZE*SCALE,od)
Непрямая память Предварительно индексированная ([bd,An,Xn.SIZE*SCALE],od)
PC непрямой со смещением (d16,PC)
Непрямой ПК с индексом (d8) (d8,PC,Xn.SIZE*SCALE)
Непрямой ПК с индексом (bd) (bd,PC,Xn.SIZE*SCALE)
Непрямая память ПК Постиндексированная ([bd,PC],Xn.SIZE*SCALE,od)
Непрямая память ПК Предварительно индексированная
([bd,PC,Xn.SIZE*SCALE],od) Абсолютный короткий адрес
(xxx).W
Абсолютный длинный адрес (xxx).L
Абсолютный адрес xxx оптимизирует (bwl)
Немедленные данные #xxx
При использовании индексированных режимов POST или PRE поля могут быть пропущены с помощью запятой. Пример показан ниже:
Бывший. andi #12,([,],,) ====> andi.b #$12,([$0,ZA0],ZD0.W*1,$0)
Другие примеры исходных строк показаны ниже:
Бывший. ori.l #12,(a1) ====> ori.l #$12,(a1)
Бывший. addq #1,(a1) ====> addq.b #$1,(a1)
Монитор имеет лишь ограниченные возможности скрининга ошибок. Примеры этого показаны ниже:
Бывший. jmp (123).w ====> jmp ($123).W
**Примечание. При выполнении возникает ошибка шины.
Бывший. бср (123) ====>
ОШИБКА 10: недопустимое изменение расхода ===> bsr (123)
Примечание. Инструкция bsr проверяет наличие недопустимых
изменения течения.
ПРИМЕЧАНИЕ. Поток не может быть изменен на нечетный адрес.
Верхние разряды данных НЕ усекаются при обнаружении несоответствия между размером и непосредственными данными, если была
специально введена опция размера в байтах или словах. Если указана опция длинного размера и данные
превышают этот диапазон, то верхние цифры ОБРЕЗАЮТСЯ.
Бывший. addi.b #12345678,(a1) ====>
ОШИБКА 11: немедленная ошибка параметра данных/размера ===> addi.b #12345678, (a1)
Бывший. addi.l #123456789,(a1) ====> addi.l #$23456789,(a1)
Бывший. addi #123456789,(a1) ====> addi.l #$23456789,(a1)
(по умолчанию длинный вариант)
усеченный—————^
Верхние цифры данных усекаются в командах, которые имеют ограниченное
поле в opword для хранения непосредственных данных. Примеры этого
показаны ниже.
Бывший. addq #10,(d0) =====> addq.b #$0,(d0)
Бывший. trap #10 =====> trap #$0 ввод по умолчанию в шестнадцатеричном формате
Бывший. ловушка #&10 =====> ловушка #$A
3.4 ВВОД ИНСТРУКЦИИ ПО ИЗМЕНЕНИЮ ПОТОКА
Поскольку ассемблер/дизассемблер не использует метки, все инструкции
, использующие <метку> в качестве эффективного режима адресации, должны иметь
определенное смещение. Если изначально неизвестно, место для этого
смещения должно быть зарезервировано, а затем пользователь должен вернуться и
ввести смещение. После определения смещения его
можно ввести, как показано в следующем примере:
Бывший. В этом примере расположение целевой инструкции ветки
известно как $100000, и BRA требуется в местоположении 0. После
выполнения «AS 0» и получения дизассемблированного кода, найденного в 0, пользователь
может ввести:
BRA 100000 или BRA (100000) или BRA.l #ffffe
Режим абсолютной адресации можно использовать, если известен целевой адрес ответвления (как в первых 2-х примерах) или
можно ввести смещение (последний пример) в режиме непосредственной адресации данных.
ПРЕДУПРЕЖДЕНИЕ. В некоторых случаях при использовании
изменение операторов потока. Эти случаи приведены ниже
с примерами.
Бывший.
1 Если используется вырожденный случай оператора ветвления (т. е.
попытка использовать короткую ветвь для перехода к следующей инструкции),
ассемблер ошибочно ассемблирует эту опцию .b. Однако, поскольку
смещение равно нулю, это код операции .w, и дизассемблер правильно
отображает этот факт пользователю.
$00004000 нет ? bra.b ====> приводит к НЕПРАВИЛЬНОЙ сборке
Бывший. 2 Если пользователь пытается форсировать
оператор ветки определенного размера, а для фактической ветки требуется большее смещение, чем было
зарезервировано, ассемблер выводит сообщение об ошибке: «ERR0R 16: ВНЕ
ДИАПАЗОНА СМЕЩЕНИЯ».
$00004000 без лифчика ?bra.w (100000)
Один из
способов гарантировать, что этого не произойдет, — не вводить параметр размера. Это
позволяет сборщику выбрать правильный размер смещения.
3.5 ВВОД РЕГИСТРОВ и СПИСКОВ РЕГИСТРОВ
Команда перемещения нескольких регистров (movem) использует список регистров в качестве
эффективного адреса. Этот список может быть введен следующим
способом:
Бывший. a0 ====> одноадресный регистр
d3 ====> одиночный регистр данных
a0-a3 ====> серия регистров
a0-a3/a7 ====> комбинация предыдущих примеров
a0-a7/d0-d7 ====> все регистры
Если указана поддержка сопроцессора, то регистры с плавающей запятой
можно ввести, как показано ниже:
Бывший. fp0 ====> один регистр с плавающей запятой
fp0-fp2 ====> серия регистров
fp0-fp3/fp7 ====> комбинация предыдущих примеров
Многие команды требуют ввода регистров, отличных от
регистров данных или адресов. Таблицы 3.3 показывают списки используемых регистров
и сокращений, принятых ассемблером:
ТАБЛИЦА 3.3 РЕГИСТРЫ 68030 (Регистры MMU недоступны на 68EC030)
Синтаксис имени
Указатель пользовательского стека USP
Регистр статуса SR
Регистр кода состояния CCR
Счетчик программ ПК
Главный указатель стека MSP
Прерывание указателя стека ISP
Регистр разрыва вектора VBR
Исходный функциональный код Регистр SFC
Регистр функционального кода назначения DFC
Регистр управления кэшем CACR
Регистр адресов кэша CAAR
Регистр корневого указателя ЦП CRP
Регистр корневого указателя супервизора SRP
Регистр управления переводами TC
Прозрачный регистр трансляции 0 TT0
Прозрачный регистр трансляции 1 TT1
Регистр состояния MMU PSR
ТАБЛИЦА 3.4 РЕГИСТРЫ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ (доступно при наличии сопроцессора)
Синтаксис имени
Регистр управления с плавающей запятой FPCR
Регистр состояния с плавающей запятой FPSR
Инст с плавающей запятой Адресный регистр ФПИАР
Регистр данных с плавающей запятой FP0-FP7
3.6 ВВОД/ОЦЕНКА НЕМЕДЛЕННЫХ ДАННЫХ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ
Немедленные данные с плавающей запятой должны быть введены с использованием десятичной точки,
по крайней мере, с одной (1) цифрой перед запятой (даже если это
«0»). Бывший. 0,0012. Поскольку используемый компилятор C не был основан на
черновике предложенной версии ANSI C, программное обеспечение не способно
выполнять «сборку» расширенных немедленных данных с повышенной
точностью. Монитор делает правильное преобразование до двойной
точности и помещает этот результат в расширенный формат. Если
используемый компилятор разрешает использовать тип long double,
то изменение типа переменной weight в разрешенной
подпрограмме (в файле asm68.c) с double на long double должно обеспечивать
добавленная точность. Примеры немедленных данных с плавающей запятой показаны
ниже:
Бывший. fmove.s #5.0,fp0 ====> fmove.s 1_400000_E_2,FP0
Формат разборки — целочисленное
поле part_fraction field_E_exponent, где дробные биты представляют собой взвешивание
1/2, 1/4 и т. д. слева направо. Биты экспоненты
представляют несмещенную степень, до которой следует возвести 2. Преобразование в
десятичное может быть выполнено путем оценки:
целое число + оценочная дробь x 2 ^ поле экспоненты
В приведенном выше примере это равно:
(1 + 0,25) х 2^2 = 5,0
ПРИМЕЧАНИЕ. Монитор использует режим округления до нуля в ассемблере при сборке непосредственных данных с плавающей запятой.
3.7 ВВОД ИНСТРУКЦИЙ MMU (недоступно для 68EC030)
Инструкция MMU НЕ должна вводиться с дескриптором размера. Ассемблер по умолчанию использует правильный размер.
Бывший. pmove (a0),tt1 ;собирается
pmove.l (a0),tt1 ;не ассемблируется, хотя операция
; это долгая операция.