|
1
6
根据MASM 6.1版程序员指南,TBYTE指令应不同于所有其他数据定义指令,因为它将十进制整数初始值设定项转换为FBLD和FBSTP指令使用的80位压缩BCD(二进制编码十进制)格式。正如fuz的回答更详细地解释的那样,80位压缩BCD格式仅限于18位十进制整数。 然而,我测试过的MASM的任何版本,包括MASM 6.1d,实际上都不是这样的。使用十进制整数,带有TBYTE指令的初始值设定项会导致分配的内存用80位整数值初始化。这就像与字节、字和DWORD一起使用的十进制整数分别导致8位、16位和32位整数值用于初始化内存。 例如,考虑以下代码:
根据文档,此代码应使用以下字节初始化内存,以十六进制表示:
前两行使用16位和32位整数表示12345,而最后一行使用80位压缩BCD格式。 然而,MASM 6.1d和我试用过的每个版本的MASM,直到Visual Studio 2017中包含的最新版本,都将上述代码汇编成以下字节:
十进制数与TBYTE一起使用这一事实没有什么不同,正常整数格式与其他指令一样使用。
请注意,虽然x86 CPU支持80位压缩BCD类型,但如果仅由FBLD和FBSTP指令支持,则没有适用于80位整数值的指令。因此,除非您愿意自己编写80位整数算术代码,否则将TBYTE与整数结合使用并不完全有用。 通常,您会使用的唯一80位类型是80位浮点类型。在这种情况下,虽然可以使用TBYTE指令,但应该使用REAL10指令,并且需要将数字指定为带小数点的浮点常量。因此,要以80位浮点格式初始化数字为12345的80位内存位置,您可以使用以下内容:
|
|
|
2
6
8087浮点单元通过
请注意,此限制不适用于
作为浮点数(
我建议您重新阅读有关8087 FPU理解的数据类型的章节。 |