2013-04-10 85 views
0

我知道这里的代码应该创建一个包含16位代码和数据的段。当在TASM中声明段时,“para public use16”是什么意思?

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

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

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

而且可能是assume cs:code16, ds:code16意味着我们将用它来代码和数据。

+1

你的'assume'告诉TASM'cs'和'ds'被假定为指向'code16'段。 – 2013-04-10 21:01:27

回答

6

para
这是segment alignmentpara是“段落”的缩写,在此上下文中意味着16个字节。所以你在16字节的边界上对齐该段。

public
这是segment combine typepublic表示具有该名称的所有分段应连接成单个分段。

use16
这意味着该段将使用16位编码的指令通过默认,以及32位指令将需要预先固定的操作码,如果他们愿意,否则是ambigous。

+0

我认为16位或32位指令集是CPU的全局设置,即实模式与保护模式。这是否意味着每个段可以有不同的指令集? – sashoalm 2013-04-11 05:45:35

+0

@sashoalm:许多指令对16位和32位操作数具有相同的编码(例如'PUSH AX'和'PUSH EAX')。一个前缀('0x66')用于分隔两者。 'useNN'设置控制哪两个将被加上前缀,即_assembler_应该如何对指令进行编码(例如,'use16'的16位编码将是默认值,而32位变量将以前缀为前缀)。 _CPU_在运行代码时如何解释代码是一个不同的问题,但是您当然应该确保您组装的代码与您打算运行代码的模式相同。 – Michael 2013-04-11 05:59:11

相关问题