Как определить переменную, которая занимает пробелы нескольких других переменных?
Этот код написан в формате MS ARM. Мне нужно определить переменную с именем psxRegs
который будет занимать именно пространства переменных из reg
в intCycle
так что я могу его экспортировать. Однако я не знаю, как этого добиться. Как это может быть сделано?
AREA |.bss|,DATA,READWRITE,ALIGN=4
invc_ptr SPACE 4
address SPACE 4
;psxRegs
reg SPACE 128
lo SPACE 4
hi SPACE 4
reg_cop0 SPACE 128
reg_cop2d SPACE 128
reg_cop2c SPACE 128
pcaddr SPACE 4
SPACE 4
SPACE 4
SPACE 4
intCycle SPACE 256
rcnts SPACE 7*4*4
mem_rtab SPACE 4
1 ответ
При использовании ассемблера, то, что вы считаете именованными переменными, на самом деле являются только метками, ссылающимися на области памяти. Это означает, что нечто подобное имеет эффект, описанный ниже:
psxRegs:
reg SPACE 128
lo SPACE 4
hi SPACE 4
reg
, lo
а также hi
используются для определения именованных меток, которые можно использовать в вашем коде для получения адреса (после сборки) определенных областей памяти. Очень похожим образом, psxRegs:
определяет метку, но не резервирует память. На самом деле это псевдоним для reg
поскольку память не зарезервирована, когда она определена.
Это может иметь и другие последствия в вашем случае. Не ясно, если вы просто ищете псевдоним для reg
или если вы пытаетесь также ссылаться lo
а также hi
, Вы можете получить доступ lo
а также hi
путем доступа [psxRegs+128]
а также [psxRegs+132]
соответственно. Тем не менее, это может быть совершенно ненужным, так как вы можете получить доступ к тем же значениям через [reg+128]
а также [reg+132]
,
Обратите внимание, что :
задний psxRegs
может или не может потребоваться в вашем ассемблере. Я бы порекомендовал сначала попробовать без двоеточия. Если это не удается собрать, добавьте двоеточие.