我需要找出这段代码的目的,以及如何知道内存位置的值是什么?
我把几行记下来,然后迷路了
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
答案 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
这些将永远无法实现,所以什么也不要做。