Я как-то подзадолбался заниматься верчением констант/меток EQU для вычислений смещений к полям структур (особенно вложенных да и в массивах), и решил почувствовать себя белым человеком, чтоб всю черную работу по вычислению выполнял ассемблер.
С простыми случаями вроде понятно. Но мне простого недостаточно. Мне надо структуру S_RTCG_BUFFER, в которой одним из полей является структура S_RTCG_TABLE, в которой полями являются структуры S_RTCG_TABLE_ENTRY.
С описанием проблем нет. А вот с инициализацией - какая-то засада. В документации к sjasmplus написано, что для инициализации вложенных структур (именно уже определений объектов, а не деклараций структуры) надо использовать фигурные скобки, а поля - разделять запятыми.
имею такой раздел деклараций
Code: Select all
RTCG_FLAG_LDMASK1 equ 1 ; flag C
RTCG_FLAG_LDMASK2 equ 64 ; flag Z
RTCG_FLAG_END equ 128 ; flag S
RTCG_TEMPLATE_SIZE equ 8
struct S_RTCG_TABLE_ENTRY
flags byte
bcnt byte
start word
ends
struct S_RTCG_TABLE
p1 S_RTCG_TABLE_ENTRY
ep1 S_RTCG_TABLE_ENTRY
prlg1 S_RTCG_TABLE_ENTRY
i1 S_RTCG_TABLE_ENTRY
p2 S_RTCG_TABLE_ENTRY
ep2 S_RTCG_TABLE_ENTRY
prlg2 S_RTCG_TABLE_ENTRY
i2 S_RTCG_TABLE_ENTRY
end_marker db RTCG_FLAG_END
ends
struct S_RTCG_BUFFER
masked_template BLOCK RTCG_TEMPLATE_SIZE * 2
table S_RTCG_TABLE
ends
Code: Select all
rtcg_buffer S_RTCG_BUFFER {
,
{
{ RTCG_FLAG_LDMASK1, 1, 1000h },
{ 0, 4, 1100h },
{ RTCG_FLAG_LDMASK1, 5, 1180h },
{ 0, 20, 1001h },
{ RTCG_FLAG_LDMASK2, 5, 2000h },
{ 0, 4, 2100h },
{ RTCG_FLAG_LDMASK2, 5, 2180h },
{ 0, 28, 2005h }
}
}
Code: Select all
52 8010 rtcg_buffer S_RTCG_BUFFER {
53 8010 00 00 00 00 ,
53 8014 00 00 00...
53 8020 00
54 8021 00 00 00 {
55 8024 00 00 00 00 { RTCG_FLAG_LDMASK1, 1, 1000h },
55 8028 01 01 00 10
56 802C 00 04 00 11 { 0, 4, 1100h },
57 8030 01 05 80 11 { RTCG_FLAG_LDMASK1, 5, 1180h },
58 8034 00 14 01 10 { 0, 20, 1001h },
59 8038 40 05 00 20 { RTCG_FLAG_LDMASK2, 5, 2000h },
60 803C 00 04 00 21 { 0, 4, 2100h }
61 8040 80 }
62 8041 }
Что я делаю не так?
