Assembly 什么是;第16段“公共用途”;在TASM中声明一个段时是什么意思?

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

我知道这里的代码应该创建一个包含16位代码和数据的段

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在运行时如何解释代码是另一回事,但您当然应该确保按照您打算在其中运行代码的相同模式进行组装。