Assembly 假设dataregister:qualifiedtype[,dataregister:qualifiedtype]有什么例子?

Assembly 假设dataregister:qualifiedtype[,dataregister:qualifiedtype]有什么例子?,assembly,x86,masm,Assembly,X86,Masm,MASM描述了ASSUBE指令的几种形式,只显示了几个示例。我找不到的例子是: ASSUME dataregister : qualifiedtype [, dataregister : qualifiedtype] 我没有找到有关数据寄存器的信息。是否有人有此表单中的假定指令的示例?什么是数据寄存器?当未明确指定时,它用于使用指定的通用寄存器(数据寄存器)为内存操作数提供类型(限定类型) MASM通常可以根据另一个操作数的大小推断内存操作数的大小。在以下示例中,MASM知道目标内存操作数必须

MASM描述了ASSUBE指令的几种形式,只显示了几个示例。我找不到的例子是:

ASSUME dataregister : qualifiedtype [, dataregister : qualifiedtype]
我没有找到有关
数据寄存器的信息。是否有人有此表单中的
假定
指令的示例?什么是
数据寄存器

当未明确指定时,它用于使用指定的通用寄存器(
数据寄存器
)为内存操作数提供类型(
限定类型

MASM通常可以根据另一个操作数的大小推断内存操作数的大小。在以下示例中,MASM知道目标内存操作数必须为双字大小,因为源操作数为双字大小:

mov     [edx], eax
但是,有时MASM无法做到这一点,或者是因为没有其他操作数,或者是因为其他操作数的大小未知:

inc     [ebx]          ; error A2023:instruction operand must have size
mov     [edx], 0       ; error A2070:invalid instruction operands
解决方案通常是使内存操作数的大小显式:

inc     BYTE PTR [ebx]
mov     DWORD PTR [edx], 0
但是,您可以告诉MASM,当在内存操作数中使用给定寄存器时,它应该假定内存操作数为给定类型:

ASSUME  ebx:PTR BYTE
ASSUME  edx:PTR DWORD
inc     [ebx]
mov     [edx], 0
当您需要显式地指定大量内存操作数的大小时,这可能很方便,但从风格上来说,我不建议这样做,因为这样会使代码不太清晰。有一种情况可能值得使用结构,因为将它们与内存操作数一起使用的语法可能有点混乱:

mov     (linked_list_node PTR [ecx]).prev, esi
mov     (linked_list_node PTR [ecx]).next, 0
mov     (linked_list_node PTR [ecx]).data, al
我不知道为什么内存操作数使用
类型PTR
顺序,而假设使用
类型PTR
顺序

ASSUME  ecx:PTR linked_list_node
mov     [ecx].prev, esi
mov     [ecx].next, 0
mov     [ecx].data, al