gpt4 book ai didi

c - 阵列和组装

转载 作者:太空宇宙 更新时间:2023-11-04 04:02:43 26 4
gpt4 key购买 nike

如果我声明这 3 个数组

int a[10][10];
int b[10][15];
int c[10][30];

对于这三个数组中的哪一个,汇编代码会返回 [i][j] 元素?假设数组的起始地址存放在%ebx中。

pushl   %ebp
movl %esp, %ebp
movl 8(%ebp), %edx /* index i */
movl 12(%ebp), %ecx /* index j */
movl %edx, %eax
sall $4, %eax
subl %edx, %eax
addl %ecx, %eax
movl (%ebx,%eax,4), %eax
popl %ebp
ret

你是怎么解决这类问题的

最佳答案

我会通过做一些带有笔记的手写数学来解决这个问题,例如:

movl    8(%ebp), %edx          /* index i */
-> edx = i
movl 12(%ebp), %ecx /* index j */
-> ecx = j
movl %edx, %eax
-> eax = i
sall $4, %eax
-> eax = 16 * i
subl %edx, %eax
-> eax -= i, thus:
-> eax = 16 * i - i = 15 * i
addl %ecx, %eax
-> eax += j, thus:
-> eax = 15 * i + j
movl (%ebx,%eax,4), %eax
-> eax = array[4 * eax], thus:
-> eax = array[sizeof(int) * (15 * i + j)]

所以,在 eax 的最后,你得到了给定数组中的内容(由开头的 ebx 指向)位置 15 * i + j。这可以正确解决:

  • 一个整型数组
  • 第一个(最右边)维度为 15 的数组

鉴于此和您的三个数组:

int a[10][10];
int b[10][15];
int c[10][30];

这正确地寻址了 b,但不是 a 也不是 c

关于c - 阵列和组装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9952426/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com