- 單片微型計算機原理及應(yīng)用
- 姜志海 劉連鑫 王蕾編著
- 2698字
- 2019-01-09 14:52:28
第4章 MCS-51系列單片機指令系統(tǒng)
指令是CPU執(zhí)行某種操作的命令,CPU所具有的全部指令的集合稱為指令系統(tǒng)。計算機的指令系統(tǒng)是表征計算機性能的重要指標,每種類型的計算機都有自己的指令系統(tǒng)。指令系統(tǒng)是制造廠家在設(shè)計CPU時所賦予它的功能,用戶必須正確書寫和使用。因此,學習指令系統(tǒng),掌握指令的功能和應(yīng)用是十分重要的,這是用匯編語言進行程序設(shè)計的基礎(chǔ)。本章我們將詳細介紹MCS-51系列單片機指令系統(tǒng)的功能和使用方法。
4.1 概述
4.1.1 指令和指令系統(tǒng)
微型計算機的功能是從外部世界接受信息,經(jīng)CPU加工、處理,然后把結(jié)果送到計算機外部。設(shè)計一臺計算機,首先要提供一套具有特定功能的操作命令,這種操作命令稱為指令。CPU所能執(zhí)行的各種指令的集合稱為指令系統(tǒng)。從指令是反映計算機內(nèi)部的一種操作來看,指令系統(tǒng)全面展示了計算機的操作功能,也就是它的工作原理;從用戶使用的角度看,指令系統(tǒng)是提供用戶使用計算機功能的軟件資源。
設(shè)計一種微處理器,一般從設(shè)計指令開始。指令系統(tǒng)因機種不同而異。例如代碼01001111B(4FH),對Z80CPU是將累加器A中的內(nèi)容傳送給寄存器C;對于M6800 CPU是將累加器A清零;而對MCS-51單片機卻是將累加器A和工作寄存器R7進行“與”操作。
指令一般有功能、時間和空間三種屬性。功能屬性是指每條指令所對應(yīng)的一個特定的操作功能;時間屬性是指一條指令執(zhí)行所用的時間,一般用機器周期來表示;空間屬性是指一條指令在程序存儲器中存儲時所占用的字節(jié)數(shù)。這三種屬性在使用中最重要的是功能屬性,但時間、空間屬性在有些場合也要用到。如一些實時控制應(yīng)用程序中,有時需要計算一個程序段的確切執(zhí)行時間或編寫軟件延時程序,這時就都要用到每條指令的時間屬性;在程序存儲器的空間設(shè)計或進行相對轉(zhuǎn)移指令的偏移量計算時,就要用到指令的空間屬性。不同情況下關(guān)注的屬性是不同的。
微型計算機的指令系統(tǒng)由幾十條到幾百條指令構(gòu)成。每種指令又由兩個字段構(gòu)成,即操作碼字段和操作數(shù)字段。操作碼字段表明指令執(zhí)行何種性質(zhì)的操作,例如加法操作、減法操作、傳送操作等。它由一組二進制代碼表示,在匯編語言中又用助記符代表。操作數(shù)字段指明指令的操作所需要的數(shù)據(jù)。該字段中,可以是操作數(shù)本身或操作數(shù)地址。在指令中,操作數(shù)可有一個或兩個,前者稱為單操作數(shù)指令,后者稱為雙操作數(shù)指令,而雙操作數(shù)又分別稱為源操作數(shù)和目的操作數(shù)。
一種CPU的指令系統(tǒng)是該CPU本身所固有的,用戶無法改變,只能接受和應(yīng)用它。雖然各種CPU指令系統(tǒng)各不相同,但它們的指令類型、指令格式、指令基本操作及尋址方式有很多共同之處。因此學習好一種CPU的指令系統(tǒng),再掌握其他CPU的指令系統(tǒng)就容易了。
4.1.2 程序與程序設(shè)計
計算機要完成一項工作,必須按要求去執(zhí)行各種操作,即一步步地執(zhí)行一條條指令,這些按預(yù)定要求編排的指令序列稱為程序。編排程序的過程稱為程序設(shè)計。程序必須存放在存儲器中,CPU逐條取出指令并執(zhí)行之,從而完成預(yù)定的任務(wù)。下面通過一個例子進行說明。
【例4-1】 在程序存儲器中存放著一個ASCII碼表,通過查表,將十六進制數(shù)轉(zhuǎn)換成ASCII碼。設(shè)十六進制數(shù)存放在R0中的低4位,要求將轉(zhuǎn)換后的ASCII碼送回到R0中(用MCS-51單片機指令編寫)。
如圖4-1 所示,程序和數(shù)據(jù)塊已存放在存儲器中,都是以二進制數(shù)的形式存放的。帶“·”的地址中存放的是指令的操作碼,這些操作碼規(guī)定了機器執(zhí)行什么操作;程序中還有指令的操作數(shù),是指令的操作對象,地址單元3008H~3017H中存放的是0~F的ASCII碼。在微機應(yīng)用中,大量的工作是編寫程序。程序設(shè)計過程就是根據(jù)任務(wù)要求和算法,從指令系統(tǒng)中選取合適的指令,給出必要的操作數(shù)(或操作數(shù)地址),加以合理的排列而得到程序的一個過程。

