MARIE汇编排序代码报错:HEX数组定义行语法问题求助
MARIE汇编冒泡排序错误排查与修正
错误原因
你在NUMBERS行用HEX 5, 35...的写法违反了MARIE汇编器的语法规则:MARIE的HEX伪指令不支持单条语句内用逗号分隔多个数值,每个十六进制数据必须单独占一行,或在连续的内存地址中逐一定义。这就是模拟器报错且汇编列表空白的直接原因。
修正后的完整代码(从大到小排序,原地存储)
ORG 100 Start, LOAD N ; 加载元素数量到AC STORE OuterLoopCount ; 初始化外层循环计数器 OuterLoop, LOAD OuterLoopCount SUBTRACT One STORE OuterLoopCount ; 外层循环计数减1 SKIPCOND 800 ; 如果计数器<=0,跳出外层循环 JUMP EndSort LOAD Zero STORE InnerLoopCount ; 初始化内层循环计数器 InnerLoop, LOAD InnerLoopCount SUBTRACT OuterLoopCount SKIPCOND 800 ; 如果内层计数器>=外层计数器,结束内层循环 JUMP OuterLoop LOAD NUMBERS, I ; 加载当前元素 STORE Temp LOAD NUMBERS+1, I ; 加载下一个元素 SUBTRACT Temp SKIPCOND 000 ; 如果下一个元素 < 当前元素(即当前元素更大),不交换 JUMP NoSwap ; 执行交换:当前元素和下一个元素互换 LOAD Temp STORE NUMBERS+1, I LOAD NUMBERS, I STORE Temp LOAD Temp STORE NUMBERS, I NoSwap, LOAD InnerLoopCount ADD One STORE InnerLoopCount ; 内层循环计数加1 JUMP InnerLoop EndSort, HALT ; 排序结束,停机 ; 数据定义 N, HEX A ; 元素数量:10(十六进制A) One, HEX 1 Zero, HEX 0 OuterLoopCount, HEX 0 InnerLoopCount, HEX 0 Temp, HEX 0 NUMBERS, HEX 5 ; 原始数据,逐一定义 HEX 35 HEX 75 HEX 45 HEX 85 HEX 25 HEX 95 HEX 55 HEX 15 HEX 65
关键说明
- 数据部分:所有待排序的十六进制数单独用
HEX指令定义,从NUMBERS地址开始连续存储,符合MARIE的内存分配规则。 - 排序逻辑:采用冒泡排序的从大到小实现,通过双层循环遍历数组,比较相邻元素并交换位置,最终将排序结果存回原数组地址。
- 指令细节:使用MARIE的间接寻址(
, I)来动态访问数组元素,通过SKIPCOND指令判断循环终止条件和元素大小关系。
内容的提问来源于stack exchange,提问作者Tyler Chetty
相关产品推荐
相关产品推荐

