间接寻址 P16F877

问题描述 投票:0回答:1

假设我有两个数字n1和n2,一个在bank 0,另一个在bank 2,我想使用间接寻址方法对它们进行求和运算,这是我讲座中的代码,在mplab中测试后是错误的8.92,我需要有人纠正它,谢谢:

nbr1 equ 0xA0
nbr2 equ 0x121
som12 equ 0x1A2
; les instructions ci-dessus utilisant la directive (equ) peuvent être remplacées par la directive cblock :
; cblock 0x20
; nbr1, nbr2, som12
; endc
w equ 0
f equ 1
; la macro suivante (bank0) est un sous-programme qui permet de configurer STATUS pour pointer sur bank#0

; ------------- Programme principal ---------------------------------------
org 0x00 ; définir la position initiale dans la mémoire programme
debut
    ;nbr1:
    CLRF STATUS;IRP = 0
    movlw 0xA0
    movwf FSR  ;FSR=0xA0
    movlw 0xFF ; transférer la valeur (0x0A) dans l'accumulateur w
    movwf INDF ; transférer le contenu de W à l'adresse du nbr1

    ;nbr2:
    bsf STATUS, IRP;IRP = 1
    movlw 0x21
    movwf FSR ;FSR=0x21
    movlw 0x01 ; transférer la valeur (0x0A) dans l'accumulateur w
    movwf INDF
    
    ;Charger addresse de nbr1 dans FSR
    bcf STATUS, IRP;IRP = 0
    movlw 0xA0
    movwf FSR ;FSR=0xA0
    addwf INDF,w ; additionner w à la variable nbr2
    
    bsf STATUS, IRP;IRP = 1
    movlw 0xA2
    movwf FSR ;FSR=0xA2
    movwf INDF ; stoker le résultat de la somme à partir de w sur la variable som12
    goto debut ; réexécuter la boucle depuis le label « début »
    end```


I tried to rewrite the code but unfortunately i dont know much, im used to the x86 assembly so using PICs are abit difficult
assembly memory-address pic
1个回答
0
投票

图16中有两种寻址方式:

  1. 间接寻址。通过 INDF 寄存器访问字节使用 FSR 寄存器和 IRB 位(位于 STATUS 寄存器中)组成 9 位地址。
  2. 直接寻址。访问字节直接使用7位指令地址和2位RP0RP1STATUS寄存器中)组成9位地址。

代码示例

        nbr1  equ  0xA0
        nbr2  equ  0x121
    //Set indirect address of nbr1 = 0X0A0
        bcf   STATUS, IRP    ;SET FSR high bit to 0
        movlw 0xA0
        movwf FSR            ;nbr1 indirect address is set to FSR register as 0X0A0
        movf  INDF,w         ;load byte data to WREG
    //Set direct address of nbr2 = 0x121
        bcf   STATUS, RP0    ;set the high two bits of direct address
        bsf   STATUS, RP1    ;RP1 = 1 
        addwf nbr2,w         ;nbr2 direct address is 0X121 

nbr1nbr2相加的结果存储在WREGCARRY标志中。

如果您不想仅使用间接寻址,那么您必须使用另一个临时寄存器来存储第一个值。

© www.soinside.com 2019 - 2024. All rights reserved.