圖4-1 程序和表格在存儲器中存放示意圖
上例中的二進制代碼稱為指令代碼。由于計算機的CPU只能認識和識別二進制代碼,所以又稱為機器碼。一種計算機有幾十種甚至上百種機器指令,都用二進制碼表示是很困難的。所以,通常用十六進制碼表示指令碼,但這仍解決不了記憶問題和閱讀問題。
為了記憶和閱讀方便,制造廠家對指令系統(tǒng)中的每一條指令都給出了符號作為指令助記符。如圖4-1中的第一個操作碼“11101000”用MOV A,R0表示,“01010100”和“00001111”用ANL A,#0FH表示等,這就容易記憶,容易理解,清晰可讀。
用助記符(操作符)、操作數(shù)(或其地址)和標號編寫的程序稱為匯編(符號)語言程序。用匯編語言編寫的例4-1的程序如下:
標號 操作碼 操作數(shù) 注釋 ORG 0000H ASCCB: MOV A,R0 ;取數(shù) ANL A,#0FH ;屏蔽高4位 ADD A,#02H ;變址調(diào)整 MOVC A,@A+PC ;查表 MOV R0,A ;送結(jié)果 RET ;返回 ASCTAB: DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H
匯編(符號)語言程序也稱為源程序,計算機要執(zhí)行程序,需要將源程序翻譯成機器語言,這個過程稱為匯編。有時需要將機器語言翻譯成源程序,這個過程稱為反匯編。
為了完成源程序的匯編工作,匯編程序給程序員在程序格式上做了一些規(guī)定。上例中給出的是匯編語言的標準格式。一個匯編語言程序由若干行組成,每行包含一條指令。每行分為4個區(qū)段:
[標號:] 操作碼 [操作數(shù)] [;注釋]
每行除操作碼部分是必需的外,其他帶中括號的區(qū)段是任選項,不是必需的。
在4個區(qū)段之間要用分隔符分開,標號后接一冒號,操作碼和操作數(shù)之間用一空格隔開,注釋段用一分號開始。另外,使用匯編語言編寫的程序(源程序)不要求每行的各個區(qū)段都一一對齊,但將各個區(qū)段對齊可使程序就更加清晰、可讀。
① 標號是該指令的符號地址,標號值代表這條指令在程序存儲器中的存放地址,可根據(jù)需要設(shè)定。標號必須以字母開始,以冒號“:”結(jié)束,所用字符一般不超過8個(視匯編程序版本不同而異)。系統(tǒng)中保留使用的字符或字符組成不能用做標號。一旦某個標號賦給某個語句,則其他語句的操作數(shù)可以直接引用該標號,以便尋址或控制程序轉(zhuǎn)移。標號在每條語句中是任選項。
② 操作碼在匯編語言中由英文字母縮寫而成。操作碼是匯編語言程序每一句所必需的部分,它決定了語句的操作性質(zhì),反映了指令的功能。操作碼和操作數(shù)之間用空格分開。
③ 操作數(shù)指示出的是參加運算的數(shù)據(jù),可以是數(shù)字、操作數(shù)地址、寄存器等。操作數(shù)又分為目的操作數(shù)和源操作數(shù)兩種,二者之間用逗號“,”分開。另外,有些語句中可以無操作數(shù),只是一個命令。
④ 注釋以分號“;”開頭,計算機在匯編時對這部分不予處理,是程序員對指令操作的解釋。注釋必須在一行之內(nèi)寫完,換行時需要另外以分號“;”開始。注釋內(nèi)容可為任何字符。不需要每行都加注釋,僅在某些關(guān)鍵行注釋就可以了。
編程者(程序員)在編程時,一定要嚴格按規(guī)定的格式書寫程序。
4.1.3 操作數(shù)的類型
計算機在工作過程中,主要是對數(shù)據(jù)的處理,即對操作數(shù)的處理。
操作數(shù)的類型有三種:立即數(shù)、寄存器操作數(shù)、存儲器操作數(shù)。
1.立即數(shù)
立即數(shù)是作為指令代碼的一部分出現(xiàn)在指令中的,它通常作為源操作數(shù)使用。
在匯編指令中,立即數(shù)可以用二進制、十六進制或十進制等數(shù)制形式表示,也可以寫成一個可求出確定值的表達式來表示。
2.寄存器操作數(shù)
寄存器操作數(shù)把操作數(shù)存放在寄存器中,即用寄存器存放源操作數(shù)或目的操作數(shù)。
通常在指令中給出寄存器的名稱,在雙操作數(shù)指令中,可以作為源操作數(shù),也可以作為目的操作數(shù)。
3.存儲器操作數(shù)
存儲器操作數(shù)把操作數(shù)放在存儲器中,因此在匯編指令中給出的是存儲器的地址。
- 用Proteus可視化設(shè)計玩轉(zhuǎn)Arduino
- PIC單片機常用模塊與綜合系統(tǒng)設(shè)計實例精講
- 51單片機C語言編程一學就會
- 單片微型計算機原理及應(yīng)用
- 單片機應(yīng)用技術(shù)實訓指導(dǎo)
- 愛上單片機(第4版)
- 基于ARM Cortex-M0+的CW32嵌入式開發(fā)實戰(zhàn)
- 丹佛斯變頻器控制技術(shù)
- 51單片機應(yīng)用開發(fā)案例手冊
- 51單片機應(yīng)用開發(fā)從入門到精通(“十二五”國家重點圖書出版規(guī)劃項目)
- 基于Proteus的51系列單片機設(shè)計與仿真(第4版)
- 增強型單片機XC866原理及應(yīng)用
- 單片微機原理與應(yīng)用
- 帕金森狀態(tài)的脈沖神經(jīng)網(wǎng)絡(luò)建模及最優(yōu)控制
- AVR單片機入門與速成攻略