【发布时间】:2018-07-31 20:18:05
【问题描述】:
我想比较两个 4 字符的字符串。例如“A”、“T”、“T”、“C” 反对“A”、“T”、“T”、“c”。我已将这些字符存储在 C++ 中的一个数组中,我想在一条指令中比较这两个单词。此外,我不想使用循环进行比较。如何将这些单词存储在“eax”和“ebx”寄存器中并相互比较?
int _tmain()
{
char b[3],a[3];
b[0]='A',b[1]='T',b[2]='C',b[3]='G';
a[0]='A',a[1]='T',a[2]='C',a[3]='G';
__asm
{
movzx eax,b[1] //here i want to load b to eax
}
getchar();
return 0;
}
如果有其他想法可以在一条指令中比较两个单词,请分享,谢谢。
【问题讨论】:
-
您有大小为 3 的数组,但正在为它们分配 4 个东西。
-
memcmp呢? -
为什么要组装?标准库函数比您可以编写的任何程序集都更有效。我敢打赌,
memcmp通常会比您编写的任何程序集做得更好。 -
扩展@4386427 的评论,这有一种非常强烈的Premature Optimization 气味
-
@RezaBehboodi 用汇编语言编写并不能保证高速。事实上,这意味着你走得快,“你”知道怎么走。编译器在优化速度方面可能要好得多。因此,如果您正确使用高级构造,您的速度将与“编译器”知道的一样快(在大多数情况下,它可能会击败“你”(当它没有击败你时,你会等于你)。这就是dgbuff 说的是过早优化。
标签: c++ assembly visual-c++ x86 inline-assembly