如何将变量的值移动到汇编中的另一个变量

How to move a variable's value into another variable in assembly

我正在尝试学习使用 MPLAB X 和 PIC18F1320 微控制器进行汇编编程。我一直在遵循 MPASM 用户指南 (http://ww1.microchip.com/downloads/en/DeviceDoc/33014J.pdf),并从我的微控制器上的 RB0 引脚获得了一个闪烁的 LED。我写了一个程序让 LED 每 512 滴答闪烁一次。我无法弄清楚如何将延迟从 512 更改为可变数量,以便我可以在代码中的其他地方更改它。理想情况下,行

        movf    0xFF,count1

将替换为

        count1=delay1

其中 delay1 是代码前面设置为 0x20 的变量。

代码如下:

#include "p18F1320.inc"

 CONFIG  OSC = INTIO1          ; Oscillator Selection bits (Internal RC oscillator, CLKO function on RA6 and port function on RA7)

 cblock 0x20    ;start of data section
 count1         ;delay variable
 delay1         ;length of delay
 endc

        org     00          ;\
        movwf   PORTB       ; |
        movlw   0x00        ; |
        movwf   TRISB       ; |--Start program and configure I/O pins
        movlw   0x00        ; |
        movwf   ADCON1      ; |
        movlw   b'00000110' ;/

        movwf   delay1      ; Set the variable delay1=0x20
        movlw   0x20        ;/

loop    call BLINKONCE      ; Blink loop
        goto loop           ;/

BLINKONCE                   ;\
        bsf     PORTB,4     ; |
        call    DELAY       ; |--makes I/O pin RB4 turn on and off once with a delay in between
        bcf     PORTB,4     ; |
        call    DELAY       ;/
DELAY
        movf    0xFF,count1 ;I want to be able to set count1=delay1 right here

loop2   decfsz count1, 1    ; Delay loop with length=count1
        goto loop2          ;/

        return  ; end program
        end     ;/

谢谢!

在 PIC18 设备上,您可以使用 movff 指令来执行您想要的操作 - 在两个寄存器之间复制一个值。 movf 指令只允许您将值从寄存器复制到工作寄存器。

此外,您的 movlwmovwf 指令在程序开始时的顺序也是从前到后。您调用 movlw 将常量值从程序存储器加载到工作寄存器,然后 movwf 将该值从工作寄存器复制到数据存储器。

该站点有在线 PIC 模拟器和教程,更详细地解释了这一切的工作原理:

http://www.microcontrollerjs.com