当我在 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
我对将 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