版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1/277第四章第四章 指令系統(tǒng)指令系統(tǒng) 及匯編語(yǔ)言程序設(shè)計(jì)及匯編語(yǔ)言程序設(shè)計(jì) 本章學(xué)習(xí)目標(biāo)本章學(xué)習(xí)目標(biāo)了解助記符、指令格式了解助記符、指令格式掌握單片機(jī)尋址方式掌握單片機(jī)尋址方式 掌握單片機(jī)指令系統(tǒng)掌握單片機(jī)指令系統(tǒng)掌握單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)及開(kāi)發(fā)環(huán)境掌握單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)及開(kāi)發(fā)環(huán)境2/2774.1 編程語(yǔ)言編程語(yǔ)言4.2 指令格式及其分類(lèi)指令格式及其分類(lèi)4.3 尋址方式尋址方式4.4 數(shù)據(jù)傳送類(lèi)指令數(shù)據(jù)傳送類(lèi)指令4.5 邏輯操作類(lèi)指令邏輯操作類(lèi)指令4.6 算術(shù)運(yùn)算類(lèi)指令算術(shù)運(yùn)算類(lèi)指令4.7 位操作指令位操作指令4.8 控制類(lèi)轉(zhuǎn)移指令控制類(lèi)轉(zhuǎn)移指令4.9 匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì)
2、4.10 匯編語(yǔ)言程序調(diào)試匯編語(yǔ)言程序調(diào)試4.11利用利用ISP工具將程序下載到單片機(jī)中驗(yàn)證程序工具將程序下載到單片機(jī)中驗(yàn)證程序第四章第四章 指令系統(tǒng)及匯編語(yǔ)言程序設(shè)計(jì)語(yǔ)言指令系統(tǒng)及匯編語(yǔ)言程序設(shè)計(jì)語(yǔ)言3/2771、指令及指令系統(tǒng)、指令及指令系統(tǒng) 指令是計(jì)算機(jī)完成某種指定操作的命令,指令是計(jì)算機(jī)完成某種指定操作的命令,程序是程序是以完成一定任務(wù)為目的指令的有序組合以完成一定任務(wù)為目的指令的有序組合。指令的集。指令的集合構(gòu)成指令系統(tǒng)。合構(gòu)成指令系統(tǒng)。2、指令兩種形式、指令兩種形式匯編指令的形式匯編指令的形式:人們進(jìn)行編寫(xiě)、調(diào)試程序使用:人們進(jìn)行編寫(xiě)、調(diào)試程序使用的形式;的形式;機(jī)器指令的形式機(jī)器
3、指令的形式:是機(jī)器所能識(shí)別的二進(jìn)制數(shù)或:是機(jī)器所能識(shí)別的二進(jìn)制數(shù)或十六進(jìn)制數(shù)的形式。十六進(jìn)制數(shù)的形式。4.1 4.1 編程語(yǔ)言編程語(yǔ)言4/277 編寫(xiě)計(jì)算機(jī)程序有三種不同層次的計(jì)算機(jī)語(yǔ)言編寫(xiě)計(jì)算機(jī)程序有三種不同層次的計(jì)算機(jī)語(yǔ)言機(jī)器語(yǔ)言機(jī)器語(yǔ)言、匯編語(yǔ)言匯編語(yǔ)言和和高級(jí)語(yǔ)言高級(jí)語(yǔ)言。機(jī)器語(yǔ)言機(jī)器語(yǔ)言用用二進(jìn)制數(shù)二進(jìn)制數(shù)表示的指令,是表示的指令,是CPU唯一能夠直唯一能夠直接識(shí)別和執(zhí)行的程序形式。接識(shí)別和執(zhí)行的程序形式。缺點(diǎn)缺點(diǎn)是不直觀,不易識(shí)別、理解和記憶,因是不直觀,不易識(shí)別、理解和記憶,因此編寫(xiě)、調(diào)試程序時(shí)都不采用這種形式的語(yǔ)此編寫(xiě)、調(diào)試程序時(shí)都不采用這種形式的語(yǔ)言。言。4.14.1編程語(yǔ)言
4、編程語(yǔ)言5/277匯編語(yǔ)言(匯編語(yǔ)言(Assembly Language)是用英文縮寫(xiě)形式的是用英文縮寫(xiě)形式的助記符助記符書(shū)寫(xiě)的指令,地址、書(shū)寫(xiě)的指令,地址、數(shù)據(jù)也可用符號(hào)表示。數(shù)據(jù)也可用符號(hào)表示。優(yōu)缺點(diǎn)優(yōu)缺點(diǎn):與機(jī)器語(yǔ)言程序相比,編寫(xiě)、閱讀和:與機(jī)器語(yǔ)言程序相比,編寫(xiě)、閱讀和修改都比較方便,不易出錯(cuò)。但用匯編語(yǔ)言編修改都比較方便,不易出錯(cuò)。但用匯編語(yǔ)言編寫(xiě)的源程序必須進(jìn)行匯編。寫(xiě)的源程序必須進(jìn)行匯編。目前,常用計(jì)算機(jī)軟件自動(dòng)完成匯編工作。目前,常用計(jì)算機(jī)軟件自動(dòng)完成匯編工作。不同的不同的CPU具有不同的匯編語(yǔ)言,一般不能通用。具有不同的匯編語(yǔ)言,一般不能通用。在實(shí)際系統(tǒng)中,對(duì)程序執(zhí)行速度要求
5、較高而軟在實(shí)際系統(tǒng)中,對(duì)程序執(zhí)行速度要求較高而軟件處理功能有限的場(chǎng)合,以及對(duì)硬件操作有較件處理功能有限的場(chǎng)合,以及對(duì)硬件操作有較強(qiáng)的針對(duì)性的場(chǎng)合,常用匯編語(yǔ)言編程。強(qiáng)的針對(duì)性的場(chǎng)合,常用匯編語(yǔ)言編程。6/277高級(jí)語(yǔ)言(高級(jí)語(yǔ)言(High Level Language)優(yōu)缺點(diǎn)優(yōu)缺點(diǎn):不針對(duì)某種具體的計(jì)算機(jī),通用性強(qiáng)。:不針對(duì)某種具體的計(jì)算機(jī),通用性強(qiáng)。用高級(jí)語(yǔ)言編程不需了解計(jì)算機(jī)內(nèi)部的結(jié)構(gòu)和用高級(jí)語(yǔ)言編程不需了解計(jì)算機(jī)內(nèi)部的結(jié)構(gòu)和原理,這種語(yǔ)言的形式更接近英語(yǔ),對(duì)于非計(jì)原理,這種語(yǔ)言的形式更接近英語(yǔ),對(duì)于非計(jì)算機(jī)專(zhuān)業(yè)的人員比較易于掌握。高級(jí)語(yǔ)言程序算機(jī)專(zhuān)業(yè)的人員比較易于掌握。高級(jí)語(yǔ)言程序易讀、
6、易編寫(xiě),程序結(jié)構(gòu)比較簡(jiǎn)潔,大量用于易讀、易編寫(xiě),程序結(jié)構(gòu)比較簡(jiǎn)潔,大量用于科學(xué)計(jì)算和事務(wù)處理??茖W(xué)計(jì)算和事務(wù)處理。用高級(jí)語(yǔ)言編寫(xiě)的源程序同樣必須編譯后,計(jì)用高級(jí)語(yǔ)言編寫(xiě)的源程序同樣必須編譯后,計(jì)算機(jī)才能執(zhí)行。編譯程序比匯編程序復(fù)雜得多,算機(jī)才能執(zhí)行。編譯程序比匯編程序復(fù)雜得多,需要占用較大容量的存儲(chǔ)器,編譯的過(guò)程也要需要占用較大容量的存儲(chǔ)器,編譯的過(guò)程也要花費(fèi)更多的時(shí)間。花費(fèi)更多的時(shí)間。7/277一、助記符語(yǔ)言一、助記符語(yǔ)言匯編語(yǔ)言的指令由操作碼和操作數(shù)組成。匯編語(yǔ)言的指令由操作碼和操作數(shù)組成。 操作碼用規(guī)定的英文縮寫(xiě)字母組成,稱(chēng)為助記符。操作碼用規(guī)定的英文縮寫(xiě)字母組成,稱(chēng)為助記符。例如:例如
7、: MOV A, #76H 表示的是將十六進(jìn)制的數(shù)據(jù)表示的是將十六進(jìn)制的數(shù)據(jù)76H送到累加器送到累加器A中,中,二進(jìn)制機(jī)器語(yǔ)言是:二進(jìn)制機(jī)器語(yǔ)言是:01110100和和01110110十六進(jìn)制數(shù)是:十六進(jìn)制數(shù)是:74H,76H。 其中其中74H表示操作碼,是指將一個(gè)數(shù)據(jù)傳送到累表示操作碼,是指將一個(gè)數(shù)據(jù)傳送到累加器加器A中,被傳送的數(shù)據(jù)就是操作碼的下一個(gè)字節(jié)中,被傳送的數(shù)據(jù)就是操作碼的下一個(gè)字節(jié),即即76H。8/277二、操作碼二、操作碼 通常指令由通常指令由操作碼操作碼和和操作數(shù)操作數(shù)兩部分組成。兩部分組成。操作碼功能操作碼功能:表示對(duì)操作數(shù)進(jìn)行什么操作。:表示對(duì)操作數(shù)進(jìn)行什么操作。表示形式
8、表示形式:由英文縮寫(xiě)字母組成,容易理:由英文縮寫(xiě)字母組成,容易理解和記憶。解和記憶。例如,例如,MOV是數(shù)據(jù)的傳送是數(shù)據(jù)的傳送 ADD是數(shù)據(jù)的相加運(yùn)算是數(shù)據(jù)的相加運(yùn)算 ANL是數(shù)據(jù)的邏輯與運(yùn)算是數(shù)據(jù)的邏輯與運(yùn)算9/277三、操作數(shù)三、操作數(shù)操作數(shù)功能操作數(shù)功能:指出對(duì)什么數(shù)進(jìn)行操作以及:指出對(duì)什么數(shù)進(jìn)行操作以及將操作的結(jié)果放到何處。將操作的結(jié)果放到何處。操作數(shù)的表示形式操作數(shù)的表示形式:可以是參與操作的數(shù):可以是參與操作的數(shù)據(jù),也可以是參與操作的數(shù)據(jù)所在存儲(chǔ)器據(jù),也可以是參與操作的數(shù)據(jù)所在存儲(chǔ)器的地址,還可以是數(shù)據(jù)所在的寄存器等不的地址,還可以是數(shù)據(jù)所在的寄存器等不同形式。同形式。尋找這些不同
9、形式的操作數(shù)的方式稱(chēng)為尋找這些不同形式的操作數(shù)的方式稱(chēng)為尋尋址方式址方式。10/277立即數(shù)立即數(shù)定義定義:在匯編語(yǔ)言指令中,直接參與操作的:在匯編語(yǔ)言指令中,直接參與操作的數(shù)數(shù)據(jù)據(jù)稱(chēng)為立即數(shù)。稱(chēng)為立即數(shù)。表示方法表示方法:十進(jìn)制的格式、十六進(jìn)制格式、二:十進(jìn)制的格式、十六進(jìn)制格式、二進(jìn)制的格式。進(jìn)制的格式。 數(shù)據(jù)進(jìn)制區(qū)分是在數(shù)據(jù)的后面加上后綴以示數(shù)據(jù)進(jìn)制區(qū)分是在數(shù)據(jù)的后面加上后綴以示區(qū)別:十進(jìn)制數(shù)據(jù)的后綴為區(qū)別:十進(jìn)制數(shù)據(jù)的后綴為D或省略或省略,十六進(jìn)制數(shù)十六進(jìn)制數(shù)據(jù)的后綴為據(jù)的后綴為H,二進(jìn)制數(shù)據(jù)的后綴為,二進(jìn)制數(shù)據(jù)的后綴為B。11/277注意注意參與操作的數(shù)據(jù)的位數(shù)要與參與操作的環(huán)境相參
10、與操作的數(shù)據(jù)的位數(shù)要與參與操作的環(huán)境相匹配。匹配。例如,指令例如,指令MOV A, #71H,立即數(shù),立即數(shù)71H是是8位二位二進(jìn)制數(shù)進(jìn)制數(shù)01110001B的十六進(jìn)制格式,而的十六進(jìn)制格式,而A是是8位的位的寄存器,所以給寄存器,所以給8位寄存器送的數(shù)據(jù)不能超出位寄存器送的數(shù)據(jù)不能超出8位。位。同理,給十六位寄存器送的數(shù)據(jù)不能超出同理,給十六位寄存器送的數(shù)據(jù)不能超出16位。位。數(shù)據(jù)只能是整數(shù)的格式,不能是小數(shù)的格式。數(shù)據(jù)只能是整數(shù)的格式,不能是小數(shù)的格式。邏輯數(shù)據(jù)也和二進(jìn)制數(shù)據(jù)的表示一樣,可以用邏輯數(shù)據(jù)也和二進(jìn)制數(shù)據(jù)的表示一樣,可以用十進(jìn)制、十六進(jìn)制、二進(jìn)制的數(shù)據(jù)格式表示。十進(jìn)制、十六進(jìn)制、
11、二進(jìn)制的數(shù)據(jù)格式表示。12/277當(dāng)匯編指令中的數(shù)據(jù)是十六進(jìn)制且是以字母開(kāi)當(dāng)匯編指令中的數(shù)據(jù)是十六進(jìn)制且是以字母開(kāi)頭時(shí),該數(shù)據(jù)應(yīng)加一個(gè)前導(dǎo)頭時(shí),該數(shù)據(jù)應(yīng)加一個(gè)前導(dǎo)0,以表示后面的,以表示后面的字母不是變量而是數(shù)字。字母不是變量而是數(shù)字。在在8051內(nèi)核單片機(jī)中,一個(gè)數(shù)據(jù)的前面有前綴內(nèi)核單片機(jī)中,一個(gè)數(shù)據(jù)的前面有前綴#號(hào)則表示后面的數(shù)據(jù)是立即數(shù),如果數(shù)據(jù)的號(hào)則表示后面的數(shù)據(jù)是立即數(shù),如果數(shù)據(jù)的前面沒(méi)有前面沒(méi)有#號(hào),則說(shuō)明該數(shù)據(jù)表示的是直接地號(hào),則說(shuō)明該數(shù)據(jù)表示的是直接地址。址。13/277一、匯編語(yǔ)言的一般格式一、匯編語(yǔ)言的一般格式標(biāo)號(hào)標(biāo)號(hào):指令助記符指令助記符 目的操作數(shù),源操作數(shù)目的操作數(shù),
12、源操作數(shù);注釋?zhuān)蛔⑨?、標(biāo)號(hào)、標(biāo)號(hào)標(biāo)號(hào)也叫做標(biāo)識(shí)符,放在指令之前,是其標(biāo)號(hào)也叫做標(biāo)識(shí)符,放在指令之前,是其后指令所在地址的名字,必須跟一冒號(hào)后指令所在地址的名字,必須跟一冒號(hào):。4.2 4.2 指令格式及其分類(lèi)指令格式及其分類(lèi)14/277標(biāo)號(hào)的作用標(biāo)號(hào)的作用標(biāo)號(hào)用于表示某條指令跳轉(zhuǎn)時(shí)的目標(biāo)地址。標(biāo)號(hào)用于表示某條指令跳轉(zhuǎn)時(shí)的目標(biāo)地址。程序在修改和調(diào)試時(shí),指令所在的實(shí)際地址往程序在修改和調(diào)試時(shí),指令所在的實(shí)際地址往往會(huì)隨之變化,而代表地址的名字可以不變。往會(huì)隨之變化,而代表地址的名字可以不變。因此,使用標(biāo)號(hào),可以給編程和修改帶來(lái)極大因此,使用標(biāo)號(hào),可以給編程和修改帶來(lái)極大的方便。的方便。不是每條指
13、令都需要標(biāo)號(hào),通常在該指令作為不是每條指令都需要標(biāo)號(hào),通常在該指令作為跳轉(zhuǎn)或調(diào)用的目的地址時(shí)需要標(biāo)號(hào)。跳轉(zhuǎn)或調(diào)用的目的地址時(shí)需要標(biāo)號(hào)。15/277標(biāo)號(hào)的命名必須遵循下列規(guī)則:標(biāo)號(hào)的命名必須遵循下列規(guī)則:標(biāo)號(hào)由字母(標(biāo)號(hào)由字母(az或或AZ)、數(shù)字)、數(shù)字(09)或某或某些特殊字符些特殊字符(、_、?等等)組成,其中組成,其中“_”是下是下劃線;劃線;標(biāo)號(hào)必須以字母標(biāo)號(hào)必須以字母(az或或AZ)或某些特殊的符或某些特殊的符號(hào)號(hào)(,_,?,?)開(kāi)頭,但問(wèn)號(hào)開(kāi)頭,但問(wèn)號(hào)“?”不能單獨(dú)作標(biāo)不能單獨(dú)作標(biāo)號(hào);號(hào);標(biāo)號(hào)長(zhǎng)度不允許超過(guò)標(biāo)號(hào)長(zhǎng)度不允許超過(guò)31個(gè)字符;個(gè)字符;標(biāo)號(hào)不能與指令助記符相同。標(biāo)號(hào)不能與指
14、令助記符相同。16/277下面是符合上述規(guī)則的標(biāo)號(hào):下面是符合上述規(guī)則的標(biāo)號(hào):HOW NEXT_1 AA1QMCCl MODEL? _DELAY下面是不符合上述規(guī)則的標(biāo)號(hào):下面是不符合上述規(guī)則的標(biāo)號(hào):5FVM -F33G ?MOV ADD XOR 其中最后一行的三個(gè)標(biāo)號(hào)均為指令助記其中最后一行的三個(gè)標(biāo)號(hào)均為指令助記符,所以不能用做標(biāo)號(hào)。符,所以不能用做標(biāo)號(hào)。17/277標(biāo)號(hào)標(biāo)號(hào):指令助記符指令助記符 目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù);注釋?zhuān)蛔⑨?、指令助記符、指令助記符指令助記符也叫做操作碼,是指令名稱(chēng)的指令助記符也叫做操作碼,是指令名稱(chēng)的代表符號(hào),它是一條指令語(yǔ)句中所必需的,代表符號(hào)
15、,它是一條指令語(yǔ)句中所必需的,不可缺少,表示本指令所要進(jìn)行的操作。不可缺少,表示本指令所要進(jìn)行的操作。例如:例如:MOV 表示傳送表示傳送18/277標(biāo)號(hào)標(biāo)號(hào):指令助記符指令助記符 目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù);注釋?zhuān)蛔⑨?、操作數(shù)、操作數(shù)操作數(shù)是參與本條指令操作的數(shù)據(jù),有些指令不操作數(shù)是參與本條指令操作的數(shù)據(jù),有些指令不需要操作數(shù),只有操作碼;有些指令需要兩個(gè)甚需要操作數(shù),只有操作碼;有些指令需要兩個(gè)甚至三個(gè)操作數(shù)。至三個(gè)操作數(shù)。在數(shù)據(jù)傳送時(shí),送出數(shù)據(jù)的叫做在數(shù)據(jù)傳送時(shí),送出數(shù)據(jù)的叫做源操作數(shù)源操作數(shù),接收,接收數(shù)據(jù)的叫做數(shù)據(jù)的叫做目的操作數(shù)目的操作數(shù)。指令中,目的操作數(shù)寫(xiě)。指令
16、中,目的操作數(shù)寫(xiě)在前,源操作數(shù)寫(xiě)在后,兩操作數(shù)之間用逗號(hào)在前,源操作數(shù)寫(xiě)在后,兩操作數(shù)之間用逗號(hào)“,”分開(kāi)。有些操作數(shù)可以用表達(dá)式表示。分開(kāi)。有些操作數(shù)可以用表達(dá)式表示??梢杂貌煌膶ぶ贩绞降玫讲僮鲾?shù)??梢杂貌煌膶ぶ贩绞降玫讲僮鲾?shù)。19/277操作數(shù)提供方式:操作數(shù)提供方式:指令給出;指令給出;在寄存器中,此時(shí)就用寄存器表示該操作數(shù);在寄存器中,此時(shí)就用寄存器表示該操作數(shù);在存儲(chǔ)器中,這時(shí)候就用以地址表示的存儲(chǔ)器在存儲(chǔ)器中,這時(shí)候就用以地址表示的存儲(chǔ)器表示該操作數(shù)。表示該操作數(shù)。操作數(shù)的含義不同就表示了幾種操作數(shù)的含義不同就表示了幾種20/277標(biāo)號(hào)標(biāo)號(hào):指令助記符指令助記符 目的操作數(shù),源
17、操作數(shù)目的操作數(shù),源操作數(shù);注釋?zhuān)蛔⑨?、注釋、注釋注釋是為了注釋是為了閱讀程序方便閱讀程序方便由編程人員加上由編程人員加上的,并不影響程序的執(zhí)行和功能,所以,的,并不影響程序的執(zhí)行和功能,所以,注釋部分不是必需的。注釋部分不是必需的。注釋部分必須用分號(hào)注釋部分必須用分號(hào)“;”開(kāi)頭,一般都開(kāi)頭,一般都寫(xiě)在它所注釋的指令的后面,注釋本身只寫(xiě)在它所注釋的指令的后面,注釋本身只用于對(duì)指令功能加以說(shuō)明,使閱讀程序時(shí)用于對(duì)指令功能加以說(shuō)明,使閱讀程序時(shí)便于理解,所以注釋可以用中文或者英文便于理解,所以注釋可以用中文或者英文甚至任何便于理解的字符表示。甚至任何便于理解的字符表示。21/277二、指令代碼的
18、存儲(chǔ)格式二、指令代碼的存儲(chǔ)格式指令存儲(chǔ)位置:程序存儲(chǔ)器指令存儲(chǔ)位置:程序存儲(chǔ)器指令由指令由操作碼操作碼和和操作數(shù)操作數(shù)組成,不同的指令組成,不同的指令所需要的操作數(shù)的個(gè)數(shù)有可能是不同的,所需要的操作數(shù)的個(gè)數(shù)有可能是不同的,所以每條指令的實(shí)際字節(jié)數(shù)不是固定的,所以每條指令的實(shí)際字節(jié)數(shù)不是固定的,例如,程序中有如下兩條連續(xù)存放的指令:例如,程序中有如下兩條連續(xù)存放的指令: MOV A,#68H MOV B,#73H22/277 MOV A,#68H該指令將十六進(jìn)制數(shù)據(jù)該指令將十六進(jìn)制數(shù)據(jù)68H送到累加器送到累加器A中中;這條指令是兩字節(jié)指令這條指令是兩字節(jié)指令;對(duì)應(yīng)的機(jī)器碼是:對(duì)應(yīng)的機(jī)器碼是:74
19、H和和68H兩個(gè)字節(jié),其中兩個(gè)字節(jié),其中74H是操作碼,是操作碼,68H是操作數(shù)是操作數(shù). MOV B, #73H該指令是將立即數(shù)該指令是將立即數(shù)73H送到寄存器送到寄存器B中中;是三字節(jié)指令,對(duì)應(yīng)的機(jī)器碼是是三字節(jié)指令,對(duì)應(yīng)的機(jī)器碼是75H、F0H和和73H三個(gè)字節(jié)三個(gè)字節(jié),其中其中75H是操作碼,是操作碼,B和和73H是操是操作數(shù)。作數(shù)。23/277指令存放格式指令存放格式在存儲(chǔ)器中是以二進(jìn)制數(shù)的形式、以字節(jié)為單在存儲(chǔ)器中是以二進(jìn)制數(shù)的形式、以字節(jié)為單位按照地址遞增的順序存放的。位按照地址遞增的順序存放的。程序存儲(chǔ)器中的指令機(jī)器碼、數(shù)據(jù)字存放的規(guī)程序存儲(chǔ)器中的指令機(jī)器碼、數(shù)據(jù)字存放的規(guī)則是
20、:從低地址開(kāi)始,先存放操作碼,然后是則是:從低地址開(kāi)始,先存放操作碼,然后是操作數(shù)。操作數(shù)。24/277假設(shè)這兩條指令存放假設(shè)這兩條指令存放的起始地址是的起始地址是1000H,則存放的格式為:則存放的格式為:左邊一列表示的是左邊一列表示的是程序存儲(chǔ)器的地址程序存儲(chǔ)器的地址右邊一列是存放在右邊一列是存放在該地址單元中的二該地址單元中的二進(jìn)制指令進(jìn)制指令。地址地址指令指令1000H74H1001H68H1002H75H1003HF0H1004H73H25/277程序執(zhí)行過(guò)程程序執(zhí)行過(guò)程程序執(zhí)行時(shí)是程序執(zhí)行時(shí)是依次逐條依次逐條取出指令執(zhí)行的。取出指令執(zhí)行的。單片機(jī)內(nèi)部有一個(gè)程序計(jì)數(shù)器,具有自動(dòng)加一的
21、特點(diǎn),單片機(jī)內(nèi)部有一個(gè)程序計(jì)數(shù)器,具有自動(dòng)加一的特點(diǎn),因而指令被逐字節(jié)取出,然后譯碼執(zhí)行。因而指令被逐字節(jié)取出,然后譯碼執(zhí)行。首先取出操作碼首先取出操作碼74H,經(jīng)譯碼得知這是一條兩字節(jié)的指,經(jīng)譯碼得知這是一條兩字節(jié)的指令,要進(jìn)行的操作是將立即數(shù)送到累加器令,要進(jìn)行的操作是將立即數(shù)送到累加器A中,而操作中,而操作數(shù)是以立即數(shù)的形式放在操作碼的下一個(gè)地址中,數(shù)是以立即數(shù)的形式放在操作碼的下一個(gè)地址中,程序程序計(jì)數(shù)器自動(dòng)加一計(jì)數(shù)器自動(dòng)加一,將下一個(gè)地址中的數(shù)據(jù),將下一個(gè)地址中的數(shù)據(jù)68H取出來(lái),取出來(lái),送到累加器送到累加器A中。中。程序計(jì)數(shù)器再次自動(dòng)加一,指向下一條指令的第一個(gè)字程序計(jì)數(shù)器再次自動(dòng)
22、加一,指向下一條指令的第一個(gè)字節(jié),取出節(jié),取出75H,經(jīng)譯碼得知這是一條三字節(jié)的指令,要,經(jīng)譯碼得知這是一條三字節(jié)的指令,要進(jìn)行的操作是將一個(gè)立即數(shù)送到一個(gè)寄存器中,這個(gè)寄進(jìn)行的操作是將一個(gè)立即數(shù)送到一個(gè)寄存器中,這個(gè)寄存器是用該指令的第二個(gè)字節(jié)存器是用該指令的第二個(gè)字節(jié)F0H來(lái)表示的,而地址來(lái)表示的,而地址F0H表示的就是寄存器表示的就是寄存器B,本條指令的第三個(gè)字節(jié)內(nèi)容,本條指令的第三個(gè)字節(jié)內(nèi)容就是要傳送的立即數(shù)就是要傳送的立即數(shù)73H。這樣隨著程序計(jì)數(shù)器逐次加一,每條指令被一個(gè)字節(jié)一這樣隨著程序計(jì)數(shù)器逐次加一,每條指令被一個(gè)字節(jié)一個(gè)字節(jié)地取出、譯碼和執(zhí)行。個(gè)字節(jié)地取出、譯碼和執(zhí)行。26/
23、277三、指令中的符號(hào)約定三、指令中的符號(hào)約定 在 描 述 單在 描 述 單片 機(jī) 指 令 系片 機(jī) 指 令 系統(tǒng) 時(shí) , 經(jīng) 常統(tǒng) 時(shí) , 經(jīng) 常使 用 各 種 縮使 用 各 種 縮寫(xiě) 符 號(hào) , 各寫(xiě) 符 號(hào) , 各種 符 號(hào) 及 含種 符 號(hào) 及 含義如表所示。義如表所示。 27/277指令中尋找操作數(shù)的方式,稱(chēng)為尋址方式。指令中尋找操作數(shù)的方式,稱(chēng)為尋址方式。STC15F2K60S2單片機(jī)共有單片機(jī)共有7種尋址方式種尋址方式立即數(shù)尋址立即數(shù)尋址 寄存器尋址寄存器尋址直接尋址直接尋址寄存器間接尋址寄存器間接尋址變址尋址變址尋址 相對(duì)尋址相對(duì)尋址 位尋址位尋址 4.3尋址方式尋址方式28/
24、2771、立即數(shù)尋址、立即數(shù)尋址定義定義 在指令中,指令操作所需要的操作數(shù)就在在指令中,指令操作所需要的操作數(shù)就在指令中,作為指令的一個(gè)組成部分,指令中,作為指令的一個(gè)組成部分,CPU在在得到指令的同時(shí)也就立即得到了操作數(shù)。得到指令的同時(shí)也就立即得到了操作數(shù)。29/277例如:例如: M0V A,#28H ;功能:將十六進(jìn)制立即數(shù)功能:將十六進(jìn)制立即數(shù)28H送入累加器送入累加器A中。中。指令執(zhí)行后,指令執(zhí)行后,A中為中為28H,A中原來(lái)的數(shù)據(jù)被覆中原來(lái)的數(shù)據(jù)被覆蓋,記作:蓋,記作:A28H其中,源操作數(shù)是立即數(shù)其中,源操作數(shù)是立即數(shù)28H,目的操作數(shù)是,目的操作數(shù)是累加器累加器A。指令執(zhí)行的操
25、作是,將立即數(shù)指令執(zhí)行的操作是,將立即數(shù)28H送送A。指令。指令的機(jī)器碼為兩個(gè)字節(jié):的機(jī)器碼為兩個(gè)字節(jié):74H,28H。30/277假設(shè)該指令存放在物理地址為假設(shè)該指令存放在物理地址為0100H開(kāi)始的地址開(kāi)始的地址中,則,機(jī)器碼的存放與指令的執(zhí)行過(guò)程如圖所中,則,機(jī)器碼的存放與指令的執(zhí)行過(guò)程如圖所示。示。74H28H0100H操作碼立即數(shù)累加器A28H 0101H程序存儲(chǔ)器地址執(zhí)行順序0102H下一條指令的操作碼 圖4-1 MOV A,#28H 執(zhí)行過(guò)程示意圖31/277MOV A,#28H ;注意:因?yàn)槔奂悠髯⒁猓阂驗(yàn)槔奂悠鰽是是8位的寄存器,所以在這位的寄存器,所以在這里的立即數(shù)只能是里的
26、立即數(shù)只能是8位數(shù)據(jù),并且只能是整數(shù),位數(shù)據(jù),并且只能是整數(shù),不能是小數(shù)、變量或者其他類(lèi)型的數(shù)據(jù)。不能是小數(shù)、變量或者其他類(lèi)型的數(shù)據(jù)。立即數(shù)只能作為源操作數(shù),其位數(shù)要與目的操立即數(shù)只能作為源操作數(shù),其位數(shù)要與目的操作數(shù)的位數(shù)一致。作數(shù)的位數(shù)一致。立即數(shù)前面的立即數(shù)前面的#號(hào)是表示其后所跟的數(shù)據(jù)是立號(hào)是表示其后所跟的數(shù)據(jù)是立即數(shù)而不是直接地址。即數(shù)而不是直接地址。32/277立即數(shù)尋址方式優(yōu)點(diǎn)立即數(shù)尋址方式優(yōu)點(diǎn) 采用立即數(shù)尋址方式的指令主要用來(lái)對(duì)寄采用立即數(shù)尋址方式的指令主要用來(lái)對(duì)寄存器或存儲(chǔ)器賦值。因?yàn)椴僮鲾?shù)可以從指令存器或存儲(chǔ)器賦值。因?yàn)椴僮鲾?shù)可以從指令中直接取得,不需要再到其他地方去尋找操
27、中直接取得,不需要再到其他地方去尋找操作數(shù),所以,立即數(shù)尋址方式的作數(shù),所以,立即數(shù)尋址方式的指令執(zhí)行速指令執(zhí)行速度很快度很快。33/2772、寄存器尋址、寄存器尋址定義定義 指令所用的操作數(shù)在指令所用的操作數(shù)在CPU的內(nèi)部寄存器的內(nèi)部寄存器中,指令中的操作數(shù)用中,指令中的操作數(shù)用寄存器名寄存器名表示。一條表示。一條指令中,源操作數(shù)和目的操作數(shù)式,都可指令中,源操作數(shù)和目的操作數(shù)式,都可以采用寄存器尋址方式。以采用寄存器尋址方式。34/277例如:例如:MOV A, #45H ;A立即數(shù)立即數(shù)45H 其中,源操作數(shù)其中,源操作數(shù)45H為立即尋址方式,目的操為立即尋址方式,目的操作數(shù)為寄存器尋址
28、方式。作數(shù)為寄存器尋址方式。INC R0 ;R0 R0+1 該指令只有一個(gè)操作數(shù),為寄存器尋址方式。該指令只有一個(gè)操作數(shù),為寄存器尋址方式。35/277MOV A, R1 ;AR1 源操作數(shù)為寄存器源操作數(shù)為寄存器R1,目的操作數(shù)為,目的操作數(shù)為A,兩者,兩者都是寄存器尋址方式。都是寄存器尋址方式。在寄存器尋址方式中,操作數(shù)用寄存器表在寄存器尋址方式中,操作數(shù)用寄存器表示時(shí)有兩種含義示時(shí)有兩種含義寄存器用于表示目的操作數(shù)時(shí),是寄存器名,寄存器用于表示目的操作數(shù)時(shí),是寄存器名,表示是某個(gè)寄存器,用于接收數(shù)據(jù);表示是某個(gè)寄存器,用于接收數(shù)據(jù);寄存器用于表示源操作數(shù)時(shí),是表示該寄存器寄存器用于表示源
29、操作數(shù)時(shí),是表示該寄存器中的數(shù)據(jù)。中的數(shù)據(jù)。36/277例如:例如: INC R5 ;指令機(jī)器碼為指令機(jī)器碼為0DH;把寄存器把寄存器R5的內(nèi)容加的內(nèi)容加1后再送回后再送回R5該指令的執(zhí)行過(guò)程如圖所示。其中,該指令的執(zhí)行過(guò)程如圖所示。其中,R5所在的內(nèi)部所在的內(nèi)部RAM單元地址與寄存器組的選擇有關(guān)。單元地址與寄存器組的選擇有關(guān)。00001101110000RS1 RS0PSWALU內(nèi)部RAMPC D5D6D7+1R5圖4-2 INC R5指令執(zhí)行過(guò)程示意圖37/277寄存器尋址方式優(yōu)點(diǎn)寄存器尋址方式優(yōu)點(diǎn)采用寄存器尋址方式的指令在執(zhí)行時(shí),操作數(shù)采用寄存器尋址方式的指令在執(zhí)行時(shí),操作數(shù)就在寄存器中
30、,對(duì)該操作數(shù)的存取操作在就在寄存器中,對(duì)該操作數(shù)的存取操作在CPU內(nèi)部進(jìn)行,不需要使用總線周期讀存儲(chǔ)器,所內(nèi)部進(jìn)行,不需要使用總線周期讀存儲(chǔ)器,所以以執(zhí)行速度很快。執(zhí)行速度很快。38/277注意注意在數(shù)據(jù)傳送之后,源操作數(shù)中的數(shù)據(jù)并不消失,在數(shù)據(jù)傳送之后,源操作數(shù)中的數(shù)據(jù)并不消失,仍然存在。仍然存在。例如,用寄存器作源操作數(shù)時(shí),數(shù)據(jù)傳送出之例如,用寄存器作源操作數(shù)時(shí),數(shù)據(jù)傳送出之后寄存器中的內(nèi)容仍然存在,只有作為目的操后寄存器中的內(nèi)容仍然存在,只有作為目的操作數(shù)的寄存器被寫(xiě)入數(shù)據(jù)后,原來(lái)的數(shù)值會(huì)被作數(shù)的寄存器被寫(xiě)入數(shù)據(jù)后,原來(lái)的數(shù)值會(huì)被新寫(xiě)入的數(shù)據(jù)所取代。這種性質(zhì),對(duì)于存儲(chǔ)器新寫(xiě)入的數(shù)據(jù)所取代
31、。這種性質(zhì),對(duì)于存儲(chǔ)器也是同樣的。也是同樣的。39/2773、直接尋址、直接尋址定義定義 指令的操作數(shù)在存儲(chǔ)器中時(shí),指令中給出指令的操作數(shù)在存儲(chǔ)器中時(shí),指令中給出的是該操作數(shù)所在存儲(chǔ)器的地址的方式。的是該操作數(shù)所在存儲(chǔ)器的地址的方式。優(yōu)點(diǎn)優(yōu)點(diǎn) 直接尋址是對(duì)存儲(chǔ)器進(jìn)行訪問(wèn)時(shí)的最簡(jiǎn)單、直接尋址是對(duì)存儲(chǔ)器進(jìn)行訪問(wèn)時(shí)的最簡(jiǎn)單、最直接的方式。最直接的方式。40/277例如:例如: MOV A,45H功能:將地址為功能:將地址為45H的存儲(chǔ)器單元中的內(nèi)容取的存儲(chǔ)器單元中的內(nèi)容取到到A中。中。在這里,源操作數(shù)的尋址方式是直接尋址,表在這里,源操作數(shù)的尋址方式是直接尋址,表示要送出的數(shù)據(jù)在地址為示要送出的數(shù)據(jù)
32、在地址為45H的直接地址中;的直接地址中;目的操作數(shù)的尋址方式是寄存器尋址。目的操作數(shù)的尋址方式是寄存器尋址。這條指令的機(jī)器碼為:這條指令的機(jī)器碼為:E5H、45H,其中,其中,E5H是操作碼,是操作碼,45H是操作數(shù)。是操作數(shù)。41/277MOV A,45H 設(shè)機(jī)器碼放在程序存儲(chǔ)器地址為設(shè)機(jī)器碼放在程序存儲(chǔ)器地址為0100H和和 0101H的兩個(gè)的兩個(gè)單元中,指令執(zhí)行前,數(shù)據(jù)存儲(chǔ)器的單元中,指令執(zhí)行前,數(shù)據(jù)存儲(chǔ)器的45H中的數(shù)據(jù)為中的數(shù)據(jù)為34H,則執(zhí)行后則執(zhí)行后A=34H,將,將A中原來(lái)的數(shù)據(jù)覆蓋。中原來(lái)的數(shù)據(jù)覆蓋。E5H45H0100H操作碼操作數(shù)累加器A34H 0101H程序存儲(chǔ)器地址
33、執(zhí)行順序0102H下一條指令的操作碼34H45H46H內(nèi)部數(shù)據(jù)存儲(chǔ)器地址圖圖4-3 MOV A, 45H 執(zhí)行過(guò)程示意圖執(zhí)行過(guò)程示意圖42/2774、寄存器間接尋址(簡(jiǎn)稱(chēng)寄存器間址)、寄存器間接尋址(簡(jiǎn)稱(chēng)寄存器間址)定義定義:操作數(shù)所在存儲(chǔ)單元的有效地址在指操作數(shù)所在存儲(chǔ)單元的有效地址在指定的寄存器中,指令中給出的是存放這個(gè)定的寄存器中,指令中給出的是存放這個(gè)地址的寄存器。地址的寄存器。常用作寄存器間接尋址的寄存器有常用作寄存器間接尋址的寄存器有R0、R1或數(shù)據(jù)指針或數(shù)據(jù)指針DPTR。 在匯編語(yǔ)言中,使用間接尋址的標(biāo)志是在在匯編語(yǔ)言中,使用間接尋址的標(biāo)志是在寄存器前面加一個(gè)寄存器前面加一個(gè)“”
34、號(hào),以區(qū)別于寄存號(hào),以區(qū)別于寄存器尋址。器尋址。43/277例如:例如: MOV A ,R0 ;將將R0中的內(nèi)容所表示中的內(nèi)容所表示的地址單元中的內(nèi)容送的地址單元中的內(nèi)容送給給A設(shè)設(shè)R0的內(nèi)容為的內(nèi)容為31H,31H單元的內(nèi)容為單元的內(nèi)容為51H,則執(zhí)行后,則執(zhí)行后,累加器累加器A的內(nèi)容為的內(nèi)容為51H。該指令的執(zhí)。該指令的執(zhí)行過(guò)程如圖所示。行過(guò)程如圖所示。E5H0100H操作碼累加器A51H 0101H程序存儲(chǔ)器地址執(zhí)行順序下一條指令的操作碼51H31H32H內(nèi)部數(shù)據(jù)存儲(chǔ)器地址 31H R0 圖圖4-4 MOV A,R0 指令執(zhí)行過(guò)程示意圖指令執(zhí)行過(guò)程示意圖44/2775、變址尋址、變址尋址
35、兩種尋址種類(lèi)兩種尋址種類(lèi)第一類(lèi):用第一類(lèi):用PC作基地址加上累加器作基地址加上累加器A的內(nèi)容形的內(nèi)容形成操作數(shù)的地址成操作數(shù)的地址A+PC。第二類(lèi):使用第二類(lèi):使用DPTR作基地址,加上累加器作基地址,加上累加器A的的內(nèi)容形成操作數(shù)的地址內(nèi)容形成操作數(shù)的地址A+DPTR。45/277例如:例如:MOVC A,A+PC,指令操作碼助記符,指令操作碼助記符MOVC表示從程序存儲(chǔ)器取數(shù)據(jù),表示從程序存儲(chǔ)器取數(shù)據(jù),PC的內(nèi)容指向的內(nèi)容指向下一個(gè)地址作為基地址,加上下一個(gè)地址作為基地址,加上A中的數(shù)據(jù)就構(gòu)成中的數(shù)據(jù)就構(gòu)成了所要取數(shù)的地址。了所要取數(shù)的地址。例如例如: 0100 7402 MOV A, #
36、02 0102 83 MOVC A, A+PC 0103 00 NOP 0104 00 NOP 0105 64 DB 64H 當(dāng)執(zhí)行到指令當(dāng)執(zhí)行到指令MOVC A,A+PC時(shí),時(shí),A=2,PC=0103H,因此,因此,A+PC=0105H,A+PC表示表示0105H作作為地址,從這個(gè)地址為地址,從這個(gè)地址指向的單元中取數(shù)據(jù)指向的單元中取數(shù)據(jù)送到送到A中,所以結(jié)果就中,所以結(jié)果就是把是把0105H中的數(shù)據(jù)中的數(shù)據(jù)64H送到了送到了A中。中。46/277例如:例如:MOVC A,A+DPTR,DPTR的內(nèi)容加上的內(nèi)容加上A中的數(shù)據(jù)就構(gòu)成了所要取數(shù)的地址。中的數(shù)據(jù)就構(gòu)成了所要取數(shù)的地址。例如:例如:
37、 MOV A,#02H MOV DPTR,#TABLE MOVC A,A+DPTR TABLE: DB 30H DB 31H DB 32H 47/277變址尋址優(yōu)點(diǎn)變址尋址優(yōu)點(diǎn) 特別適用于訪問(wèn)固化在程序存儲(chǔ)器中特別適用于訪問(wèn)固化在程序存儲(chǔ)器中的常數(shù)表格,以完成查表功能,如不同碼的常數(shù)表格,以完成查表功能,如不同碼制之間數(shù)據(jù)轉(zhuǎn)換等。由于制之間數(shù)據(jù)轉(zhuǎn)換等。由于DPTR可以通過(guò)指可以通過(guò)指令來(lái)設(shè)置,使用起來(lái)更加方便,因此,在令來(lái)設(shè)置,使用起來(lái)更加方便,因此,在實(shí)際應(yīng)用中,實(shí)際應(yīng)用中, MOVC A,A+DPTR尋址使尋址使用更廣泛用更廣泛。48/2776、相對(duì)尋址、相對(duì)尋址功能功能 該尋址方式主要用
38、于相對(duì)跳轉(zhuǎn)指令。該尋址方式主要用于相對(duì)跳轉(zhuǎn)指令。尋址方法尋址方法 把指令中給定的地址偏移量與本指令所在把指令中給定的地址偏移量與本指令所在單元地址(即程序計(jì)數(shù)器單元地址(即程序計(jì)數(shù)器PC中的內(nèi)容)相中的內(nèi)容)相加,即得到真正的程序轉(zhuǎn)移地址。加,即得到真正的程序轉(zhuǎn)移地址。49/277與變址方式區(qū)別與變址方式區(qū)別 該偏移量有正、負(fù)號(hào),在該機(jī)器指令中必該偏移量有正、負(fù)號(hào),在該機(jī)器指令中必須以補(bǔ)碼形式給出,所轉(zhuǎn)移的范圍為相對(duì)于須以補(bǔ)碼形式給出,所轉(zhuǎn)移的范圍為相對(duì)于當(dāng)前當(dāng)前PC值的值的-128+127之間。之間。例如:例如: JC 80H 若若C=0,則,則PC值不變,若值不變,若C=1,則以現(xiàn)行的,則
39、以現(xiàn)行的PC為為基地址加上基地址加上80H得到轉(zhuǎn)向地址。得到轉(zhuǎn)向地址。50/277JC 80H假設(shè)若轉(zhuǎn)移指令放在假設(shè)若轉(zhuǎn)移指令放在1005H,該指令的執(zhí)行過(guò)程如圖所示。,該指令的執(zhí)行過(guò)程如圖所示。注意,指令偏移量以補(bǔ)碼給出,所以注意,指令偏移量以補(bǔ)碼給出,所以80H代表著代表著-80H。1005H 0100000010000000PC+11006HPC+2ALU1007H原 PC操作碼1007H-80H=0F87H0F87HPC1007H新 PC0F87H偏移量圖圖4-5 JC 80H執(zhí)行示意圖執(zhí)行示意圖51/2777、位尋址、位尋址 位操作指令能對(duì)位地址空間的位操作指令能對(duì)位地址空間的每一位
40、每一位進(jìn)行運(yùn)算和傳送操作。進(jìn)行運(yùn)算和傳送操作。例如:例如:MOV C,P1.0 ;將將P1.0的狀態(tài)傳送到的狀態(tài)傳送到C SETB 20H.6 ;將將20H單元的第單元的第6位置為位置為1 CLR 25H ;將將25H位的內(nèi)容清零位的內(nèi)容清零52/277綜上所述綜上所述,指令的尋址方式就是尋找操作,指令的尋址方式就是尋找操作數(shù)或?qū)ふ业牟僮鲾?shù)的地址的方式。數(shù)或?qū)ふ业牟僮鲾?shù)的地址的方式。尋址方式與存儲(chǔ)器的結(jié)構(gòu)有關(guān)尋址方式與存儲(chǔ)器的結(jié)構(gòu)有關(guān)。例如,訪。例如,訪問(wèn)程序存儲(chǔ)器只能用變址尋址的方式;訪問(wèn)程序存儲(chǔ)器只能用變址尋址的方式;訪問(wèn)特殊功能寄存器只能用直接尋址方式;問(wèn)特殊功能寄存器只能用直接尋址方式
41、;訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器只能用寄存器間接尋訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器只能用寄存器間接尋址方式等。址方式等。一般來(lái)說(shuō),尋址方式越多,計(jì)算機(jī)功能越一般來(lái)說(shuō),尋址方式越多,計(jì)算機(jī)功能越強(qiáng),靈活性越大。所以尋址方式對(duì)機(jī)器的強(qiáng),靈活性越大。所以尋址方式對(duì)機(jī)器的性能有重大影響。性能有重大影響。53/277 數(shù)據(jù)傳送類(lèi)指令是使用頻率最高的一類(lèi)指令。數(shù)據(jù)傳送類(lèi)指令是使用頻率最高的一類(lèi)指令。功能功能:主要用來(lái)給單片機(jī)的內(nèi)部和外部資源:主要用來(lái)給單片機(jī)的內(nèi)部和外部資源賦值、進(jìn)行堆棧的存取操作等。數(shù)據(jù)傳送類(lèi)賦值、進(jìn)行堆棧的存取操作等。數(shù)據(jù)傳送類(lèi)指令執(zhí)行前后,對(duì)程序狀態(tài)字指令執(zhí)行前后,對(duì)程序狀態(tài)字PSW一般不一般不產(chǎn)生影響。產(chǎn)生
42、影響。分類(lèi)分類(lèi):根據(jù)操作方式的不同,數(shù)據(jù)傳送類(lèi)指:根據(jù)操作方式的不同,數(shù)據(jù)傳送類(lèi)指令分為三種:令分為三種:數(shù)據(jù)傳送數(shù)據(jù)傳送數(shù)據(jù)交換數(shù)據(jù)交換棧操作棧操作4.4 數(shù)據(jù)傳送類(lèi)指令數(shù)據(jù)傳送類(lèi)指令54/277一、數(shù)據(jù)傳送指令一、數(shù)據(jù)傳送指令1、MOV指令指令2、MOVX指令指令3、MOVC指令指令 55/2771、MOV指令指令MOV指令的指令的作用區(qū)間作用區(qū)間:內(nèi)部數(shù)據(jù)存儲(chǔ)器和:內(nèi)部數(shù)據(jù)存儲(chǔ)器和特殊功能寄存器特殊功能寄存器使用方法使用方法利用利用Rn可直接訪問(wèn)某工作寄存器可直接訪問(wèn)某工作寄存器;利用利用Ri可間接尋址內(nèi)部數(shù)據(jù)可間接尋址內(nèi)部數(shù)據(jù)RAM的某一字節(jié)的某一字節(jié)單元單元;直接尋址則可遍訪內(nèi)部數(shù)據(jù)
43、直接尋址則可遍訪內(nèi)部數(shù)據(jù)RAM(00H7FH)和特殊功能寄存器空間。和特殊功能寄存器空間。56/277對(duì)于雙操作數(shù)的數(shù)據(jù)傳送指令允許在工作寄存對(duì)于雙操作數(shù)的數(shù)據(jù)傳送指令允許在工作寄存器、內(nèi)部數(shù)據(jù)器、內(nèi)部數(shù)據(jù)RAM、累加器、累加器A和特殊功能寄存和特殊功能寄存器(器(SFR)任意兩個(gè)之間傳送一個(gè)字節(jié)的數(shù)據(jù),)任意兩個(gè)之間傳送一個(gè)字節(jié)的數(shù)據(jù),而且立即操作數(shù)能送入上述任何單元中。而且立即操作數(shù)能送入上述任何單元中。利用利用MOV指令還可以把指令還可以把16bit的立即數(shù)直接送的立即數(shù)直接送入數(shù)據(jù)指針入數(shù)據(jù)指針DPTR中。中。格式格式:MOV 目的字節(jié)目的字節(jié), 源字節(jié)源字節(jié)功能功能:把源操作數(shù)指定的
44、字節(jié)變量傳送到:把源操作數(shù)指定的字節(jié)變量傳送到目的操作數(shù)指定的單元中,源字節(jié)內(nèi)容不目的操作數(shù)指定的單元中,源字節(jié)內(nèi)容不變。變。MOV指令一般不影響別的寄存器或標(biāo)指令一般不影響別的寄存器或標(biāo)志。志。57/277(1)立即數(shù)送累加器)立即數(shù)送累加器A和和Rn、內(nèi)部、內(nèi)部RAM、SFR。 MOV A, #data8 MOV addr8,#data8 MOV Ri, #data8 MOV Rn, #data8 符號(hào)表示間接尋址,(符號(hào)表示間接尋址,(Ri)表示把立即數(shù)送到)表示把立即數(shù)送到由由Ri寄存器的內(nèi)容所指出的那個(gè)寄存器的內(nèi)容所指出的那個(gè)RAM單元中去。單元中去。Ri中中i=0或或1。;A #d
45、ata8;(addr8) #data8;(Ri) #data8;Rn #data858/277例如例如: MOV R0, #60H ;將立即數(shù)將立即數(shù)60H送到寄存器送到寄存器R0中中 MOV R0, #56H ;將立即數(shù)將立即數(shù)56H送入到送入到R0間接尋址的單元中,間接尋址的單元中, ;執(zhí)行后執(zhí)行后60H單元的內(nèi)容變?yōu)閱卧膬?nèi)容變?yōu)?6H 利用直接尋址可把立即數(shù)送入內(nèi)部利用直接尋址可把立即數(shù)送入內(nèi)部RAM任意單元任意單元或任一特殊功能寄存器,或任一特殊功能寄存器,例如:例如: MOV 20H, #56H ;將立即數(shù)將立即數(shù)56H送入送入20H單元中單元中 MOV P1, #80H ;把立即
46、數(shù)把立即數(shù)80H直接送入直接送入P1口(字節(jié)地址為口(字節(jié)地址為90H)中)中59/277(2)Rn、內(nèi)部、內(nèi)部RAM、SFR與累加器與累加器A傳送傳送數(shù)據(jù)。有數(shù)據(jù)。有6條指令:條指令: MOV A, addr8 MOV A, Ri MOV A, Rn MOV addr8, A MOV Ri, A MOV Rn, A ;A (addr8);A (Ri);A Rn;(addr8) A;(Ri) A;RnA60/277間接尋址間接尋址Ri是以是以Ri的內(nèi)容作為地址進(jìn)行的內(nèi)容作為地址進(jìn)行尋址,由于尋址,由于Ri為為8位寄存器,所以其尋址范位寄存器,所以其尋址范圍可為圍可為00HFFH。例如。例如,指
47、令序列:,指令序列: MOV R1, #82H MOV A, R1 上述指令對(duì)于上述指令對(duì)于STC12C5A60S2單片機(jī)而單片機(jī)而言,其功能是將內(nèi)部言,其功能是將內(nèi)部RAM的的82H單元中的內(nèi)單元中的內(nèi)容送到容送到A中。內(nèi)部中。內(nèi)部80HFFH的的RAM單元,單元,只能使用這種間接尋址方式進(jìn)行訪問(wèn)。只能使用這種間接尋址方式進(jìn)行訪問(wèn)。61/277欲從欲從DPL取數(shù)到累加器取數(shù)到累加器A,可用直接尋址方,可用直接尋址方式:式: MOV A, 82H ;執(zhí)行后執(zhí)行后A中內(nèi)容將是中內(nèi)容將是DPL中的值,也可使用下面的中的值,也可使用下面的指令指令 MOV A,DPL62/277(3)Rn、SFR和內(nèi)
48、部數(shù)據(jù)和內(nèi)部數(shù)據(jù)RAM之間的之間的數(shù)據(jù)傳送。有數(shù)據(jù)傳送。有5條指令:條指令: MOV addr8, addr8 MOV addr8,Ri MOV addr8, Rn MOV Ri, addr8 MOV Rn, addr8 ;(addr8目目)(addr8源源);(addr8)(Ri);(;(addr8)Rn;(Ri)(addr8);Rn(addr8)63/277例如:例如: MOV 60H, 50H ;把把50H單元的內(nèi)容送到單元的內(nèi)容送到60H單元單元例如,若設(shè)例如,若設(shè)PSW中標(biāo)志位中標(biāo)志位RS1、RS0為為“01”,則,則選中第選中第1組工作寄存器區(qū),此時(shí),組工作寄存器區(qū),此時(shí), MOV
49、 40H, R0 與與 MOV 40H, 08H 是等價(jià)的。是等價(jià)的。例如,用立即尋址指令可直接給內(nèi)部例如,用立即尋址指令可直接給內(nèi)部RAM中中30H和和P1口上置數(shù):口上置數(shù): MOV 30H, #25H MOV P1, #0CAH 執(zhí)行后:(執(zhí)行后:(30H)=25H,(,(P1)=0CAH。64/277(4)目標(biāo)地址傳送)目標(biāo)地址傳送功能:把功能:把16位常數(shù)裝入數(shù)據(jù)指針。只有一位常數(shù)裝入數(shù)據(jù)指針。只有一條指令:條指令: MOV DPTR ,#data16 例如:例如: MOV DPTR ,#0150H表示把表示把16位常數(shù)裝入數(shù)據(jù)指針。執(zhí)行后,位常數(shù)裝入數(shù)據(jù)指針。執(zhí)行后,DPTR=01
50、50H,其中,其中DPH=01H,DPL=50H65/2772、外部數(shù)據(jù)存儲(chǔ)器(或擴(kuò)展并行、外部數(shù)據(jù)存儲(chǔ)器(或擴(kuò)展并行I/O口)與口)與累加器累加器A傳送指令傳送指令MOVX功能功能 主要用于累加器主要用于累加器A和外部和外部RAM或擴(kuò)展并行或擴(kuò)展并行I/O口進(jìn)行數(shù)據(jù)傳送。這種傳送只有一種尋址口進(jìn)行數(shù)據(jù)傳送。這種傳送只有一種尋址方式,就是方式,就是寄存器間接尋址寄存器間接尋址。66/277兩種寄存器間接尋址兩種寄存器間接尋址用用R1或或R0進(jìn)行寄存器間接尋址。這種方式能訪進(jìn)行寄存器間接尋址。這種方式能訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器(或擴(kuò)展并行問(wèn)外部數(shù)據(jù)存儲(chǔ)器(或擴(kuò)展并行I/O口)口)256個(gè)個(gè)字節(jié)中的一個(gè)
51、字節(jié)。若要訪問(wèn)更大的空間,需字節(jié)中的一個(gè)字節(jié)。若要訪問(wèn)更大的空間,需使用使用P2口輸出高口輸出高8位地址。需先給位地址。需先給P2和和Ri賦值,賦值,然后執(zhí)行然后執(zhí)行MOVX指令。指令。用用16位的數(shù)據(jù)存儲(chǔ)器地址指針位的數(shù)據(jù)存儲(chǔ)器地址指針DPTR進(jìn)行寄存進(jìn)行寄存器間接尋址。這種方法能遍訪器間接尋址。這種方法能遍訪64KB的外部數(shù)的外部數(shù)據(jù)存儲(chǔ)器(或擴(kuò)展并行據(jù)存儲(chǔ)器(或擴(kuò)展并行I/O口)的任何單元。口)的任何單元。67/277指令格式指令格式:MOVX 目的字節(jié)目的字節(jié), 源字節(jié)源字節(jié)有有4條指令條指令 MOVX A, DPTR ;A(DPTR) MOVX A, Ri ;A(Ri) MOVX D
52、PTR,A ;(DPTR)A MOVX Ri, A ;(Ri)A注意注意:由于使用由于使用R1或或R0寄存器間接尋址方式訪寄存器間接尋址方式訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),尋址范圍受到問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),尋址范圍受到256字節(jié)限制,字節(jié)限制,因此,在實(shí)際應(yīng)用中,因此,在實(shí)際應(yīng)用中,一般使用一般使用DPTR寄存器間寄存器間接尋址方式訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器。接尋址方式訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器。68/277例如:若外部數(shù)據(jù)存儲(chǔ)器單元中:(例如:若外部數(shù)據(jù)存儲(chǔ)器單元中:(0100H)=60H,(,(0101H)=2FH則執(zhí)行:則執(zhí)行: MOV DPTR ,#0100H MOVX A, DPTR ;執(zhí)行后,累加器執(zhí)行后,累
53、加器A=60H69/2773、程序存儲(chǔ)器向累加器、程序存儲(chǔ)器向累加器A傳送指令傳送指令MOVC查表:查表:對(duì)于程序存儲(chǔ)器的訪問(wèn),單片機(jī)提對(duì)于程序存儲(chǔ)器的訪問(wèn),單片機(jī)提供了兩條極其有用的查表指令。這兩條指供了兩條極其有用的查表指令。這兩條指令采用變址尋址,以令采用變址尋址,以PC或或DPTR為基址寄為基址寄存器,以累加器存器,以累加器A為變址寄存器,基址寄存為變址寄存器,基址寄存器與變址寄存器內(nèi)容相加得到程序存儲(chǔ)器器與變址寄存器內(nèi)容相加得到程序存儲(chǔ)器某單元的地址值,某單元的地址值,MOVC指令把該存儲(chǔ)單指令把該存儲(chǔ)單元的內(nèi)容傳送到累加器元的內(nèi)容傳送到累加器A中。中。70/277指令格式指令格式:
54、 MOVC A ,A+PC ; PCPC+1,A(A+PC) MOVC A ,A+DPTR ; A(A+DPTR)功能功能:把累加器把累加器A中內(nèi)容與基址寄存器(中內(nèi)容與基址寄存器(PC、DPTR)內(nèi)容相加,求得程序存儲(chǔ)器某單元地址,)內(nèi)容相加,求得程序存儲(chǔ)器某單元地址,再把該地址單元內(nèi)容送累加器再把該地址單元內(nèi)容送累加器A。指令執(zhí)行后不。指令執(zhí)行后不改變基址寄存器內(nèi)容,由于執(zhí)行改變基址寄存器內(nèi)容,由于執(zhí)行16位加法,從低位加法,從低8位產(chǎn)生的進(jìn)位將傳送到高位去,不影響任何標(biāo)志。位產(chǎn)生的進(jìn)位將傳送到高位去,不影響任何標(biāo)志。71/277MOVC A ,A+PCMOVC A ,A+DPTR這兩條指
55、令主要用于查表,即完成從程序存儲(chǔ)這兩條指令主要用于查表,即完成從程序存儲(chǔ)器讀取數(shù)據(jù)的功能。器讀取數(shù)據(jù)的功能。由于兩條指令使用的基址寄存器不同,因此使由于兩條指令使用的基址寄存器不同,因此使用范圍也不同。用范圍也不同。72/277MOVC A ,A+PCMOVC A ,A+DPTR以以PC為基址寄存器時(shí),為基址寄存器時(shí),CPU在取出本指令后在取出本指令后PC自動(dòng)加自動(dòng)加1,因?yàn)楸局噶顬?,因?yàn)楸局噶顬?字節(jié)指令,所以這時(shí)字節(jié)指令,所以這時(shí)PC已不是原值,已不是原值,而是而是PC+1的值。因?yàn)槔奂悠髦械膬?nèi)容為的值。因?yàn)槔奂悠髦械膬?nèi)容為8位無(wú)符號(hào)整位無(wú)符號(hào)整數(shù),這就使得本指令查表范圍只能在以數(shù),這就使
56、得本指令查表范圍只能在以PC當(dāng)前值開(kāi)始當(dāng)前值開(kāi)始后的后的256個(gè)字節(jié)范圍內(nèi);個(gè)字節(jié)范圍內(nèi);以以DPTR作為基址寄存器時(shí),由于作為基址寄存器時(shí),由于DPTR的內(nèi)容可賦不的內(nèi)容可賦不同的值,使得該指令應(yīng)用范圍較為廣泛,表格常數(shù)可同的值,使得該指令應(yīng)用范圍較為廣泛,表格常數(shù)可設(shè)置在設(shè)置在64KB程序存儲(chǔ)器的任何地址空間。其缺點(diǎn)是,程序存儲(chǔ)器的任何地址空間。其缺點(diǎn)是,若若DPTR已有它用,在賦表首地址之前必須保護(hù)現(xiàn)場(chǎng),已有它用,在賦表首地址之前必須保護(hù)現(xiàn)場(chǎng),執(zhí)行完查表后再予以恢復(fù)。執(zhí)行完查表后再予以恢復(fù)。73/277【例【例4-1】 試編制根據(jù)累加器試編制根據(jù)累加器A中的數(shù)(中的數(shù)(09之間)查其平之
57、間)查其平方表的子程序。方表的子程序。解:程序代碼如下:解:程序代碼如下: COUNT: PUSH DPH PUSH DPL ;保護(hù)保護(hù)DPTR內(nèi)容內(nèi)容 MOVDPTR ,#TABLE;賦表首址賦表首址DPTR MOVC A ,A+DPTR;據(jù)據(jù)A中內(nèi)容查表中內(nèi)容查表 POP DPL POP DPH ;恢復(fù)恢復(fù)DPTR原內(nèi)容原內(nèi)容 RET ;返回返回 TABLE: DB 00,01,04,09,16,25,36,49,64,8174/277二、數(shù)據(jù)交換指令二、數(shù)據(jù)交換指令包括包括字節(jié)交換指令字節(jié)交換指令和和半字節(jié)交換半字節(jié)交換指令。指令。1、字節(jié)交換指令、字節(jié)交換指令 XCH A,addr8
58、;A(addr8) XCH A,Ri ;A(Ri) XCH A,Rn ;ARn 上述指令把累加器上述指令把累加器A中內(nèi)容與第二操作數(shù)所中內(nèi)容與第二操作數(shù)所指定的工作寄存器、間接尋址或直接尋址的指定的工作寄存器、間接尋址或直接尋址的某單元內(nèi)容互相交換。某單元內(nèi)容互相交換。75/277例如,例如,設(shè)設(shè)R0=20H,A=3FH,(,(20H)=75H,執(zhí)行指令執(zhí)行指令 XCH A,R0 ;執(zhí)行結(jié)果執(zhí)行結(jié)果A=75H,(,(20H)=3FH76/2772、半字節(jié)交換指令、半字節(jié)交換指令 XCHD A,Ri ;A30(Ri)30 該指令把累加器該指令把累加器A的低的低4位和寄存器間接尋位和寄存器間接尋址
59、的內(nèi)部址的內(nèi)部RAM單元的低單元的低4位交換,高位交換,高4位內(nèi)容位內(nèi)容不變,不影響標(biāo)志位。不變,不影響標(biāo)志位。例如,設(shè)例如,設(shè)R1的內(nèi)容為的內(nèi)容為30H,A的內(nèi)容為的內(nèi)容為69H,內(nèi)部,內(nèi)部RAM中中30H的內(nèi)容為的內(nèi)容為87H,指令,指令 XCHD A,R1 ; 執(zhí)行結(jié)果:執(zhí)行結(jié)果:A=67H,(,(30H)=89H77/277三、棧操作指令三、棧操作指令棧的作用棧的作用主程序調(diào)用子程序或中斷處理過(guò)程時(shí),分別要主程序調(diào)用子程序或中斷處理過(guò)程時(shí),分別要保存返回地址即斷點(diǎn)地址和保護(hù)現(xiàn)場(chǎng),以便在保存返回地址即斷點(diǎn)地址和保護(hù)現(xiàn)場(chǎng),以便在返回時(shí)能夠回到調(diào)用前的程序段,繼續(xù)運(yùn)行原返回時(shí)能夠回到調(diào)用前的
60、程序段,繼續(xù)運(yùn)行原來(lái)的程序。來(lái)的程序。進(jìn)入子程序或中斷處理程序后,需要保護(hù)子程進(jìn)入子程序或中斷處理程序后,需要保護(hù)子程序或中斷處理程序所用到的通用寄存器中的數(shù)序或中斷處理程序所用到的通用寄存器中的數(shù)據(jù)。據(jù)。78/277現(xiàn)場(chǎng)保護(hù)和恢復(fù)現(xiàn)場(chǎng)保護(hù)和恢復(fù)保護(hù)現(xiàn)場(chǎng)保護(hù)現(xiàn)場(chǎng):進(jìn)入子程序或中斷處理程序后還要保護(hù)所:進(jìn)入子程序或中斷處理程序后還要保護(hù)所用寄存器的值。用寄存器的值?;謴?fù)現(xiàn)場(chǎng)恢復(fù)現(xiàn)場(chǎng):子程序返回或中斷處理返回前,還要能夠:子程序返回或中斷處理返回前,還要能夠恢復(fù)這些寄存器的值恢復(fù)這些寄存器的值保存返回地址的方法保存返回地址的方法:將返回地址(斷點(diǎn)地址)保存到將返回地址(斷點(diǎn)地址)保存到堆棧中,返回
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年版產(chǎn)業(yè)園區(qū)招商引資代理服務(wù)合同6篇
- 2025年榆林神木精益化工有限公司招聘筆試參考題庫(kù)含答案解析
- 2025年江蘇南京市建鄴區(qū)人才集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 2025年浙江金華市婺城區(qū)招商引才專(zhuān)員及訊城公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年度個(gè)人房產(chǎn)交易貸款擔(dān)保合同樣本
- 二零二五年度美發(fā)行業(yè)知識(shí)產(chǎn)權(quán)保護(hù)合同12篇
- 漳州理工職業(yè)學(xué)院《舞蹈表演基礎(chǔ)(體育舞蹈)》2023-2024學(xué)年第一學(xué)期期末試卷
- 漳州城市職業(yè)學(xué)院《獨(dú)立式住宅設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 湛江科技學(xué)院《圖形圖像處理實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年美甲店員工績(jī)效考核與薪酬合同4篇
- 常見(jiàn)老年慢性病防治與護(hù)理課件整理
- 履約情況證明(共6篇)
- 云南省迪慶藏族自治州各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)
- 設(shè)備機(jī)房出入登記表
- 六年級(jí)語(yǔ)文-文言文閱讀訓(xùn)練題50篇-含答案
- 醫(yī)用冰箱溫度登記表
- 零售學(xué)(第二版)第01章零售導(dǎo)論
- 大學(xué)植物生理學(xué)經(jīng)典05植物光合作用
- 口袋妖怪白金光圖文攻略2周目
- 光伏發(fā)電站集中監(jiān)控系統(tǒng)通信及數(shù)據(jù)標(biāo)準(zhǔn)
- 三年級(jí)下冊(cè)生字組詞(帶拼音)
評(píng)論
0/150
提交評(píng)論