Assembly 用间接寻址清除内存位置
嗨,我是pics汇编编码的新手。有一个代码我看不到:Assembly 用间接寻址清除内存位置,assembly,pic,Assembly,Pic,嗨,我是pics汇编编码的新手。有一个代码我看不到: BCF STATUS,IRP MOWLW 70h MOVWF FSR TOP CLR INDF INCF FSR,F BTFSS FSR,7 GOTO TOP 好的,这是我的问题:首先,这个INDF如何在FSR上工作?INCF FSR,F该递增指令如何在F寄存器上工作?感谢Microchip将帮助您理解说明 BCF STATUS,IRP ;Bit Clear register File ;C
BCF STATUS,IRP
MOWLW 70h
MOVWF FSR
TOP CLR INDF
INCF FSR,F
BTFSS FSR,7
GOTO TOP
好的,这是我的问题:首先,这个INDF如何在FSR上工作?INCF FSR,F该递增指令如何在F寄存器上工作?感谢Microchip将帮助您理解说明
BCF STATUS,IRP ;Bit Clear register File
;Clear bit IRP (bit7) of register STATUS (Select bank 0 and 1)
MOVLW 70h ;MOVe Literal to W register
;Set W = 70h (End of register, start of SRAM)
MOVWF FSR ;MOVe W to F
;Set FSR (File Select Register) = W = 70h
TOP ;Label
CLRF INDF ;CLeaR register File
;Clear register INDF (INDirect register File), this access memory location at FSR
INCF FSR,F ;INCrement register File
;Increment FSR and place the result in FSR (F parameter)
BTFSS FSR,7 ;Bit Test in register File, Skip if Set
;If bit7 of FSR is set skip next instruction (Break the loop)
GOTO TOP ;GO TO TOP label
PIC只有一个“内部”寄存器,称为W.PIC还有一个内部RAM(作为SRAM实现)。
内部RAM分为最多四个组,必须由程序员手动选择。
每个存储组为128字节 寄存器实际上是内部RAM中存储库中的地址,类似寄存器的状态只是数字3(寄存器地址,寄存器在每个存储库上镜像)的别名(用C术语定义)。
每个寄存器的宽度为8位。
每个组的第一个地址(在PIC16上,最长为20h)用于特殊功能寄存器。
任何银行中从20h到7fh(对于PIC16)的地址都用于通用寄存器或暂存RAM(这些概念与PIC架构一致)。
在同一版本中,从70h到7fh的地址在银行间镜像 PIC不支持指令级的间接地址。 要读取任意内存位置的内存,必须将其写入FSR,然后访问INDF将实际访问写入FSR的地址。
由于PIC寄存器是8位的,这将允许程序员访问像80h这样的地址(这在普通指令中是不可能的)。
状态中的IRP位处理此问题:如果为0,则INDF可以访问银行0和1(银行0范围为00h到7fh,银行1以上),如果为1,则访问银行2和3
因此,
BCF
指令清除IRP以选择气缸组0和1。接下来的两条指令只设置FSR=70h(没有
MOVLF
指令)。
CLRF
使用间接访问清除FSR给定的地址。INCF
增加FSR并将结果写回FSR(另一种形式是INCF FSR,W
,它将增加FSR并将结果设置为W)。BTFSS
用于中断循环,如果设置了FSR的第7位(即FSR>=80h),则跳过下一条指令(GOTO
),循环停止。微芯片将帮助您理解指令
BCF STATUS,IRP ;Bit Clear register File
;Clear bit IRP (bit7) of register STATUS (Select bank 0 and 1)
MOVLW 70h ;MOVe Literal to W register
;Set W = 70h (End of register, start of SRAM)
MOVWF FSR ;MOVe W to F
;Set FSR (File Select Register) = W = 70h
TOP ;Label
CLRF INDF ;CLeaR register File
;Clear register INDF (INDirect register File), this access memory location at FSR
INCF FSR,F ;INCrement register File
;Increment FSR and place the result in FSR (F parameter)
BTFSS FSR,7 ;Bit Test in register File, Skip if Set
;If bit7 of FSR is set skip next instruction (Break the loop)
GOTO TOP ;GO TO TOP label
BCF STATUS,IRP ; Clears the IRP bit of the STATUS register
MOWLW 70h ; Moves the hexadecimal value 70 into the "working register" (WREG)
MOVWF FSR ; Moves the value in WREG into the FSR register (this register is used as the address that INDF takes values from)
TOP CLR INDF ; Clears the register pointed to by the address in FSR
INCF FSR,F ; Adds one to the address in FSR (sets pointer to next address)
BTFSS FSR,7 ; Tests the highest bit of the 0x** value in the FSR register and skips the next instruction if it is 1
GOTO TOP ; Jumps to the code location with the label "TOP"
PIC只有一个“内部”寄存器,称为W.PIC还有一个内部RAM(作为SRAM实现)。
内部RAM分为最多四个组,必须由程序员手动选择。
每个存储组为128字节 寄存器实际上是内部RAM中存储库中的地址,类似寄存器的状态只是数字3(寄存器地址,寄存器在每个存储库上镜像)的别名(用C术语定义)。
每个寄存器的宽度为8位。
每个组的第一个地址(在PIC16上,最长为20h)用于特殊功能寄存器。
任何银行中从20h到7fh(对于PIC16)的地址都用于通用寄存器或暂存RAM(这些概念与PIC架构一致)。
在同一版本中,从70h到7fh的地址在银行间镜像 PIC不支持指令级的间接地址。 要读取任意内存位置的内存,必须将其写入FSR,然后访问INDF将实际访问写入FSR的地址。
由于PIC寄存器是8位的,这将允许程序员访问像80h这样的地址(这在普通指令中是不可能的)。
状态中的IRP位处理此问题:如果为0,则INDF可以访问银行0和1(银行0范围为00h到7fh,银行1以上),如果为1,则访问银行2和3
因此,
BCF
指令清除IRP以选择气缸组0和1。接下来的两条指令只设置FSR=70h(没有
MOVLF
指令)。
CLRF
使用间接访问清除FSR给定的地址。INCF
增加FSR并将结果写回FSR(另一种形式是INCF FSR,W
,它将增加FSR并将结果设置为W)。BTFSS
用于中断循环,如果设置了FSR的第7位(即FSR>=80h),则跳过下一条指令(GOTO
),循环停止
BCF STATUS,IRP ; Clears the IRP bit of the STATUS register
MOWLW 70h ; Moves the hexadecimal value 70 into the "working register" (WREG)
MOVWF FSR ; Moves the value in WREG into the FSR register (this register is used as the address that INDF takes values from)
TOP CLR INDF ; Clears the register pointed to by the address in FSR
INCF FSR,F ; Adds one to the address in FSR (sets pointer to next address)
BTFSS FSR,7 ; Tests the highest bit of the 0x** value in the FSR register and skips the next instruction if it is 1
GOTO TOP ; Jumps to the code location with the label "TOP"
基本上,这段代码将0x70到0x7F之间的所有RAM/内存设置为等于零,然后运行汇编代码段后面的任何代码
基本上,这段代码将0x70到0x7F之间的所有RAM/内存设置为零,然后它运行汇编代码段后面的任何代码。
INCF FSR,F
指令应将FSR增加1,以指向下一个内存地址。好的,让我问一下FSR旁边的F是什么?我的意思是什么是F,什么是符号化的?感谢您的回答,btwF或W是教学结果的平均目的地。因此,返回内存(SFR)或工作寄存器WREGINCF FSR,F
应该增加1的FSR内存内容,而INCF FSR,W
应该将FSR内容复制到WREG,并增加1的FSRINCF FSR,F
指令应该增加1的FSR,以指向下一个内存地址。好的,让我问一下FSR旁边的F呢?我的意思是什么是F,什么是符号化的?感谢您的回答,btwF或W是教学结果的平均目的地。因此,返回内存(SFR)或工作寄存器WREGINCF FSR,F
应将FSR内存内容增加1,而INCF FSR,W
应将FSR内容复制到WREG并增加1