当我在 MASM 中使用带有间接操作数的 PTR 运算符时?

When I use PTR operator with indirect operands in MASM?

我对将 PTR 运算符与 mov 指令一起使用感到困惑

在我的书中,

.data
byteVal BYTE 10h
.code
mov esi, OFFSET, byteVal
mov al, [esi]

此代码有效

但是

Employee STRUCT
   IDNum BYTE "000000000"
   Years WORD 0
Employee ENDS

.data
worker Employee <>
.code
mov esi, OFFSET worker
mov ax, [esi].Years

此代码无效

但是

 mov ax, (Employee PTR [esi]).Years

此代码有效

我想知道当我将 PTR 运算符与 mov 指令和间接操作数一起使用时

您需要准确地告诉汇编器 struct esi 指向什么...如果有多个结构具有相同名称的元素(在本例中为 .Years)怎么办?

您可以通过执行假设来完成类似的事情:

    assume esi:ptr Employee

然后当 esi 不再拥有有效的 Employee ptr 时:

    assume esi:nothing