Assembly 在fasm中如何比较两个四字?
我需要检查一个四字不小于零 我将它们存储在MMX寄存器中:Assembly 在fasm中如何比较两个四字?,assembly,x86,fasm,Assembly,X86,Fasm,我需要检查一个四字不小于零 我将它们存储在MMX寄存器中: movq mm0, [inputNum] movq mm1, [zero] 但我找不到在mmx或sse中比较两个qwords的说明。。。有办法做到这一点吗?这是32位代码还是64位代码?您正在尝试将QWORD 64位整数与0或浮点数与0.0进行比较吗?如果这是32位代码,并且如果inputNum是64位(QWORD)有符号整数,那么要测试它是否为负,您需要做的就是加载inputNum
movq mm0, [inputNum]
movq mm1, [zero]
但我找不到在mmx或sse中比较两个qwords的说明。。。有办法做到这一点吗?这是32位代码还是64位代码?您正在尝试将QWORD 64位整数与0或浮点数与0.0进行比较吗?如果这是32位代码,并且如果
inputNum
是64位(QWORD)有符号整数,那么要测试它是否为负,您需要做的就是加载inputNum
的上4个字节([inputNum+4]
)输入寄存器并测试最高位(位31)是否为0。如果为0,则该值大于等于0。如果为1,则该值为负值。四字中最上面的一位是符号位。我已经猜出来了,谢谢!存在但需要SSE4.2,并且仅支持XMM REG,而不支持旧版MMX。但幸运的是,正如迈克尔·佩奇所指出的,你只需要检查符号位;其余的位与此无关,不需要加载。e、 g.测试字节[inputNum+7],0x80根据内存中整个qword的MSB将ZF和SF设置为所需的条件。或cmp
与0
相对。或者,如果您想在regs中使用这两个部分,而不是编写可以简单地将qword加载到RAX中的64位代码,那么只需将这两个部分加载到32位寄存器中即可。