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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:45:39