如何遍历x4000-x400A地址值并检查是否为0或1?代码求助
LC-3代码实现x4000至x400A地址值的0/1遍历检查
你当前的代码仅读取了x4000单个地址的值,缺少循环遍历的核心逻辑。要完成x4000到x400A(共11个地址)的全量检查,需要添加计数器、地址递增逻辑,并完善值的合法性判断,修正后的代码如下:
; 初始化起始地址x4000到R1 LEA R1, START_ADDR ; 设置循环计数器,x4000到x400A共11个地址,初始值为#11 LD R2, COUNT LOOP ; 加载当前地址的数值到R6 LDR R6, R1, #0 ; 数值为负数直接跳转至异常处理 BRn BREAK ; 将数值减1,判断是否大于1:原数>1时,减1后仍为正数 ADD R6, R6, #-1 BRp BREAK ; 地址指针递增,指向下一个待检查单元 ADD R1, R1, #1 ; 计数器减1 ADD R2, R2, #-1 ; 计数器不为0则继续循环 BRnp LOOP ; 所有地址检查通过后的执行逻辑(可按需补充) ; ... BREAK ; 数值不符合0/1要求时的异常处理逻辑 ; ... START_ADDR .FILL x4000 COUNT .FILL #11
关键改进说明:
- 循环计数器:用R2记录需要检查的地址总数(11个),每次循环后递减,直到计数器归零时终止循环,确保遍历所有目标地址
- 地址递增:每次循环执行
ADD R1, R1, #1,让地址寄存器R1依次指向x4000、x4001……x400A - 合法性校验:
BRn BREAK:直接过滤负数(0和1均为非负数)- 先将数值减1再用
BRp BREAK:原数为1时减1后为0,不会触发跳转;原数大于1时减1后仍为正数,触发异常跳转
内容的提问来源于stack exchange,提问作者NoobierNoob
相关产品推荐
相关产品推荐

