Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2020, 23:55   #1
Даниил Крещетов
Новичок
Джуниор
 
Регистрация: 22.12.2020
Сообщений: 1
По умолчанию Почему адрес метки, на которую ссылаемся при выполнении команды JBC RI, M2, может не совпадать с ожидаемым в программе MCU 8051 IDE?

Разбираю команды микроконтроллера 8051 в программе MCU 8051 IDE. Я хочу получить машинный код команды JBC RI, M2. ADR M2 = 01Ch. Но есть один момент: 01Ch = 28d и метка M2 должна стоять на 28 строчке, но если пропишу метку на 28 строчке, то программа показывает мне адрес 01Dh. А если я пропишу метку на 27 строчке, то программа показывает нужный адрес 01Ch. Адрес, по которому я решил разместить саму команду JBC RI, M2 равен 10h.
Код:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
jbc ri, M2
nop
nop
nop
nop
nop
nop
nop
nop
nop
M2: nop
nop
Вот скриншот кода в программе с выделенным значением адреса метки М2:
Изображения
Тип файла: jpg 1.jpg (82.3 Кб, 5 просмотров)
Даниил Крещетов вне форума Ответить с цитированием
Старый 23.12.2020, 01:50   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,322
По умолчанию

Потыкал немного эту IDE. Если поставить бряк на nop, который на первой строке, то PC равен нулю. Во-вторых, номер строки может не совпадать с PC, так как инструкции могут быть многобайтовыми.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 23.12.2020, 11:14   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,573
По умолчанию

Я в 51-м не совсем копенгаген, но по опыту других МК знаю, что в коротких переходах указывается относительный адрес, поэтому если в 0 записан переход на 5, то в команде будет константа +4 (при выполнении команды по адресу 0 в program counter содержится 1).
А вообще вопрос почему так сделано относится к разряду детсадовских. Сделано и работает так, как посчитал нужным разработчик и описа'л это в ДШ.
digitalis вне форума Ответить с цитированием
Старый 23.12.2020, 11:47   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,318
По умолчанию

Даниил Крещетов
Цитата:
Почему адрес метки, на которую ссылаемся при выполнении команды JBC RI, M2, может не совпадать с ожидаемым в программе MCU 8051 IDE?
В Google лень пойти?
http://www.gaw.ru/html.cgi/txt/doc/m...c_bit_re18.htm
Цитата:
Адрес перехода вычисляется сложением относительного смещения со знаком в третьем байте команды (re18) и содержимого счетчика команд после прибавления к нему 3.
Смотрим на исходные данные и считаем.
Цитата:
Адрес, по которому я решил разместить саму команду JBC RI, M2 равен 10h.
10h = 16d Прибавляем 3. Это ячейка за командой, которая состоит из 3-х байтов.
19d - адрес, куда будет передано управление, если бит не установлен.
Считаем от него до метки. Так как показано по тексту имеем:
Код:
nop
nop
jbc ri, M2   <- 10h = 16d
nop            <- 19d
nop            <- 20d
nop            <- 21d
nop            <- 22d
nop            <- 23d
nop            <- 24d
nop            <- 25d
nop            <- 26d
nop            <- 27d
M2: nop     <-- 28d = 01Ch
nop            <- 29d
А что вы ожидали?
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 23.12.2020, 14:27   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,573
По умолчанию

Дык для этого ещё доку читать надо. А это такааая скука!
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему не рекомендуют применять метки? Cuprum5 Общие вопросы C/C++ 11 30.07.2019 10:41
Программирование светодиодной матрицы в mcu 8051 Dager Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 25.05.2019 14:21
[VBA] при выполнении команды UserForm1.Hide возникает ошибка ЮрийPI118 Помощь студентам 1 24.10.2018 09:37
Макрос для поиска табуляций и выполнении команды controls Microsoft Office Word 0 21.05.2017 12:36
Максимальная длинная команды, которую может обработать MySQL vedro-compota SQL, базы данных 17 18.10.2010 12:19