8051汇编DPTR指针运算适配硬件变更的问题排查求助
8051汇编DPTR指针计算错误排查求助
问题背景
我们的嵌入式系统固件基于8051汇编开发,因硬件变更需适配调整。原程序从移位寄存器顺序读取比特存入固定长度数据段,用于后续复杂计算;硬件变更后,比特顺序反转且每8位块存在复杂置换逻辑。
我们将原C逻辑(顺序索引访问TimeBuffer和DataBuffer)改写为通过GetNewIndex(i)获取新索引的版本,但在8051汇编实现时遇到DPTR指针运算问题:原实现通过INC DPTR循环递增指针,新实现需每次循环重新计算DPTR(将新索引与数据段起始地址相加)。
当前代码在Keil uVision 2中编译无错误警告,但运行结果不符合预期;我们已排除GetNewIndex子程序的影响——改用手动递增索引后,结果仍异常。现怀疑指针索引的加法逻辑存在根本性错误,附上原汇编代码与修改后的代码,恳请帮忙排查指针计算及其他部分的错误。
原汇编代码
MOV DPS,#1 MOV DPTR,#DataBuffer MOV DPS,#0 mov dptr,#TimeBuffer mov R0,LEN readD: MOV C,P1.1 ; read data pin of shift register JNC shiftD MOV DPS,#0 movx a,@dptr JNZ shiftD MOV DPS,#1 movx a,@dptr INC ACC MOVX @DPTR,A shiftD:setb P1.0 ; clock pin high of shift register clr P1.0 ; clock pin low of shift register MOV DPS,#0 inc dptr MOV DPS,#1 INC DPTR djnz R0,readD
修改后的汇编代码
;MOV DPS,#1 ;MOV DPTR,#DataBuffer ;MOV DPS,#0 ;mov dptr,#TimeBuffer mov R0,LEN mov R1,#0h leseD: MOV R7,REG1 MOV DPS,#1 MOV DPTR,#DataBuffer MOV A,DPL ADD A,R7 MOV DPL,A MOV A,DPH ADDC A,#0h MOV DPH,A MOV DPS,#0 mov dptr,#TimeBuffer MOV A,DPL ADD A,R7 MOV DPL,A MOV A,DPH ADDC A,#0h MOV DPH,A MOV C,P1.1 ; read data pin of shift register JNC shiftD MOV DPS,#0 movx a,@dptr JNZ shiftD MOV DPS,#1 movx a,@dptr INC ACC MOVX @DPTR,A shiftD:setb P1.0 ; clock pin high of shift register clr P1.0 ; clock pin low of shift register ;MOV DPS,#0 ;inc dptr ;MOV DPS,#1 ;INC DPTR inc R1 djnz R0,readD
内容的提问来源于stack exchange,提问作者Daniel Jorge
相关产品推荐
相关产品推荐

