PTR
не является регистром.PTR
- это синтаксический элемент MASM, сокращение от «указатель» и разновидность оператора приведения.Так, например, mov DWORD PTR [esi], 0
означает «обрабатывать адрес, на который esi
указывает как DWORD (32 бита), и копировать туда ноль», так что это очищает 4 байта.Напротив, mov BYTE PTR [esi], 0
означает просто очистить 1 байт.
В вашем примере, label1
определен для представления типа «указатель на процедуру».В инструкции CALL
, PTR
используется, чтобы сообщить ассемблеру, что адрес, на который указывает esi
, имеет тип «процедура».В CALL insttruction вызывается процедура, адрес которой хранится в ESI
.
Насколько мне известно, в этом примере это приведение бесполезно, потому что нет никакой неоднозначности, которая должна быть разрешена приведением: CALL
с 32-битным регистром операнд всегда является косвенным вызовом рядом, беря адрес, который должен быть вызван из 32-битного регистра.