如何解决用内联汇编交换数组中的 2 个整数会导致奇怪的内存值
int Perm[4326];
__asm
{ MOV EBX,6
FACT: MOV Perm[4320 + EBX * 4],EBX
DEC EBX
TEST EBX,EBX
JE FACTEND
JMP FACT
FACTEND: // This puts the numbers 1,2,3,4,5,6 in Perm[4320]...Perm[4325]
//In between there are is some recursion that's not relevant
MOV EBX,2
XOR ESI,ESI
MOV EAX,Perm[EBX*4+4319]
TEST AL,1
JZ EVEN
MOV ECX,Perm[4320]
MOV Perm[4320],EAX
MOV Perm[EBX * 4 + 4319],ECX
JMP KLOOP
EVEN: MOV ECX,Perm[ESI * 4 + 4320]
MOV Perm[ESI*4 + 4320],EAX
MOV Perm[EBX * 4 + 4319],ECX
KLOOP: INC ESI
从 Perm[4321] 到 Perm[4325] 的内存是这样的:
01000000 02000000 03000000 04000000 05000000 06000000
我正在纠结的是
MOV EAX,Perm[EBX*4+4319] 结果 EAX 为 00000002
虽然 MOV ECX Perm[4320*4] 导致 ECX 为 01000000
在交换后(偶数标签)内存变成
00000002 00000000 03010000 04000000 05000000 06000000
我正在尝试在汇编中实现数组排列的堆算法,在这种情况下是一个 int 数组。
由于这是小端,因此在内存中将 1 写为 01000000 是没有意义的,因为它应该是 00 00 00 01 ,我也不明白为什么我得到 2 个不同的结果,看似相同的指令(MOV EAX、Perm 和 MOV ECX、Perm)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。