Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;通过二维数组的内联部件循环_C++_Arrays_Assembly - Fatal编程技术网

C++ C++;通过二维数组的内联部件循环

C++ C++;通过二维数组的内联部件循环,c++,arrays,assembly,C++,Arrays,Assembly,所以我有一个家庭作业,我必须通过它进行一个2d数组循环,做一些计算,然后将它输出到一个不同的数组中。但是我几乎被卡住了,我不知道如何从第一个数组循环并将元素分配给第二个数组。在下面的代码中,我无法更改输入参数(因为这是一个家庭作业)。函数必须接受指向两个数组的指针。我想我已经处理了通过第一个数组的循环(我不是完全肯定的,它可能是错误的),主要问题是分配给第二个数组。当循环时,我没有对元素进行任何计算,因为第一件重要的事情实际上是使循环和第二个数组的赋值工作 功能: //To reach each

所以我有一个家庭作业,我必须通过它进行一个2d数组循环,做一些计算,然后将它输出到一个不同的数组中。但是我几乎被卡住了,我不知道如何从第一个数组循环并将元素分配给第二个数组。在下面的代码中,我无法更改输入参数(因为这是一个家庭作业)。函数必须接受指向两个数组的指针。我想我已经处理了通过第一个数组的循环(我不是完全肯定的,它可能是错误的),主要问题是分配给第二个数组。当循环时,我没有对元素进行任何计算,因为第一件重要的事情实际上是使循环和第二个数组的赋值工作

功能:

//To reach each element of the 2D array, i am using this formula: 
    // base + itemsize*rowsize*rowoffset + itemsize*itemoffset
// i got it from this video ( time 2:06 to see it ) : https://www.youtube.com/watch?v=IBor-6kiavI

// For each grade level variant implement own function, e.g.:
void solution_for_grade_7(const int * arr, size_t arr_rows, size_t arr_cols, int * result)
{
    //Calculate the sum of positive values for each row.
    __asm
    {
        // Your Inline Assembler instructions for grade X level go here
        // :::
        mov esi, arr
        mov ebx, result
        mov ecx, [arr_rows] ; loop at rows
outer:  push ecx ; loop stuff

        mov ecx, [arr_cols] ; loop at each element of row ( aka. eadch column of row )
inner:  push ecx ; loop stuff

        mov ebx, [esi]  ; i think the error is here
        add ebx, 4
        add esi, 4

        pop ecx ; loop stuff
        loop inner

        pop ecx ; loop stuff
        loop outer ; loop stuff
    }
}
呼叫代码:

const size_t ROWS = 2;
const size_t COLS = 3;

int main()
{
    // Change the array definitions and/or values to demonstrate your variant:
    int data1[ROWS][COLS] = { { 0, -1, 2 }, { 3, 4, -5 } };
    //int result1[ROWS]; // Note: for some variants the result array size depends on the COLS! 
int result1[ROWS*COLS];
    // Change the parameters according to your assignment function, e.g.:
    solution_for_grade_7((const int *)data1, ROWS, COLS, result1);

    // Print the result values to the console:
    for (size_t i = 0U; i < ROWS; i++)
        printf("%d ", result1[i]);
    printf("\n");

    // Add another input array definitions and/or values to demonstrate your variant:
    // :::

    // Examples of passing invalid arguments (must not fail for grade 10):
    // solution_for_grade_X((const int *)data1, ROWS, 0, 0);
    // solution_for_grade_X(0, 0, COLS, result1);
    // :::

    return 0;
}
const size\u t ROWS=2;
常数大小=3;
int main()
{
//更改数组定义和/或值以演示您的变体:
int data1[ROWS][COLS]={{0,-1,2},{3,4,-5};
//int result1[ROWS];//注意:对于某些变体,结果数组大小取决于COL!
int result1[ROWS*COLS];
//根据您的分配功能更改参数,例如:
7级((常量int*)数据1、行、列、结果1的解决方案;
//将结果值打印到控制台:
对于(大小i=0U;i
您几乎不应该编写内联ASM。让编译器从可读C++代码中生成它,这是一项任务要求,我只能在函数内部改变内联汇编。我可以在Main中调用这个函数。另外,根据需求,我不能改变。所以,你必须通过汇编中的2D数组和遗留C++代码中的赋值来写循环。asm中是否有“为什么”?确切/完整的作业是什么?如果我必须这样做,我会在C++中编写代码,并检查调试器/编译器在汇编中的行为,然后复制出来,因为C++只是将代码翻译成ASM。我喜欢这些东西,我会给你一个正确的答案:)布鲁。除了内联汇编和主函数外,我不能更改任何内容。如果是我的话,我甚至不会在C++下拉程序集中这样做。完整的任务是把所有负数加到const int *ARR的行上,把结果放在int *RESULTE中。让编译器从可读C++代码中生成它,这是一项任务要求,我只能在函数内部改变内联汇编。我可以在Main中调用这个函数。另外,根据需求,我不能改变。所以,你必须通过汇编中的2D数组和遗留C++代码中的赋值来写循环。asm中是否有“为什么”?确切/完整的作业是什么?如果我必须这样做,我会在C++中编写代码,并检查调试器/编译器在汇编中的行为,然后复制出来,因为C++只是将代码翻译成ASM。我喜欢这些东西,我会给你一个正确的答案:)布鲁。除了内联汇编和主函数外,我不能更改任何内容。如果是我的话,我甚至不会在C++下拉程序集中这样做。