求助!汇编语言keil编译报错error A39: REGISTER OPERAND EXPECTED
报错内容截图原程序:ORG0000HMOVDPTR,#TABLEMOVR0,#30HLOOP:MOVA,@R0MOVCA,@DPTRINCACJNEA,@R0,NEXT1...
报错内容截图
原程序:
ORG 0000H
MOV DPTR,#TABLE
MOV R0,#30H
LOOP: MOV A,@R0
MOVC A,@DPTR
INC A
CJNE A,@R0,NEXT1
NEXT1: JC NEXT2
SJMP NEXT3
NEXT2: ADD A,#1FH
MOV @R0,A
NEXT3: INC R0
CJNE @R0,#00H,LOOP
RET
ORG 0100H
TABLE: DB 41H,42H,43H,44H,45H,46H,47H,48H,49H,4AH,4BH,4CH,4DH,4EH,4FH,50H,51H,52H,53H,54H,55H,56H,57H,58H,59H,5AH
END 展开
原程序:
ORG 0000H
MOV DPTR,#TABLE
MOV R0,#30H
LOOP: MOV A,@R0
MOVC A,@DPTR
INC A
CJNE A,@R0,NEXT1
NEXT1: JC NEXT2
SJMP NEXT3
NEXT2: ADD A,#1FH
MOV @R0,A
NEXT3: INC R0
CJNE @R0,#00H,LOOP
RET
ORG 0100H
TABLE: DB 41H,42H,43H,44H,45H,46H,47H,48H,49H,4AH,4BH,4CH,4DH,4EH,4FH,50H,51H,52H,53H,54H,55H,56H,57H,58H,59H,5AH
END 展开
1个回答
展开全部
你这就是一个主程序,也不是什么子程序,怎么能有RET指令呢?删掉这行。
如果想回到LOOP行,就改成AJMP LOOP
那个TABLE的起始行也不用ORG定义,就接着写就行,编译时会自动编排TABLE的起始地址的,不必定义,有点多余了。
如果想回到LOOP行,就改成AJMP LOOP
那个TABLE的起始行也不用ORG定义,就接着写就行,编译时会自动编排TABLE的起始地址的,不必定义,有点多余了。
追问
但是这些地方并不是error存在的地方呀。删掉这行error也还是存在
而且改成AJMP LOOP 不就无条件一直跳回去了吗我需要判断如果R0指向的内容不等于0才跳回去。等于0就不跳回去了
追答
MOVC A,@DPTR
这行错误,应该是MOVC A,@A+DPTR
CJNE A,@R0,NEXT1
这行也错误,没有这条指令,A不能和@R0比较
可以写成CJNE @R0, #0, NEXT1
或者:CJNE A,单元地址,NEXT1
可以把@R0中的数放在一个单元里,指令中给出单元地址
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询