我是汇编语言新手,我编写了一个简单的程序来学习。我遇到了带有“goto”指令的程序计数器问题(我相信)。我使用 PIC 10f202,并在模拟器模式下使用 MPLAB v.6.15 来调试代码。这是我的代码:
PROCESSOR 10f202
#include <xc.inc>
; CONFIG
CONFIG WDTE = OFF ; Watchdog Timer (WDT disabled)
CONFIG CP = OFF ; Code Protect (Code protection off)
CONFIG MCLRE = OFF ; Master Clear Enable (GP3/MCLR pin fuction is digital I/O, MCLR internally tied to VDD)
PSECT resetVect, class=CODE, delta=2
resetVect:
PAGESEL main
goto main
PSECT code, delta=2
main:
clrf GPIO ; clrf GPIO, F
movlw 0b0001000 ; configure GP1 (only) as an output
tris GPIO
loop:
bcf GPIO,0
bsf GPIO,0
movlw 256
movwf 0x10
nop
goto loop
END resetVect
程序从程序存储器 1F6(第 503 行)开始,指令为“goto main”。它执行所有代码行,但当到达指令“gotoloop”时,程序存储器行1FF不显示指令“gotoloop”,然后程序转到程序存储器行0c7,那里没有指令。它不会返回到预期的指令“bcf GPIO,0”。
起初,我使用“call”指令通过返回指令来调用子程序“循环”,但我收到错误消息,表明指令返回对于该 PIC 10F202 来说是非法指令。 我有一个旧的汇编代码,以前可以使用“goto”指令,但该代码是用 MPLAB 的旧编译器编译的:MPASM。在这段代码中(使用相同的 PIC 10f202),我使用了 goto 和 call 指令,并且编译得很好。 感谢您的帮助! 多米尼克
您使用的控制器 (PIC10F202) 是一个资源非常有限的设备。
从调用中返回的操作码只有一个,
RETLW 0x00 to 0xFF
这总是在 W 寄存器中设置一个文字值。
该控制器还有其他几个“功能”,这使得为其创建代码成为一项挑战。如:
还有很多其他人,我怀疑学习使用 pic-as 工具链编写汇编代码会非常令人沮丧。
对于我专为您创建的 MPLABX 项目,请参阅:
https://github.com/dsoze1138/MPLABXv5xx_pic-as_examples/blob/master/10F202_Example_v615.X/start.S