指令系統(tǒng)是計(jì)算機(jī)硬件的語言系統(tǒng),也叫機(jī)器語言,它是軟件和硬件的主要界面,從系統(tǒng)結(jié)構(gòu)的角度看,它是系統(tǒng)程序員看到的計(jì)算機(jī)的主要屬性。指令系統(tǒng)表征了計(jì)算機(jī)的基本功能,決定了機(jī)器所要求的能力,也決定了指令的格式和機(jī)器的結(jié)構(gòu)。
51系列單片機(jī)一般使用匯編語言(Assembly Language)直接編程,其指令系統(tǒng)中,有進(jìn)行數(shù)據(jù)傳送、算術(shù)運(yùn)算、邏輯運(yùn)算、位操作、控制傳遞等功能的111條基本指令。此外也可以采用C語言進(jìn)行程序設(shè)計(jì)。
尋址方式尋址方式是CPU尋找操作數(shù)或操作數(shù)地址的方法,存放在不同位置的數(shù)據(jù)具有需要采用不同的方式進(jìn)行尋址,不同類型計(jì)算機(jī)的尋址方式也不同,它是計(jì)算機(jī)重要的性能指標(biāo)之一。MSC-51單片機(jī)有7種尋址方式。
立即尋址指令中直接給出參與操作的數(shù)據(jù),稱立即數(shù),用data表示。在匯編語言中,為標(biāo)明立即數(shù),為data加前綴”#”。立即數(shù)可以是8位和16位二進(jìn)制數(shù),分別用#data和#data16表示。
匯編指令格式:MOV A, #data
如:
MOV A, #30H ;8位立即數(shù)30H放入累加器ACC中 MOV DPTR, #2000H ;16位立即數(shù)2000H放入數(shù)據(jù)指針DPTR 直接尋址指令中直接給出參與操作的數(shù)據(jù)的地址,直接地址一般用direct表示。
匯編指令格式:MOV A, direct
如:
MOV A, 80H ;將80H單元,即P0口的內(nèi)容放入累加器ACC中 寄存器尋址參與操作的數(shù)據(jù)存放在寄存器中,匯編指令中直接以寄存器名來表示參與操作的數(shù)據(jù)地址,寄存器包括工作寄存器R0~R7、累加器ACC、寄存器B、數(shù)據(jù)指針DPTR。
匯編語言格式:MOV A, Rn ;n=0~7
如:
MOV A, R1 ;將R1中的內(nèi)容放入累加器ACC中 寄存器間接尋址二次尋址,尋址中寄存器的內(nèi)容為操作數(shù)所存放的地址。第一次尋址得到寄存器的內(nèi)容為(R0)、(R1)或(DPTR),第二次尋址是將第一次尋址得到的寄存器內(nèi)容作為地址,在其中存、取參與操作的數(shù)據(jù)。匯編語言中,寄存器前綴@是寄存器間接尋址的標(biāo)志,有@R0、@R1、@DPTR等。
匯編語言格式:MOV A, @R0/R1/DPTR
如:
MOV A, @DPTR ;將DPTR所指示的地址單元中的內(nèi)容放入累加器ACC中 變址尋址由兩個(gè)寄存器提供地址。若由ACC、PC提供,在匯編語言指令中尋址地址表示為@A+PC;若由ACC和DPTR提供,在匯編語言指令中尋址地址為@A+DPTR。其中,PC或DPTR被稱為基址寄存器,A被稱為變址寄存器,基址與變址相加為16位無符號(hào)加法。
若變址寄存器ACC中的內(nèi)容加基址寄存器DPTR(或PC)中內(nèi)容時(shí),低8位有進(jìn)位,則該進(jìn)位直接加到高位,不影響進(jìn)位標(biāo)志。因變址尋址指令多用于查表,故常稱為查表指令。
匯編語言格式:MOV A, @A+DPTP
如:
MOV A, @A+DPTR ;將A+DPTR所指示的地址單元中的內(nèi)容放入累加器ACC中 相對(duì)尋址以相對(duì)尋址指令的下一條指令的程序計(jì)數(shù)器PC的內(nèi)容為基值,加上指令機(jī)器代碼中的“相對(duì)地址”,形成新的PC值(要轉(zhuǎn)移的指令地址)。指令機(jī)器代碼中“相對(duì)地址”指的是用一個(gè)帶符號(hào)的8位二進(jìn)制補(bǔ)碼表示的偏移字節(jié)數(shù),其取值范圍為-128~+127,負(fù)數(shù)表示向后轉(zhuǎn)移,正數(shù)表示向前轉(zhuǎn)移。rel代表一個(gè)8位帶符號(hào)的偏移量,要轉(zhuǎn)移的指令地址=(PC)+相對(duì)尋址指令字節(jié)數(shù)+rel,“( )”代表存儲(chǔ)單元的內(nèi)容。
匯編語言格式:SJMP rel
如:
SJMP 08H ;指令代碼為雙字節(jié),該指令將轉(zhuǎn)到地址為(PC) + 02H + 08H 位尋址參與操作的數(shù)據(jù)為“位”,而不是字節(jié),是對(duì)片內(nèi)RAM中的位尋址區(qū)20H~2FH、SFR中11個(gè)可位尋址單元的位進(jìn)行操作。bit代表內(nèi)數(shù)據(jù)存儲(chǔ)器RAM或SFR的直接尋址位。
匯編語言格式:MOV C, bit
如:
MOV C, 00H ;或者寫成 MOV C, 20H.0 ;將字節(jié)地址20H的D0位內(nèi)容放到位累加器C中位尋址的位地址與直接尋址的字節(jié)地址形式完全一致,主要由操作碼進(jìn)行區(qū)分。
所有尋址方式的尋址范圍總結(jié)如下表:
尋址方式 尋址存儲(chǔ)器范圍立即尋址 程序存儲(chǔ)器ROM
直接尋址 片內(nèi)RAM低128KB,特殊功能寄存器SFR
寄存器尋址 工作寄存器R0~R7,A,C,DPTR,AB
寄存器間接尋址 片內(nèi)RAM低128KB,片外RAM
變址尋址 程序存儲(chǔ)器ROM (@A+DPTR,@A+PC)
相對(duì)尋址 程序存儲(chǔ)器ROM(相對(duì)尋址指令的下一指令PC值加 -128~+127)
位尋址 片內(nèi)RAM的20H到2FH字節(jié)地址的所有位,可位尋址SFR
指令系統(tǒng) 數(shù)據(jù)傳送指令 指令 功能
MOV (Move) 傳送內(nèi)部RAM和SFR的數(shù)據(jù)
MOVX (Move External RAM) 傳送外部RAM的數(shù)據(jù)(外部RAM只能和累加器ACC之間進(jìn)行傳送數(shù)據(jù))
MOVC (Move Code) 讀取并傳送ROM數(shù)據(jù)表格中的數(shù)據(jù)
PUSH (Push onto Stack) 入棧
POP (Pop from Stack) 出棧
XCH (Exchange) 全字節(jié)交換
XCHD (Exchange low-order Digit) 低半字節(jié)交換
SWAP 高、低字節(jié)互換
評(píng)論