Assembly 用pic微控制器清除存储器位置

Assembly 用pic微控制器清除存储器位置,assembly,microcontroller,low-level,pic,Assembly,Microcontroller,Low Level,Pic,我是asm和嵌入式系统的初学者。我正在看一段代码,它是用来使用“间接”寄存器清除内存位置的(或者类似的东西——不确定)。代码如下所示: movlw 0x20 movwf FSR loop clrf INDF incf FSR, F btfsc FSR, 7 goto loop movlw 0x20 movwf-FSR 循环clrf INDF incf FSR,F btfsc FSR,7 转到环路 我没有得到incf FSR,F部分。指令incf采用两个操作数

我是asm和嵌入式系统的初学者。我正在看一段代码,它是用来使用“间接”寄存器清除内存位置的(或者类似的东西——不确定)。代码如下所示:

movlw 0x20 movwf FSR loop clrf INDF incf FSR, F btfsc FSR, 7 goto loop movlw 0x20 movwf-FSR 循环clrf INDF incf FSR,F btfsc FSR,7 转到环路
我没有得到
incf FSR,F
部分。指令
incf
采用两个操作数;它增加第一个位置的值,并将结果存储在第二个位置。在这种情况下,
F
将具有递增的值,那么为什么我们要对
FSR
进行测试

incf是增量文件寄存器。第二个参数是目的地,它是寄存器本身(F)或工作寄存器(W),实际上是一个标志。PIC指令只能有一个文件寄存器地址,因此您要递增指令中唯一的寄存器FSR。没有寄存器F这样的东西


仔细阅读PIC的指令集参考。

F表示文件寄存器,它是代码d(目标)选择位;d=0:将结果存储在W中,d=1:将结果存储在文件寄存器f中。默认值为d=1

编译器应理解:

;Increment FSR byte and result store back to FSR
    incf FSR, F
    or
    incf FSR, 1
;Increment FSR byte and result store to W reg
    incf FSR, w
    or
    incf FSR, 0

好的,F只是指一个内存位置。将“FSR”视为指向内存位置的指针

            movlw 0x20     // put's the number 0x20 into the W register
            movwf FSR      // put's condense of W register in memory Loc "FSR"       
    loop    clrf INDF      // clear location pointed at by the value in W register. 
            incf FSR, F    // increment the content of the FSR
            btfsc FSR, 7   // test bit7 in the FSR and skip if set (exiting the loop)
            goto loop      // go back to loop. and do next memory location.

现在我看到的问题是,它将退出第一次运行,因为FSR=0x20,所以位7是清除的,所以它退出循环。所以我想知道btfsc是否应该是btfss。然后它将从0x20循环到0xF0,这将更有意义

最后一点让我困惑:你所说的“没有F”是什么意思?我的意思是F不是另一个寄存器。这是一面旗帜。答案已更新。所以在本例中,
F
只是说增加同一个文件本身。。。?这是否意味着与其他指令相同,例如decf。F的技术名称是什么?Flag?@Deowalk:是的,其他说明也一样。如果您查看处理器的数据表,您会发现许多指令包含两个参数:寄存器和目标。目标只是一个
标志
,这意味着它只有两个值:0或1。根据这些说明,您可以选择是将新值保留在
W
(工作寄存器)中,还是将新值写回第一个参数中指定的文件寄存器。请告诉我文件寄存器是什么?“文件”形容词的意思是什么?@user1534664:Microchip使用
文件寄存器
类似于内存位置的术语。这仅限于数据内存还是也包括程序内存?@user1534664:yes仅用于数据内存。由于程序内存是只读的,因此无法注册。