【发布时间】:2017-04-03 23:21:53
【问题描述】:
根据此链接What are the sizes of tword, oword and yword operands?,我们可以使用以下约定存储一个数字: 16字节(128位):oword、DO、RESO、DDQ、RESSQ
我尝试了以下方法:
section .data
number do 2538
不幸的是,返回以下错误:
Integer supplied to a DT, DO or DY instruction
我不明白为什么它不起作用
【问题讨论】:
-
这些指令用于浮点数据,而不是整数。见:nasm.us/doc/nasmdoc3.html#section-3.4.6
-
@PaulR 谢谢。有一个命令可以在内存分配中插入一个非常大的整数(最多 2^128-1)?还是策略?
-
如果您阅读了我在上面发送给您的链接,那么您应该看到您可以将
DQ用于 64 位常量,所以也许只需将其中两个用于 128 位?也可能只是您使用的是旧版本的 NASM - 显然较新的版本使用oword或DO支持 128 位常量。 -
@PaulR 已经想到了。问题是我必须提供一个库,我必须从存储在内存中的两个 128 位数字中进行加法运算。描述如下:“使用“小端”约定将数字写入内存(16 个字节)。创建一个过程,其中两个长数字的地址分别在 RDI 和 RSI 中。结果写入长数字中RDI 中的地址”你怎么看,我不能在内存中使用两个不同的地方来只存储一个数字
-
当然可以:只需定义两个 64 位常量,第一个包含 LS 64 位,第二个包含 MS 64 位 - 最终结果将与您定义的相同单个 128 位常量。或者升级到更新/更好的汇编器,以更容易者为准。