Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 在MASM中使用常量初始化大数_Assembly_X86_Masm - Fatal编程技术网

Assembly 在MASM中使用常量初始化大数

Assembly 在MASM中使用常量初始化大数,assembly,x86,masm,Assembly,X86,Masm,我试图在MASM中编写一些宏来处理大的数字(即值大于可以存储在寄存器中的值的数字)。然而,我在汇编时从常量创建bignum时遇到了一个问题。MASM似乎对数值常数的大小有限制。我希望能够做到的是: DECLARE_BIGINT example, 19292109310024103209481293008 但我得到了这个错误: error A2071: initializer magnitude too large for specified size 错误A2071:初始值设定项幅值对于指定的

我试图在MASM中编写一些宏来处理大的数字(即值大于可以存储在寄存器中的值的数字)。然而,我在汇编时从常量创建bignum时遇到了一个问题。MASM似乎对数值常数的大小有限制。我希望能够做到的是:

DECLARE_BIGINT example, 19292109310024103209481293008
但我得到了这个错误:

error A2071: initializer magnitude too large for specified size 错误A2071:初始值设定项幅值对于指定的大小太大 我认为这意味着常数大于MASM所能处理的。我想我可以通过将常量声明为文本来绕过它:

DECLARE_BIGINT example, <19292109310024103209481293008>
DECLARE_BIGINT示例,
然后解析出数字,但我一直无法弄清楚如何(甚至是是否可能)在MASM中操纵文本常量


任何帮助都将不胜感激。另外,我这样做是为了好玩,并试图更好地学习汇编和MASM,所以我不想只使用一个为我做这件事的库(让我失去了所有的乐趣)。

整数常量不适合64位,这是目前任何实用的x86/64汇编程序都可能支持的最大整数

特别是对于MASM,请查阅官方文档,阅读。它列出了MASM支持的数据声明类型。其中最大的整数类型有:

=8字节(或64位)和
=10字节(或80位)

整数常量需要log2(19292109310024103209481293008)≈ 94位或12字节。这根本不适合
TWORD

现在,您可以访问作为宏参数的字符串的各个字符。用这个

这会将字符串参数转换为字节声明,每个字节表示相应字符的ASCII码:

FORC value, <012345>
DB   '0' + value
ENDM
但单凭这一点并没有多大帮助


您可能能够使用和操作字符串宏(
CATSTR
INSTR
SUBSTR
)执行一些有用的操作。要将表示十进制整数的字符串转换为具有相同整数二进制表示形式的字节序列,还需要一些循环或递归。目前看来这并不容易,我也不完全确定这是否可能。

你想在汇编中编写一个bignum库?呵呵,真是太好了。我知道这不实用,但到目前为止,它极大地提高了我对汇编和MASM宏的理解。它工作得非常好。非常感谢。我会发布一些代码,但它相当长而且令人讨厌
DB '0'
DB '1'
DB '2'
DB '3'
DB '4'
DB '5'