请求协助排查并完善两数最大值查找汇编程序
你的最大值查找汇编代码问题分析与修正
先拆解你代码里的几个核心问题:
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
相关产品推荐
相关产品推荐

