遵循汇编代码中的内存位置

时间:2019-06-15 12:40:39

标签: microcontroller pic pic18

我需要找出这段代码的目的,以及如何知道内存位置的值是什么?

我把几行记下来,然后迷路了

MOVLW     3             ; W = 3
MOVWF     0x05, A       ; (0x05) = 3
MOVLW     1             ; W = 1
MOVWF     0X10, A       ; (0x10) = 1

ORG 0X000
GOTO      MAIN
MAIN: 
CLRF      TRISC, A
MOVLW     3
MOVWF     0x05, A
MOVLW     1
MOVWF     0X10, A

B1: 
MULLW     2
MOVF      PRODL, 0, A
MOVWF     LATC, A
MOVWF     0X10, A
DECFSZ    0X05, 1, A
BRA       B1

FIN:
BRA       FIN
END

1 个答案:

答案 0 :(得分:1)

MOVLW 3         ; W = 3
MOVWF 0x05, A       ; (0x05) = 3
MOVLW 1         ; W = 1
MOVWF 0X10, A       ; (0x10) = 1

您已经破译了:)

ORG 0X000
GOTO MAIN

大概是人工产物吗?它们跳过了复位向量。您可以忽略这些行,无需在编写的任何代码中使用它们。

MAIN: CLRF TRISC, A

MAIN标签在语法上不重要。 CLRF TRISC清除端口C的三态缓冲区,将所有C引脚设置为输出。

MOVLW 3
MOVWF 0x05, A
MOVLW 1
MOVWF 0X10, A

0x05 = 3和0x10 = 1

B1: MULLW 2
MOVF PRODL, 0, A
MOVWF LATC, A
MOVWF 0X10, A
DECFSZ 0X05, 1, A
BRA B1

此部分是循环。每次迭代,我们将W寄存器加倍(乘以2)。结果存储在PRODL和PRODH寄存器中,我们将PRODL的内容(结果的低字节)移回W。

然后将其复制到LATC(端口C输出)和0x10。

然后,我们从0x05中减去1。

BRA B1带我们回到循环的起点。

FIN: BRA FIN
END

这些将永远无法实现,所以什么也不要做。