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

请求协助排查并完善两数最大值查找汇编程序

你的最大值查找汇编代码问题分析与修正

先拆解你代码里的几个核心问题:

1. 内存加载指令冗余且逻辑错误

你用两次load读取A和B的值:

load r1, [A]
load r1, [r1]

大多数汇编架构中,load r1, A就能直接把标签A对应的.word值(12)加载到r1寄存器。如果[A]表示取A的内存地址,那第二次load r1, [r1]会去读取地址为12的内存内容,这完全不是你要的结果——你只是想读取A本身存储的12,所以这两步可以合并成load r1, A,B的读取同理。

2. 分支逻辑完全反转

你的分支判断是:

blt r1, r2, end
mov r1, r2

blt是当r1小于r2时跳转到end标签,这会导致:

  • 若r1 < r2:直接跳走,不执行mov,r1保留更小的数值
  • 若r1 >= r2:执行mov r1, r2,把更小的r2赋值给r1
    完全和“取最大值”的逻辑相反。

3. 无效指令load r1

这条指令没有操作数,属于语法错误,完全多余,直接删掉即可。

修正后的代码

假设你使用的是支持load/blt/mov/bra指令的汇编架构,修正后的代码如下:

A: .word 12
B: .word 24

; 直接加载A和B的数值到寄存器
load r1, A
load r2, B

; 如果r1 >= r2,直接跳走,不执行赋值
bge r1, r2, end
; 走到这里说明r1 < r2,把更大的r2赋值给r1
mov r1, r2
end:
bra +0  ; 无限循环停在这里

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:35:29