????[1].?無條件轉(zhuǎn)移指令(4條)
????這組指令執(zhí)行完后,程序就會無條件轉(zhuǎn)移到指令所指向的地址上去。長轉(zhuǎn)移指令訪問的程序存儲器空間為16地址64kB,絕對轉(zhuǎn)移指令訪問的程序存儲器空間為11位地址2kB空間。
????????LJMP ?addr16 ????;addr16→(PC),給程序計數(shù)器賦予新值(16位地址)
????????AJMP ?addr11 ????;(PC)+2→(PC),addr11→(PC10-0)程序計數(shù)器賦予新值(11位地址),(PC15-11)不改變
????????SJMP ?rel ????????;(PC)+ 2 + rel→(PC)當前程序計數(shù)器先加上2再加上偏移量給程序計數(shù)器賦予新值
????????JMP ?@A+DPTR ??;(A)+ (DPTR)→(PC),累加器所指向地址單元的值加上數(shù)據(jù)指針的值給程序計數(shù)器賦予新值
????[2].?條件轉(zhuǎn)移指令(8條)
????程序可利用這組豐富的指令根據(jù)當前的條件進行判斷,看是否滿足某種特定的條件,從而控制程序的轉(zhuǎn)向。
????????JZ ?rel???????????????; A=0,(PC)+ 2 + rel→(PC),累加器中的內(nèi)容為0,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行
????????JNZ ?rel??????????????; A≠0,(PC)+ 2 + rel→(PC),累加器中的內(nèi)容不為0,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行
????????CJNE ?A, data, rel?????; A≠(data),(PC)+ 3 + rel→(PC),累加器中的內(nèi)容不等于直接地址單元的內(nèi)容,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行
????????CJNE ?A, #data, rel????; A≠#data,(PC)+ 3 + rel→(PC),累加器中的內(nèi)容不等于立即數(shù),則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行
????????CJNE ?Rn, #data, rel??; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的內(nèi)容不等于立即數(shù),則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行
????????CJNE ?@Ri, #data, rel?; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址單元中的內(nèi)容不等于立即數(shù),則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行
????????DJNZ ?Rn, rel?; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)工作寄存器Rn減1不等于0,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行
????????DJNZ ?data, rel?; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)直接地址單元中的內(nèi)容減1不等于0,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行
????[3].?子程序調(diào)用指令(1條)
????子程序是為了便于程序編寫,減少那些需反復執(zhí)行的程序占用多余的地址空間而引入的程序分支,從而有了主程序和子程序的概念,需要反復執(zhí)行的一些程序,我們在編程時一般都把它們編寫成子程序,當需要用它們時,就用一個調(diào)用命令使程序按調(diào)用的地址去執(zhí)行,這就需要子程序的調(diào)用指令和返回指令。
????????LCALL ?addr16?; 長調(diào)用指令,可在64kB空間調(diào)用子程序。此時(PC)+ 3→(PC),(SP)+ 1→(SP),(PC7-0)→(SP),(SP)+ 1→(SP),(PC15-8)→(SP),addr16→(PC),即分別從堆棧中彈出調(diào)用子程序時壓入的返回地址
????????ACALL ?addr11?; 絕對調(diào)用指令,可在2kB空間調(diào)用子程序,此時(PC)+ 2→(PC),(SP)+ 1→(SP),(PC7-0)→(SP),(SP)+ 1→(SP),(PC15-8)→(SP),addr11→(PC10-0)
????????RET ?; 子程序返回指令。此時(SP)→(PC15-8),(SP)- 1→(SP),(SP)→(PC7-0),(SP)- 1→(SP)
????????RETI ?; 中斷返回指令,除具有RET功能外,還具有恢復中斷邏輯的功能,需注意的是,RETI指令不能用RET代替
????[4].?空操作指令(1條)
????這條指令將累加器中的內(nèi)容清0。
????????NOP ????; 這條指令除了使PC加1,消耗一個機器周期外,沒有執(zhí)行任何操作??捎糜诙虝r間的延時
評論
查看更多