gpt4 book ai didi

c - 如何在汇编中处理二维数组

转载 作者:行者123 更新时间:2023-12-05 01:31:18 25 4
gpt4 key购买 nike

一直在看一本汇编语言程序设计的书,里面有一道练习题,我好像想不通。问题是给定函数原型(prototype)

void multiply2D (unsigned char image[numRows][numCols], int numRows, int numCols,
int factor)

我应该找到一种在汇编中编写函数的方法,该函数在不使用嵌套循环的情况下将整个数组乘以 factor

我知道二维阵列会在 assembly 中衰减为单个线性阵列,但我无法找出一种算法来指示何时停止(即到达阵列末端)。我考虑过简单地将列和行相乘以获得整体大小,但是它指出行乘以列的大小可能不适合整数。

最佳答案

在这种情况下,二维数组实际上是一个大小为 numRows * numCols 的完整线性数组。因此,您必须执行 32x32=64 乘法,其中 64 位答案将在某处的某个寄存器中(查看 assembler reference 以获得您需要的指令)。

在伪代码中你需要:

reg_64 rsize = numRows * numCols
reg_64 count = 0

while( count < rsize )
image[count] *= factor

i7 具有 64 位寄存器访问权限,因此您可以访问 64 位类型。

如果你真的很纠结,你当然可以用C语言编写并编译,然后用objdump反汇编,看看编译器是如何解决问题的!它可能不是最有效的,但它至少是一个答案!

关于c - 如何在汇编中处理二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27184884/

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