【问题标题】:What does "para public use16" mean when declaring a segment in TASM?在 TASM 中声明段时,“para public use16”是什么意思?
【发布时间】:2013-04-10 19:28:45
【问题描述】:

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

segment code16 para public use16
assume cs:code16, ds:code16

但我不确定这里的格式是什么。

我认为segment 表示我们正在声明一个段,code16 是名称,但我不确定para public use16

可能是assume cs:code16, ds:code16 表示我们将其用于代码和数据。

【问题讨论】:

  • 您的assume 告诉TASM csds 被假定指向code16 段。

标签: assembly x86 tasm


【解决方案1】:

para
这是segment alignmentpara 是“段落”的缩写,在此上下文中表示 16 个字节。因此,您将在 16 字节边界上对齐段。

public
这是segment combine typepublic 表示应将具有此名称的所有段连接成一个段。

use16
这意味着该段将默认使用 16 位编码的指令,而 32 位指令将需要前缀操作码,否则它们会模棱两可。

【讨论】:

  • 我认为 16 位或 32 位指令集是 CPU 的全局设置,即实模式与保护模式。这是否意味着每个段可以有不同的指令集?
  • @sashoalm:许多指令对 16 位和 32 位操作数具有相同的编码(例如 PUSH AXPUSH EAX)。前缀 (0x66) 用于分隔两者。 useNN 设置控制这两个中的哪一个将获得前缀,即 assembler 应如何编码指令(例如,use16 16 位编码将是默认值,而 32-位变体将作为前缀)。 CPU 在运行时如何解释代码是另一回事,但您当然应该确保您的汇编模式与您打算运行代码的模式相同。
猜你喜欢
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
  • 2015-09-03
  • 2014-09-20
  • 1970-01-01
相关资源
最近更新 更多