源代码在这里
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
DB 5H,4H,6H,7H,1H,2H,3H,0H,8H,9H
START:CLR 00H
CLR C
MOV R7,#10
MOV R0,#30H
MOV A,@R0
LOOP:INC R0
MOV R2,A
SUBB A,@R0
MOV A,R2
JC NEXT
SETB 00H
XCH A,@R0
DEC R0
XCH A,@R0
INC R0
NEXT:MOV A,@R0
DJNZ R7,LOOP
JB 00H,START
SJMP $
END
都快被这搞无语掉了
你的Debug选项没有设置好,如图,把我画箭头的地方选项去掉,不要勾选.
另外,你的这个程序,DB指令是不可以放置到Main后面的,正常的做法,是放到整个程序的最后面.
追问我试过把勾去掉了,去掉就跑不进这个程序了。我把DB放到后面不去掉那个勾,程序是能运行了,但是没有实现想要的功能。这段程序是要实现将地址30H到39H所存的数据进行排序放入这片单元,是一次考试时让我们读指令判定其实现的功能的,所有程序应该没问题。不过原题没有DB指令。我想看下程序跑的过程,所以自己加了BD指令,想请教一下是不是不能这么赋值啊?
追答DB是定义常量伪指令,在在ROM里定义一段常量,记住,是在ROM里,而程序也是在ROM里存放的,所以,如果你把DB放在程序执行过程中,那么你所定义的DB就会被当作指令来执行了,而这个时候,就会出错误.
如果你要使用DB,第一,给这段常数加个标号,第二,放到程序最后面去,这样比较保险.
比如:
MOV DPTR,#TAB
MOV A,#01H
MOVC A @A+DPTR
..
..
..
ORG 7FFFH
TAB:
DB 01H,02H,....
DB语句不是指示以标号为起始地址的单元里存放8位二进制数吗?而且还没接触过反汇编,才开始学