сборка masm как получить доступ к структурной переменной - PullRequest
1 голос
/ 07 августа 2020

DPT - это структура, определенная следующим образом:

DPT STRUC
rSrtHdUnld DB 1; Bits 0-3: SRT step rate time, bits 4-7: head unload time.
rDmaHdLd   DB 1; Bit  0: 1=use DMA, bits 2-7: head load time.
bMotorOff  DB 1; 55-ms increments before turning disk motor off.
bSectSize  DB 1; Sector size (0=128, 1=256, 2=512, 3=1024).
bLastTrack DB 1; EOT (last sector on a track).
bGapLen    DB 1; Gap length for read/write operations.
bDTL       DB 1; DTL (Data Transfer Length) max transfer when length not set.
bGapFmt    DB 1; Gap length for format operation.
bFillChar  DB 1; Fill character for format (normally 0f6H).
bHdSettle  DB 1; Head-settle time (in milliseconds).
bMotorOn   DB 1; Motor-startup time (in 1/8th-second intervals)
DPT ENDS ; Size=11.   

при сборке в MASM я использовал следующий синтаксис:

MOVB [DI-SIZEOF DPT]+[DPT.bHdSettle],15

MASM показывает следующую ошибку:

syntax error : [

1 Ответ

2 голосов
/ 07 августа 2020

Я не уверен, что должно быть movb, но я предполагаю, что это опечатка, и вы действительно имели в виду mov.

Вы можете написать такую ​​инструкцию:

mov (DPT PTR [DI-SIZEOF DPT]).bHdSettle,15

Или, если вы находитесь внутри PROC, где вы хотите выполнить множественный доступ к структуре через di, вы можете указать ассемблеру временно предположить, что di указывает на DPT:

ASSUME di:PTR DPT
mov [di-SIZEOF DPT].bHdSettle,15
.....
ASSUME di:NOTHING
...