条件搬运指令:
条件搬运指令是指在满意必定条件时进行相对搬运。
判A内容是否为0搬运指令
JZ rel
JNZ rel
榜首指令的功用是:假如(A)=0,则搬运,不然次序履行(履行本指令的下一条指令)。搬运到什么当地去呢?假如依照传统的办法,就要算偏移量,很费事,好在现在咱们能够借助于机器汇编了。因而这第指令咱们能够这样了解:JZ 标号。即搬运到标号处。下面举一例阐明:
MOV A,R0
JZ L1
MOV R1,#00H
AJMP L2
L1: MOV R1,#0FFH
L2: SJMP L2
END
在履行上面这段程序前假如R0中的值是0的话,就搬运到L1履行,因而终究的履行成果是R1中的值为0FFH。而假如R0中的值不等于0,则次序履行,也便是履行 MOV R1,#00H指令。终究的履行成果是R1中的值等于0。
榜首条指令的功用清楚了,第二条当然就好了解了,假如A中的值不等于0,就搬运。把上面的那个比如中的JZ改成JNZ试试吧,看看程序履行的成果是什么?
比较搬运指令
CJNE A,#data,rel
CJNE A,direct,rel
CJNE Rn,#data,rel
CJNE @Ri,#data,rel
榜首条指令的功用是将A中的值和当即数data比较,假如两者持平,就次序履行(履行本指令的下一条指令),假如不持平,就搬运,同样地,咱们能够将rel了解成标号,即:CJNE A,#data,标号。这样运用这条指令,咱们就能够判别两数是否持平,这在许多场合对错常有用的。但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功用,假如两数不持平,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来完成的。假如前面的数(A中的)大,则CY=0,不然CY=1,因而在程序搬运后再次运用CY就可判别出A中的数比data大仍是小了。
例:
MOV A,R0
CJNE A,#10H,L1
MOV R1,#0FFH
AJMP L3
L1: JC L2
MOV R1,#0AAH
AJMP L3
L2: MOV R1,#0FFH
L3: SJMP L3
上面的程序中有一条指令咱们还没学过,即JC,这条指令的原型是JC rel,效果和上面的JZ相似,可是它是判CY是0,仍是1进行搬运,假如CY=1,则搬运到JC后边的标号处履行,假如CY=0则次序履行(履行它的下面一条指令)。
剖析一下上面的程序,假如(A)=10H,则次序履行,即R1=0。假如(A)不等于10H,则转到L1处持续履行,在L1处,再次进行判别,假如(A)>10H,则CY=1,将次序履行,即履行MOV R1,#0AAH指令,而假如(A)<10H,则将搬运到L2处指行,即履行MOV R1,#0FFH指令。因而终究成果是:本程序履行前,假如(R0)=10H,则(R1)=00H,假如(R0)>10H,则(R1)=0AAH,假如(R0)<10H,则(R1)=0FFH。
弄懂了这条指令,其它的几条就相似了,第二条是把A傍边的值和直接地址中的值比较,第三条则是将直接地址中的值和当即数比较,第四条是将间址寻址得到的数和当即数比较,这儿就不详谈了,下面给出几个相应的比如。
CJNE A,10H ;把A中的值和10H中的值比较(留意和上题的差异)
CJNE 10H,#35H ;把10H中的值和35H中的值比较
CJNE @R0,#35H ;把R0中的值作为地址,从此地址中取数并和35H比较
循环搬运指令
DJNZ Rn,rel
DJNZ direct,rel
榜首条指令在前面的比如中有具体的剖析,这儿就不多谈了。第二条指令,仅仅将Rn改成直接地址,其它相同,也不多说了,给一个比如。
DJNZ 10H,LOOP
3.调用与回来指令
(1)主程序与子程序在前面的灯的试验中,咱们已用到过了子程序,仅仅咱们并没有明确地介绍。子程序是干什么用的,为什么要用子程序技能呢?举个比如,咱们数据教师安置了10道算术题,通过调查,每一道题中都包括一个(3*5+2)*3的运算,咱们能够有两种挑选,榜首种,每做一道题,都把这个算式算一遍,第二种挑选,咱们能够先把这个成果算出来,也便是51,放在一边,然后要用到这个算式时就将51代进去。这两种办法哪种更好呢?不用多言。规划程序时也是这样,有时一个功用会在程序的不同当地重复运用,咱们就能够把这个功用做成一段程序,每次需求用到这个功用时就“调用”一下。
(2)调用及回进程:主程序调用了子程序,子程序履行完之后有必要再回到主程序持续履行,不能“一去不回头”,那么回到什么当地呢?是回到调用子程序的下面一条指令持续履行(当然啦,要是还回到这条指令,不又要再调用子程序了吗?那可就没完没了了……)。参阅图1
调用指令
LCALL addr16 ;长调用指令
ACALL addr11 ;短调用指令
上面两条指令都是在主程序中调用子程序,两者有必定的差异,但在初学时,能够不加以区别,并且能够用LCALL 标号,ACALL 标号,来了解,即调用子程序。
(5)回来指令 则说了,子程序履行完后有必要回到主程序,怎么回来呢?只需履行一条回来指令就能够了,即履行
ret
指令
4.空操作指令
nop
空操作,便是什么事也不干,停一个周期,一般用作短时间的延时。