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

8x8矩阵下三角元素最小值的汇编实现问题排查

8x8矩阵下三角元素最小值查找汇编代码修复

错误根源

退出码-1073741819对应0xC0000005,本质是内存访问越界,你的汇编逻辑存在多处硬伤:

  • 循环计数器混用:loop指令会自动递减ecx,但你同时用ecx存储外层循环的行数,内层循环也调用loop,直接打乱计数器数值,导致后续内存地址计算完全错误。
  • 下三角遍历逻辑错误:根本没区分下三角(行号≥列号)的元素,地址跳转的计算完全不符合8x8 int矩阵的内存布局(每行8个int,占32字节)。
  • 最小值更新后未移动指针:update_min块只更新了最小值,没有执行add esi,4移动指针,会重复读取同一元素,最终引发死循环或非法内存访问。

修复后的完整代码

先明确下三角定义:矩阵中行号≥列号的元素(第i行仅遍历前i+1个元素,行/列从0开始),修复后的代码如下:

#include <iostream>
using namespace std;

int main()
{
    int matrix[8][8] = {
        {5, 3, 7, 1, 9, 2, 8, 4},
        {2, 6, 3, 1, 8, 5, 7, 3},
        {8, 2, 5, 4, 1, 9, 6, 3},
        {4, 6, 8, 2, 5, 7, 9, 1},
        {7, 3, 2, 5, 8, 1, 4, 6},
        {9, 1, 4, 6, 2, 3, 7, 8},
        {3, 5, 9, 7, 4, 8, 2, 1},
        {6, 8, 1, 3, 7, 6, 5, 4}
    };

    int min_element;

    __asm {
        mov ecx, 8          ; 外层循环:总共8行
        lea esi, matrix     ; esi指向矩阵起始地址
        mov edx, 0          ; edx记录当前行要遍历的列数上限(第0行仅列0)

        ; 初始化最小值为第一个下三角元素(第0行第0列)
        mov eax, [esi]
        mov min_element, eax

    outer_loop:
        add esi, 32         ; 跳到下一行开头(每行8个int,32字节)
        inc edx             ; 下一行多遍历1个元素(第i行遍历i+1个)
        mov ebx, edx        ; ebx作为内层循环计数器

    inner_loop:
        mov eax, [esi]      ; 读取当前元素
        cmp eax, min_element
        jl update_min       ; 比当前最小值小则更新

    next_element:
        add esi, 4          ; 指针移到下一个元素
        dec ebx
        jnz inner_loop      ; 内层循环未结束则继续

        dec ecx
        jnz outer_loop      ; 外层循环未结束则继续
        jmp end_loop        ; 所有循环结束

    update_min:
        mov min_element, eax ; 更新最小值
        jmp next_element    ; 继续处理下一个元素

    end_loop:
    }

    cout << "下三角元素的最小值是: " << min_element << endl;

    return 0;
}

核心修复说明

  • 分离循环计数器:外层用ecx统计行数,内层用ebx统计当前行的下三角元素数量,避免计数器冲突。
  • 精准遍历下三角:第i行仅遍历前i+1个元素,严格限定在行号≥列号的区域内。
  • 正确内存地址跳转:每行固定偏移32字节,每个元素偏移4字节,彻底避免越界访问。
  • 完善最小值更新逻辑:更新最小值后立即跳转至移动指针的步骤,不会重复读取同一元素。
  • 手动控制循环:用dec+jnz替代loop指令,避免ecx被意外修改,逻辑更清晰可控。

运行结果

修复后代码运行会输出:下三角元素的最小值是: 1,与矩阵下三角元素的实际最小值一致。

内容的提问来源于stack exchange,提问作者Not Found

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:57:54