| L'Operatore
PTR svolge una funzione simile
alla pseudoOperazione LABEL non di uso, in quanto permette di accedere ad una variabile in modo diverso da quello con cui è stata definita; la variabile alla quale si riferisce l'istruzione che la utilizza cambia dunque temporaneamente tipo; i nuovi tipi possono essere
BYTE, WORD,
DWORD, QWORD,
TBYTE, (ma anche NEAR,
FAR, se riferiti a etichette di procedura).
|
| L'esempio mostra come sia possibile accedere in
modo BYTE
alla parte bassa o alla parte alta della variabile RamVideo, definita come word
(DW), o in modo WORD (caricando anche
il byte successivo) alla variabile ATTRIB, definita
come byte (DB):
RamVideo DW 0B800H
ATTRIB DB 0FH
DB 55H
|
MOV
AL,byte PTR CS:[RamVideo] ;AL=00H
MOV AH,byte PTR CS:[RamVideo+1] ;AH=B8H
MOV AX,CS:[RamVideo]
;AX=B800H
MOV AX,word PTR CS:[ATTRIB] ;AX=550FH
MOV AL,CS:[ATTRIB]
;AL=0FH
MOV AH,CS:[ATTRIB+1]
;AH=55H
|
Possiamo notare che se tentiamo
di accedere alla variabile in modo diverso da quello definito per
essa, cioè senza premettere la byte PTR, viene
segnalato errore (warning A4031: Operand types must match).
In realtà l'errore è warning perchè le istruzioni in nero senza
byte PTR fanno comunque quello che ci si aspetta, cioè le prime
2 caricano un byte ciascuna e la rimanente carica i 2 bytes contenuti in
ATTRIB e ATTRIB+1. |