You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++内联汇编计算n阶矩阵i+j>4元素和出错,求问题排查

矩阵元素和计算错误排查(内联汇编实现)

问题根源

原代码的核心错误是判断逻辑完全不符合需求:需求是累加i+j>4的元素,但代码中用cmp ecx, 0和cmp ebx, 0进行判断,仅当行索引i和列索引j都大于0时才累加元素,这相当于累加所有非第一行、非第一列的元素(共9个值为1的元素),所以输出结果为9。

数组地址计算部分逻辑正确:edx = ecx*n + ebx得到元素的下标偏移,4*edx转换为字节偏移(int类型占4字节),通过[A + 4*edx]访问元素的方式没问题。

修正方案

替换错误的判断逻辑,改为计算i+j的值并判断是否大于4:

  1. 计算i+j:将行索引ecx和列索引ebx相加
  2. 比较相加结果,若i+j <=4则跳过累加操作

修正后的代码

#include <iostream>
using namespace std;

const int n = 4; 

int main() {
    int A[n][n] = {
        {10000, 2000, 4000, 10000},
        {6000, 1, 1, 1},
        {11000, 1, 1, 1},
        {160000, 1, 1, 1}
    };

    int sum = 0;

    __asm
    {
        mov ecx, 0            // 行索引i初始化为0

        outer_loop:
        mov ebx, 0            // 列索引j初始化为0

            inner_loop :
            // 计算元素的下标偏移:i*n + j
            mov edx, ecx      
            imul edx, n       
            add edx, ebx       

            // 计算i+j,判断是否大于4
            mov eax, ecx
            add eax, ebx
            cmp eax, 4
            jle next_column   // 如果i+j <=4,跳过累加

            // 累加满足条件的元素
            mov eax, [A + 4 * edx]  
            add sum, eax            

            next_column :
        inc ebx           
            cmp ebx, n        
            jl inner_loop     

            inc ecx           
            cmp ecx, n        
            jl outer_loop     
    }

    cout << "Sum of elements where i + j > 4: " << sum << endl;

    return 0;
}

修正后结果说明

满足i+j>4的元素为:

  • 行2(i=2)、列3(j=3):值为1
  • 行3(i=3)、列2(j=2):值为1
  • 行3(i=3)、列3(j=3):值为1

正确结果为1+1+1=3,修正后的代码会输出该结果。

内容的提问来源于stack exchange,提问作者Batsamut Nikita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 21:06:01