OberonCore
https://forum.oberoncore.ru/

Компилятор Oberon → ARMv6-M, ARMv7E-M
https://forum.oberoncore.ru/viewtopic.php?f=137&t=5232
Страница 9 из 9

Автор:  Artyemov [ Четверг, 13 Апрель, 2017 15:28 ]
Заголовок сообщения:  Re: Компилятор Oberon → ARMv6-M, ARMv7E-M

Александр, продолжаю разбираться (комментарий вставлен в LOG копи-пастой)
Код:
(* ============================================================
MODULE   HelloWord;

VAR
      A, B   :INTEGER;

BEGIN
      A := 5;
      B := 11;
      B := A + B;

END   HelloWord.
============================================================= *)

O7ARMv7MTool 19.9.2014
decode HelloWord.hex
 00400000H:
   0    00003FF0   SUBS r7, #240
   1    00002000   MOVS r0, #0
   2    0000021B   LSLS r3, r3, #8
   3    00000040   LSLS r0, r0, #1
   4    00000001   MOVS r1, r0

 253    00000000   MOVS r0, r0
 254    00000000   MOVS r0, r0
 255    00000000   MOVS r0, r0
 256    0000BF00   NOP
 257    0000B500   PUSH {LR}
 258    00002005   MOVS r0, #5
 259    0000F8D6   ...
 260    00003000   LDR.W r3, [r6]
 261    00006018   STR r0, [r3]
 262    0000200B   MOVS r0, #11
 263    00006058   STR r0, [r3, #1] ; 4
 264    00006818   LDR r0, [r3]
 265    00006859   LDR r1, [r3, #1] ; 4
 266    00001840   ADDS r0, r0, r1
 267    00006058   STR r0, [r3, #1] ; 4
 268    0000BD00   POP {PC}
 269    0000F643   ...
 270    000076FC   MOVW r6, #16380 ; 0x3FFC
 271    0000F2C2   ...
 272    00000600   MOVT r6, #8192 ; 0x2000
 273    00001F30   SUBS r0, r6, #4
 274    00002100   MOVS r1, #0
 275    00006001   STR r1, [r0]
 276    0000F643   ...
 277    000070F0   MOVW r0, #16368 ; 0x3FF0
 278    0000F2C2   ...
 279    00000000   MOVT r0, #8192 ; 0x2000
 280    00006030   STR r0, [r6]
 281    0000F7FF   ...
 282    0000FFE6   BL -52 ; -26
 283    0000E7FE   B -2 ; -1
start linear address:  00400001H

1) если известен стартовый адрес, то может быть (хотя я в этом 100% уверен) вместо номеров строк выводить адрес?
2) строки 0, 1 и 2, 3 поначалу обескуражили: исходное значение SP 0000200000003FF0H и точка входа по сбросу 000000400000021BH - не многовато? В самый раз (: - 16-разрядные числа. Ведущие нули всё же ни к чему.
3) строки 282, 283: смещение в комментарии. Лучше номер строки явно, а ещё лучше адрес (привет из п.1).
4) (: строки 277 и 279: комментарий. Какая часть O7 написана на Ц?

И не сочтите за труд: что значат type descriptors, data, strings и проч?
Код:
O7ARMv7MTool 19.9.2014
decode HelloWord.a7m
HelloWord DEDCBD1B   1    72
imports:
type descriptors

data     8
strings

code
   0    0000BF00   NOP
   1    0000B500   PUSH {LR}
   2    00002005   MOVS r0, #5
   3    83000003   
   4    00FFFFFD   
   5    00006018   STR r0, [r3]
   6    0000200B   MOVS r0, #11
   7    00006058   STR r0, [r3, #1] ; 4
   8    00006818   LDR r0, [r3]
   9    00006859   LDR r1, [r3, #1] ; 4
  10    00001840   ADDS r0, r0, r1
  11    00006058   STR r0, [r3, #1] ; 4
  12    0000BD00   POP {PC}
commands:
entries
     4
pointer refs

fixP =        0
fixD =        3
fixT =        0
entry =        4

Автор:  Alexander Shiryaev [ Четверг, 13 Апрель, 2017 20:00 ]
Заголовок сообщения:  Re: Компилятор Oberon → ARMv6-M, ARMv7E-M

Artyemov писал(а):
1) если известен стартовый адрес, то может быть (хотя я в этом 100% уверен) вместо номеров строк выводить адрес?
Это не номера строк, а номера команд Trumb16
Artyemov писал(а):
2) строки 0, 1 и 2, 3 поначалу обескуражили: исходное значение SP 0000200000003FF0H и точка входа по сбросу 000000400000021BH - не многовато? В самый раз (: - 16-разрядные числа. Ведущие нули всё же ни к чему.
32-разрядное значение состоит из двух подряд идущих 16-разрядных.
В данном случае начальное значение равно 20003FF0H, вектор сброса 0040021AH+1 (Thumb).
Artyemov писал(а):
3) строки 282, 283: смещение в комментарии. Лучше номер строки явно, а ещё лучше адрес (привет из п.1).
До ";" значение в команде Thumb16, после ";" -- номер команды, понятный для человека.
Artyemov писал(а):
4) (: строки 277 и 279: комментарий. Какая часть O7 написана на Ц?
Надо было сделать, чтобы писалось 2000H вместо 0x2000...

Автор:  Alexander Shiryaev [ Четверг, 13 Апрель, 2017 20:04 ]
Заголовок сообщения:  Re: Компилятор Oberon → ARMv6-M, ARMv7E-M

Artyemov писал(а):
И не сочтите за труд: что значат type descriptors, data, strings и проч?
Об этом написано здесь, в 12-м разделе.

Автор:  Artyemov [ Пятница, 14 Апрель, 2017 16:21 ]
Заголовок сообщения:  Re: Компилятор Oberon → ARMv6-M, ARMv7E-M

Таблица векторов прерываний только в ОЗУ и механизмы работы с прерываниями из ARMv7MTraps?

Автор:  Иван Денисов [ Суббота, 15 Апрель, 2017 01:46 ]
Заголовок сообщения:  Re: Компилятор Oberon → ARMv6-M, ARMv7E-M

Artyemov писал(а):
Таблица векторов прерываний только в ОЗУ и механизмы работы с прерываниями из ARMv7MTraps?

Про то, как работать с прерываниями, смотрите заметку:
http://obertone.ru/ob/o7/debug

Автор:  Alexander Shiryaev [ Суббота, 15 Апрель, 2017 08:03 ]
Заголовок сообщения:  Re: Компилятор Oberon → ARMv6-M, ARMv7E-M

Artyemov писал(а):
Таблица векторов прерываний только в ОЗУ и механизмы работы с прерываниями из ARMv7MTraps?

Только в ОЗУ, но механизм работы может быть любым.

Страница 9 из 9 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/