KeIL дебаггер пропускает Литералы

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
radioasm
Родился
Сообщения: 4
Зарегистрирован: Пт июл 30, 2021 23:23:16

KeIL дебаггер пропускает Литералы

Сообщение radioasm »

:tea: Запускаю дебагер с емуляцией stm103. Исходный код на ассемблере
Спойлер

Код: Выделить всё

 
.		.word 0x10017000
		.word 		stta+1
stta:  	add r5, 5
		b opu
opu: 	ldr r2, 	ddd
		add r7, 7
		.word 0x88668899
		add r8, 3
ddd: 	.word 0xf10a0a23
		add r9, 1
		b    		stta
(использую clang компилятор и gnu синтаксис, uvision keil 5.35)
Программа работает успешно без ошибок.
Но замечаю, что Литералы ( .word ) успешно пропускаются виртуальным процессором, как будто машина знает, что их нельзя исполнять.
Вроде в программном коде для реального железа Литералы ( .word ) находятся после окончания кода, чтобы процессор не вздумал их выполнять как команды. Поэтому их не располагают посреди кода, а я, ради эксперимента, расположил и получил неожиданный результат — пропуск любого .word вместо попытки выпольнить .
Это особенность виртуального дебагера?
Или я не правильно понимаю архитектуру cortex m3?
Внизу вложение из моей проги.
Вложения
кеил.jpg
дебагер
(148.78 КБ) 131 скачивание
Последний раз редактировалось radioasm Сб июл 31, 2021 23:31:11, всего редактировалось 1 раз.
Реклама
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

Re: KeIL дебаггер пропускает Литералы

Сообщение SII »

Неправильно понимаете. Вы расположили данные (с помощью директивы .word) прямо между командами. Работать, естественно, ничего не будет (процессор будет пытаться выполнить эти данные как команды со всеми вытекающими). Литералы используются только с командами вроде LDR -- для загрузки "сложных" значений в регистры ("простые" значения можно загрузить MOVом, а "сложные" -- нельзя). Насчёт ГНУсного синтаксиса не особо в курсе, ну а в нормальном (АРМовском) литералы записываются прямо в самих командах: LDR R5,=0x12345678
Реклама
radioasm
Родился
Сообщения: 4
Зарегистрирован: Пт июл 30, 2021 23:23:16

Re: KeIL дебаггер пропускает Литералы

Сообщение radioasm »

Немного изменил вопрос. А то криво написал первый раз.
[uquote="SII",url="/forum/viewtopic.php?p=4068455#p4068455"]Работать, естественно, ничего не будет (процессор будет пытаться выполнить эти данные как команды со всеми вытекающими).[/uquote]
Я с Вами согласен . А вот виртуальный дебаггер КЕИЛ не согласен с Вами и пропускает любой .word , хотя должен пытаться выполнить как инструкцию. . Почему? Фича такая?
Ниже мои размышления по поводу терминологии.
[uquote="SII",url="/forum/viewtopic.php?p=4068455#p4068455"]Литералы используются только с командами вроде LDR -- для загрузки "сложных" значений в регистры[/uquote]
LDR R5,=0x12345678 Это псевдо инструкция, ее нет в реальности. компилятор ее заменит на

Код: Выделить всё

     LDR      r5,[pc,#12]  ; #12 — зависит от смещения на адрес Литерала
И еще из Википедии — Литерал (англ. literal) — запись в исходном коде компьютерной программы, представляющая собой фиксированное значение....
Так что любой .word в исполняемой области микроконтроллера — это Литерал, и с ним умеет работать только LDR.
https://www.keil.com/support/man/docs/a ... 147760.htm — вот отсюда взял такие мысли.
[uquote="SII",url="/forum/viewtopic.php?p=4068455#p4068455"]"простые" значения можно загрузить MOVом,[/uquote]
"простые" значения в документации именуются "immediate value". И еще цытата из документации — You can generate any 32-bit immediate with a MOV, MOVT instruction pair.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: KeIL дебаггер пропускает Литералы

Сообщение VladislavS »

[uquote="radioasm",url="/forum/viewtopic.php?p=4068744#p4068744"]Немного изменил вопрос. А то криво написал первый раз.[/uquote]У вас талант - писать чтобы было непонятно. Программу, чтобы не понял отладчик. Сообщение, чтобы не поняли форумчане.
Реклама
Эиком - электронные компоненты и радиодетали
radioasm
Родился
Сообщения: 4
Зарегистрирован: Пт июл 30, 2021 23:23:16

Re: KeIL дебаггер пропускает Литералы

Сообщение radioasm »

Все таки программа выполняется правильно,
Только Симулятор uVision самостоятельно .word игнорирует , без указаний со стороны кода.
Может в настройках виртуального дебаггера надо где то галочку поставить?
А есть какие либо еще виртуальные дебагеры от других разработчиков?
Реклама
radioasm
Родился
Сообщения: 4
Зарегистрирован: Пт июл 30, 2021 23:23:16

Re: KeIL дебаггер пропускает Литералы

Сообщение radioasm »

Безымянный.png
(49.77 КБ) 114 скачиваний
Я сам разобрался.
Надо снять галочку DEBUG INFORMATION.
И симулятор работает как реальное железо.
Реклама
Ответить

Вернуться в «ARM»