Assembly 什么是;第16段“公共用途”;在TASM中声明一个段时是什么意思?
我知道这里的代码应该创建一个包含16位代码和数据的段Assembly 什么是;第16段“公共用途”;在TASM中声明一个段时是什么意思?,assembly,x86,tasm,Assembly,X86,Tasm,我知道这里的代码应该创建一个包含16位代码和数据的段 segment code16 para public use16 assume cs:code16, ds:code16 但我不确定这里的格式是什么 我认为segment意味着我们正在声明一个segment,code16是名称,但我不确定parapublic use16 并且可能是假设cs:code16,ds:code16意味着我们将对代码和数据使用它。para 这是最新的para是“段落”的缩写,在本上下文中表示16个字节。因此,您将在1
segment code16 para public use16
assume cs:code16, ds:code16
但我不确定这里的格式是什么
我认为segment
意味着我们正在声明一个segment,code16
是名称,但我不确定parapublic use16
并且可能是假设cs:code16,ds:code16
意味着我们将对代码和数据使用它。para
这是最新的
para
是“段落”的缩写,在本上下文中表示16个字节。因此,您将在16字节边界上对齐该段
public
这是最新的
public
表示所有具有此名称的段都应连接到单个段中
use16
这意味着默认情况下,该段将对指令使用16位编码,如果32位指令是不明确的,则需要前缀操作码。
para
这是最新的
para
是“段落”的缩写,在本上下文中表示16个字节。因此,您将在16字节边界上对齐该段
public
这是最新的
public
表示所有具有此名称的段都应连接到单个段中
use16
这意味着默认情况下,该段将使用16位编码作为指令,如果32位指令不明确,则它们需要前缀操作码。您的
假设
告诉TASM,假设cs
和ds
指向code16
段。您的假设
告诉TASM,假设cs
和ds
指向code16
段。我认为16位或32位指令集是CPU的全局设置,即实模式与保护模式。这是否意味着每个段可以有不同的指令集?@sashoalm:许多指令对16位和32位操作数具有相同的编码(例如PUSH AX
和PUSH EAX
)。前缀(0x66
)用于分隔两者。useNN
设置控制两个选项中的哪一个将被加前缀,即汇编程序应如何对指令进行编码(例如,使用use16
时,16位编码将是默认值,而32位变量将被加前缀)。CPU在运行时如何解释代码是一个不同的问题,但您当然应该确保按照您打算在其中运行代码的相同模式进行组装。我认为16位或32位指令集是CPU的全局设置,即实模式与保护模式。这是否意味着每个段可以有不同的指令集?@sashoalm:许多指令对16位和32位操作数具有相同的编码(例如PUSH AX
和PUSH EAX
)。前缀(0x66
)用于分隔两者。useNN
设置控制两个选项中的哪一个将被加前缀,即汇编程序应如何对指令进行编码(例如,使用use16
时,16位编码将是默认值,而32位变量将被加前缀)。CPU在运行时如何解释代码是另一回事,但您当然应该确保按照您打算在其中运行代码的相同模式进行组装。