Директивы BYTE PTR, WORD PTR, DWORD PTR
Бывают случаи, когда нам нужно помочь ассемблеру в переводе ссылок на данные в памяти.
Например, инструкция
mov [ESI], al ; Store a byte-size value in memory location pointed by ESI
предполагает, что 8-разрядное значение должно быть перемещено, поскольку AL является 8-разрядным регистром.
Когда инструкция не имеет ссылки на размер операнда,
mov [ESI], 5 ; Error: operand must have the size specified
Чтобы обойти этот экземпляр, мы должны использовать директиву указателя, такую как
mov BYTE PTR [ESI], 5 ; Store 8-bit value
mov WORD PTR [ESI], 5 ; Store 16-bit value
mov DWORD PTR [ESI], 5 ; Store 32-bit value
. Эти инструкции требуют, чтобы операнды были одинакового размера.
В общем случае оператор PTR заставляет выражение обрабатыватьсяв качестве указателя указанного типа:
.DATA
num DWORD 0
.CODE
mov ax, WORD PTR [num] ; Load a word-size value from a DWORD