vak: (Default)
[personal profile] vak
В системе команд ARM есть инструкция, позволяющая напрямую получить значение регистра счётчика команд, называемого PC. Вот таким образом:
mov r1, pc
В регистр R1 будет занесено значение PC в момент выполнения. Для определённости пусть данная команда MOV находится по адресу 100. Вопрос: какое число окажется в R1? Варианты:
  • 100
  • 101
  • 102
  • 104
  • 108
  • другое
Честно говоря, я пока и сам не знаю правильный ответ. Завтра состряпаю тест и запущу на реальном процессоре.

UPDATE: правильный ответ 104. Подробности смотрите в следующем посте: vak.dreamwidth.org/1091392.html

Date: 2023-09-18 07:14 (UTC)
madef: (Default)
From: [personal profile] madef
По логике, в R1 должно находиться чисто 100. Иначе команда не имеет никакого смысла.

Date: 2023-09-18 07:31 (UTC)
From: [personal profile] ivanrubilo
PC указывает там на следующую инструкцию для выполнения.

Date: 2023-09-18 07:41 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Система команд PDP-11 учит, что "по логике", каждая команда видит в PC адрес следующей команды.

Date: 2023-09-18 07:27 (UTC)
From: [personal profile] ivanrubilo
На армах PC указывает на то что префетчится, то есть на .+4.
А вот прочитать $PC на армах64 не так-то просто :)
Edited Date: 2023-09-18 07:33 (UTC)

Date: 2023-09-22 13:00 (UTC)
From: [personal profile] ivanrubilo
Да, это я загнался - не на префетчер, а просто на следующую инструкцию.
На префетчер когда был старый фиксированный пайплайн.

Теперь уже префетчер не архитектурная, а фича имплементации - может спекулятивно фигачить из нескольких мест сразу...

Но в целом логически если - mov reg, PC - имхо и должно указывать "на после" (aka начало следующей) выполненной инструкции т.к. она же уже выполнилась раз всё заретайрилось и записалось в архитектурный регистр.
Edited Date: 2023-09-22 13:07 (UTC)

Date: 2023-09-18 07:34 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Я б предположил 104.

Date: 2023-09-18 07:37 (UTC)
x86128: (Default)
From: [personal profile] x86128
Кажется что такая инструкция на мелких ядрах не представима

Date: 2023-09-18 07:38 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Тебе сюда завтра: Intro to 64 bit ARM Assembly: From Basic to Party Tricks
https://www.meetup.com/cpp-bay-area/events/294318702/

Date: 2023-09-18 07:39 (UTC)
From: [personal profile] ivanrubilo
Кстати прикол - PC может быть не чётный (хотя и команды все длины 4 или 2 байта в Thumb-1), бранч в нечётный адрес используется для переключений режимов ARM и Thumb. Очень неочевидная хрень для написания дизассемблеров для отличени данных от кода, благо что это специально метится в эльфе.

Date: 2023-09-18 09:11 (UTC)
prool: cat (Default)
From: [personal profile] prool
Я от нечего делать изобретаю свой процессор. Был бы я мальчик-хакер, я бы довел проект до макета на каком нибудь FPGA, а так я просто на прогулке вяло размышляю о минимальном наборе регистров и команд.

Кстати, вот вам на поржать - моя файловая система FoolFS (foolish filesystem).

http://proolepedia.kharkov.org/index.php/FoolFS

Date: 2023-09-18 10:39 (UTC)
vlad_m: (Default)
From: [personal profile] vlad_m
104