Indirekt/direkt bei Assembler ist damit eigentlich immer folgendes gemeint:
DIREKT: die Speicher-adresse steht im Befehl
LDS Register, speicheradresse
"Lade das Byte an der speicheradresse ins register"

INDIREKT:
LD register, X
"Lade das Byte, das dort steht, wo das registerpaar XL:XH grad hinzeigt, ins register"
Indirekt, weil du erst die adresse in das registerpaar laden mußt, und DANN erst den Wert ins Zielregister

Solche registerpaare gibts 3
R26:R27 heißt dann auch X
R28:R29 heißt dann auch Y
R30:R31 heißt dann auch Z


MASKE:
Ein Wert (z.B. ein BYte) gilt dann als Maske, wenn du damit aus einem anderenWert durch AND die für dich "interessanten" Bits herausfilterst
z.B
ein Input-Port PINB , aber nur das Bit Nr. 3 ist auf Input geschaltet.
also willst du auch nur dieses Bit haben.
IN R24, PINB
AND R24, 0b00001000 die Maske für Bit Nr 3
jetzt steht in R24 entweder
0b00000000 wenn am PINB.3 NULL anliegt oder
0b00001000 wenn am PINB.3 EINS anliegt

Alle anderen Bits sind "ausmaskiert"

hilft das ?