为什么我们不能在ALP中减少数据指针?

时间:2018-04-19 11:32:45

标签: assembly 8051

因为我们可以在ALP中增加数据指针:

INC DPTR;  //valid

但我们不能使用:

DEC DPTR;  //invalid

相反,我们必须使用:

DEC DPL;  //decrementing the lower nibble of Data Pointer

问题:

  1. 为什么我们不能减少数据指针?
  2. 如果不允许递减数据指针,那么我们如何减少它的低位半字节呢?

2 个答案:

答案 0 :(得分:0)

8051微控制器的结构类似于tha,未提供用于递减16位数据指针(DTPR)的指令。

减少数据指针的唯一方法是分别减少低字节和高字节。 即 DEC DPL和DEC DPH尽管递减仍然涉及其他几条指令。

答案 1 :(得分:0)

1. MCS-51 ISA中没有这样的指令用于递减数据指针或(DPTR寄存器)

2.递减数据指针就是分别递减低字节和高字节。 DEC DPLDEC DPH

递减数据指针的过程

首先减少 dpl DEC DPL 并检查进位标志(因为如果 DPL 已经包含 0x00 例如 DPTR = 0x4500)如果 C=1 减少 dph DEC DPH 和将 '0xFF 移入 DPL 寄存器

看看这个子程序

MAIN_PROGRAM:
    .......
    .......
    CALL DEC_DPTR 
    ......





    ;DECREMENT DATA POINTER SUBROUITNE 
        DEC_DPTR:
            MOV A, DPL 
            SUBB A, #01 
            JNC SKIP_DEC_DPTR
            MOV A, #0XFF 
            DEC DPH 
        SKIP_DEC_DPTR:
            MOV DPL, A 
            RET