單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)知識(shí)課件_第1頁(yè)
單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)知識(shí)課件_第2頁(yè)
單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)知識(shí)課件_第3頁(yè)
單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)知識(shí)課件_第4頁(yè)
單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)知識(shí)課件_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第四章匯編語(yǔ)言程序設(shè)計(jì)第四章匯編語(yǔ)言程序設(shè)計(jì)4.1.1匯編語(yǔ)言的構(gòu)成用MCS-51匯編語(yǔ)言編寫的源程序行(一條語(yǔ)句)包括四個(gè)部分,也叫四個(gè)字段:〔標(biāo)號(hào):〕〔操作碼〕〔操作數(shù)〕;〔注釋〕

每個(gè)字段之間要用分隔符分隔,而每個(gè)字段內(nèi)部不能使用分隔符??梢杂米鞣指舴姆?hào):空格“”、冒號(hào)“:”、、逗號(hào)“,”、分號(hào)“;”等。例:LOOP:MOVA,#00H;立即數(shù)00H→A4.1.1匯編語(yǔ)言的構(gòu)成用MCS-51匯編語(yǔ)言編寫的源程序行標(biāo)號(hào)標(biāo)號(hào)是用戶定義的符號(hào)地址。一條指令的標(biāo)號(hào)是該條指令的符號(hào)名字,標(biāo)號(hào)的值是匯編這條指令時(shí)指令的地址。標(biāo)號(hào)由以英文字母開始的1~8個(gè)字母或數(shù)字組成,以冒號(hào)“:”結(jié)尾。標(biāo)號(hào)可以由賦值偽指令賦值,如果沒(méi)有賦值,匯編程序把存放該指令目標(biāo)碼第一字節(jié)的存儲(chǔ)單元的地址賦給該標(biāo)號(hào),所以,標(biāo)號(hào)又叫指令標(biāo)號(hào)。標(biāo)號(hào)標(biāo)號(hào)是用戶定義的符號(hào)地址。操作碼操作碼是必不可少的。它用一組字母符號(hào)表示指令的操作碼。在MCS-51中,由MCS-51的指令助記符組成。操作碼操作碼是必不可少的。操作數(shù)匯編語(yǔ)言指令可能要求或不要求操作數(shù),所以這一字段可能有也可能沒(méi)有。若有兩個(gè)操作數(shù),操作數(shù)之間用逗號(hào)“,”分開。操作數(shù)包括的內(nèi)容有:(1)工作寄存器:由PSW.3和PSW.4規(guī)定的當(dāng)前工作寄存器區(qū)中的R0~R7。(2)特殊功能寄存器:21個(gè)SFR的名字。(3)標(biāo)號(hào)名:賦值標(biāo)號(hào)—由匯編指令EQU等賦值的標(biāo)號(hào);指令標(biāo)號(hào)—指令標(biāo)號(hào)指示的指令的第一字節(jié)地址是該標(biāo)號(hào)的值。(4)常數(shù):可用二進(jìn)制(B)、十進(jìn)制、十六進(jìn)制(H),若常數(shù)以字符開頭,前面加0。(5)$:用來(lái)表示程序計(jì)數(shù)器的當(dāng)前值。(6)表達(dá)式:匯編時(shí),計(jì)算出表達(dá)式的值填入目標(biāo)碼。操作數(shù)匯編語(yǔ)言指令可能要求或不要求操作數(shù),所以這一字段可能有注釋注釋部分不是匯編語(yǔ)言的功能部分,只是用語(yǔ)增加程序的可讀性。良好的注釋是匯編語(yǔ)言程序編寫中的重要組成部分。注釋注釋部分不是匯編語(yǔ)言的功能部分,只是用語(yǔ)增加程序的可讀性偽指令偽指令不是真正的指令,無(wú)對(duì)應(yīng)的機(jī)器碼,在匯編時(shí)不產(chǎn)生目標(biāo)程序,只是用來(lái)對(duì)匯編過(guò)程進(jìn)行某種控制。偽指令偽指令不是真正的指令,無(wú)對(duì)應(yīng)的機(jī)器碼,在匯編時(shí)不產(chǎn)生目ORG匯編起始命令格式:ORG16位地址功能:規(guī)定該偽指令后面程序的匯編地址,即匯編后生成目標(biāo)程序存放的起始地址。例如:

ORG2000HSTART:MOVA,#64H┇規(guī)定了START的地址是2000H,又規(guī)定了匯編后的第一條指令碼從2000H開始存放。ORG匯編起始命令格式:ORG16位地址EQU賦值命令格式:字符名稱EQU項(xiàng)(數(shù)或匯編符號(hào))功能:把“項(xiàng)”賦給“字符名稱”。注意:字符名稱不等于標(biāo)號(hào)(其后沒(méi)有冒號(hào));其中的項(xiàng),可以是數(shù),也可以是匯編符號(hào)。EQU賦值過(guò)的符號(hào)名可以用作數(shù)據(jù)、代碼地址、位地址或一個(gè)立即數(shù)??梢允?位的,也可以是16位的。EQU賦值命令格式:字符名稱EQU項(xiàng)(數(shù)或匯編EQU賦值命令例1:AAEQUR1MOVA,AA;AA代表工作寄存器R1例2:

A10EQU10DELYEQU07EBHMOVA,A10;A10作為片內(nèi)的一個(gè)直接地址

LCALLDELY;DELY作為一個(gè)16位子程序的入口地址EQU賦值命令例1:DB定義字節(jié)命令格式:DB(項(xiàng)或項(xiàng)表)功能:通知匯編程序從當(dāng)前ROM地址開始,保留一個(gè)字或字節(jié)串的存儲(chǔ)單元,并存入DB后的數(shù)據(jù)。注意:項(xiàng)或項(xiàng)表可以是一個(gè)字節(jié),用逗號(hào)隔開的字節(jié)串或括在單引號(hào)中的ASCII字符串。例如:DB定義字節(jié)命令格式:DB(項(xiàng)或項(xiàng)表)DB定義字節(jié)命令

ORG2000HDB0A3HLIST:DB26H,03HSTR:DB‘ABC’┇經(jīng)匯編后(2000H)=A3H,(2001H)=26H,(2002H)=03H,(2003H)=41H,(2004H)=42H,(2005H)=43H,(41H,42H,43H分別為A,B,C的ASCII碼)DB定義字節(jié)命令ORG2DW定義字命令格式:DW16位數(shù)據(jù)項(xiàng)或項(xiàng)表功能:把DW后的16位數(shù)據(jù)項(xiàng)或項(xiàng)表從當(dāng)前地址連續(xù)存放。每項(xiàng)數(shù)值為16位二進(jìn)制數(shù),高8位先放,低8位后存放。DW用于定義一個(gè)地址表。例如:DW定義字命令格式:DW16位數(shù)據(jù)項(xiàng)或項(xiàng)表DW定義字命令

ORG1500HTABLE:DW7234H,8AH,10H┇經(jīng)匯編后(1500H)=72H,(1501H)=34H,(1502H)=00H,(1503H)=8AH,(1504H)=00H,(1505H)=10H,DW定義字命令ORGDS定義存儲(chǔ)空間命令格式:DS表達(dá)式功能:在匯編時(shí),從指定地址開始保留DS之后表達(dá)式的值所規(guī)定的存儲(chǔ)單元以備后用。例如:ORG1000HDS08HDB30H,8AH匯編后,從1000H保留8個(gè)單元,然后從1008H按DB命令給內(nèi)存賦值,即(1008H)=30H

(1009H)=8AHDS定義存儲(chǔ)空間命令格式:DS表達(dá)式BIT位地址符號(hào)命令格式:字符名BIT位地址功能:把BIT后的位地址值賦給字符名。其中字符名不是標(biāo)號(hào),其后沒(méi)有冒號(hào),但字符名是必須的。例如:A1BITP1.0A2BIT02H匯編后,P1口第0位的位地址90H就賦給了A1,而A2的值則為02H。BIT位地址符號(hào)命令格式:字符名BIT位地址DATA數(shù)據(jù)地址賦值命令格式:字符名稱DATA表達(dá)式功能:與EQU類似,但有以下差別:1、EQU定義的字符名必須先定義后使用,而DATA定義的字符名可以后定義先使用。2、用EQU偽指令可以把一個(gè)匯編符號(hào)賦給一個(gè)名字,而DATA只能把數(shù)據(jù)賦給字符名。3、DATA語(yǔ)句可以把一個(gè)表達(dá)式的值賦給字符名稱,其中的表達(dá)式應(yīng)是可求值的。DATA數(shù)據(jù)地址賦值命令格式:字符名稱DATAEND匯編結(jié)束指令格式:END功能:通知匯編程序結(jié)束匯編。在END之后所有的匯編指令均不予以處理。END匯編結(jié)束指令格式:END4.2匯編語(yǔ)言源程序的編輯和匯編4.2匯編語(yǔ)言源程序的編輯和匯編§4.2.1源程序編輯在微型計(jì)算機(jī)上,借助編輯軟件,編寫或修改匯編語(yǔ)言源程序。如行編輯或屏幕編輯軟件?!?.2.1源程序編輯在微型計(jì)算機(jī)上,借助編輯軟件,編寫§4.2.2源程序的匯編匯編:將匯編語(yǔ)言源程序轉(zhuǎn)換為機(jī)器碼表示的目標(biāo)程序的過(guò)程。對(duì)單片機(jī)有:

一、手工匯編

二、機(jī)器匯編

三、反匯編§4.2.2源程序的匯編匯編:將匯編語(yǔ)言源程序轉(zhuǎn)換為機(jī)器一、手工匯編通過(guò)手工方式查指令編碼表,逐個(gè)把助記符指令“翻譯”成機(jī)器碼,然后把得到的機(jī)器碼程序鍵入單片機(jī),進(jìn)行調(diào)試和運(yùn)行。手工匯編的缺點(diǎn):

1、偏移量的計(jì)算容易出錯(cuò)

2、程序的修改會(huì)引起后面指令地址的變化,轉(zhuǎn)移指令的偏移量也要重新計(jì)算。一、手工匯編通過(guò)手工方式查指令編碼表,逐個(gè)把助記符指令“翻譯二、機(jī)器匯編機(jī)器匯編是在計(jì)算機(jī)上使用交叉匯編程序進(jìn)行源程序的匯編。匯編工作由機(jī)器自動(dòng)完成,最后得到以機(jī)器碼表示的目標(biāo)程序。二、機(jī)器匯編機(jī)器匯編是在計(jì)算機(jī)上使用交叉匯編程序進(jìn)行源程序的三、反匯編將二進(jìn)制機(jī)器語(yǔ)言程序翻譯成匯編語(yǔ)言程序的過(guò)程稱反匯編。匯編和反匯編的過(guò)程如圖4-3所示。三、反匯編將二進(jìn)制機(jī)器語(yǔ)言程序翻譯成匯編語(yǔ)言程序的過(guò)程稱反匯源程序(匯編語(yǔ)言)目標(biāo)碼(機(jī)器語(yǔ)言)匯編(匯編程序)反匯編(匯編程序)圖4-3匯編和反匯編過(guò)程源程序目標(biāo)碼匯編(匯編程序)反匯編(匯編程序)圖4-3§4.3編程的步驟、方法和技巧§4.3編程的步驟、方法和技巧§4.3.1編程的步驟一、分析問(wèn)題二、確定算法三、畫程序流程圖四、編寫程序§4.3.1編程的步驟一、分析問(wèn)題一、分析問(wèn)題對(duì)需要解決的問(wèn)題進(jìn)行分析,以求對(duì)問(wèn)題由正確的理解。解決問(wèn)題的任務(wù)是什么?工作過(guò)程?現(xiàn)有的條件,已知數(shù)據(jù),對(duì)運(yùn)算的精度和速度方面的要求?設(shè)計(jì)的硬件結(jié)構(gòu)是否方便編程?一、分析問(wèn)題對(duì)需要解決的問(wèn)題進(jìn)行分析,以求對(duì)問(wèn)題由正確的理解二、確定算法算法是如何將實(shí)際問(wèn)題轉(zhuǎn)化成程序模塊來(lái)處理。在編程以前,先要對(duì)幾種不同的算法進(jìn)行分析、比較,找出最適宜的算法二、確定算法算法是如何將實(shí)際問(wèn)題轉(zhuǎn)化成程序模塊來(lái)處理。三、畫程序流程圖程序流程圖是使用各種圖形、符號(hào)、有向線段等來(lái)說(shuō)明程序設(shè)計(jì)過(guò)程的一種直觀的表示。流程圖步驟分得越細(xì)致,編寫程序是也越方便。畫流程圖是程序結(jié)構(gòu)設(shè)計(jì)是采用的一種重要手段。一個(gè)系統(tǒng)軟件有總的流程圖(主程序框圖)和局部的流程圖。流程圖常采用的圖形和符號(hào)。三、畫程序流程圖程序流程圖是使用各種圖形、符號(hào)、有向線段等來(lái)橢圓框或桶形框:表示程序的開始或結(jié)束。矩形框:表示要進(jìn)行的工作。菱形框:表示要判斷的事情,菱形框內(nèi)的表達(dá)式表示要判斷的內(nèi)容。圓圈:表示連接點(diǎn)指向線:表示程序的流向橢圓框或桶形框:表示程序的開始或結(jié)束。矩形框:表示要進(jìn)行的工§4.4匯編語(yǔ)言程序的基本結(jié)構(gòu)一、順序程序二、分支程序三、循環(huán)程序§4.4匯編語(yǔ)言程序的基本結(jié)構(gòu)一、順序程序一、順序程序順序程序是最簡(jiǎn)單的程序結(jié)構(gòu),即順序結(jié)構(gòu)。程序按順序一條一條地執(zhí)行指令。一、順序程序順序程序是最簡(jiǎn)單的程序結(jié)構(gòu),即順序結(jié)構(gòu)。例:請(qǐng)編寫能把20H單元內(nèi)兩個(gè)BCD數(shù)變成相應(yīng)的ASCII碼并放在20H(高位)和21H(低位)分析:根據(jù)ACSII字符表,0~9的BCD數(shù)和ASCII碼相差30H。所以,只要將20H中兩個(gè)BCD數(shù)拆開,分別加30H程序如下:ORG1000HMOVR0,#22HMOV@R0,#00HMOVA,20HXCHDA,@R0ORL22H,#30HSWAPAORLA,#30HMOV21H,ASJMP$END例:請(qǐng)編寫能把20H單元內(nèi)兩個(gè)BCD數(shù)變成相應(yīng)的ASCII碼例2:16位數(shù)求補(bǔ)。設(shè)16位二進(jìn)制數(shù)在R1R0中,求補(bǔ)結(jié)果存于R3R2中。Back例2:16位數(shù)求補(bǔ)。設(shè)16位二進(jìn)制數(shù)在R1R0中,求補(bǔ)結(jié)果存二、分支程序程序分支是通過(guò)條件轉(zhuǎn)移指令實(shí)現(xiàn)的,即根據(jù)條件對(duì)程序的執(zhí)行進(jìn)行判斷、滿足條件則進(jìn)行程序轉(zhuǎn)移,不滿足條件就順序執(zhí)行程序。分支程序又分為單分支和多分支結(jié)構(gòu)。多分支程序是首先把分支程序按序號(hào)排列,然后按序號(hào)值進(jìn)行轉(zhuǎn)移。二、分支程序程序分支是通過(guò)條件轉(zhuǎn)移指令實(shí)現(xiàn)的,即根據(jù)條件對(duì)程在MCS-51指令系統(tǒng)中,通過(guò)條件判斷實(shí)現(xiàn)單分支程序轉(zhuǎn)移的指令有:JZ、JNZ、CJNE、DJNZ等。此外還有以位狀態(tài)作為條件進(jìn)行程序分支的指令,如JC、JNC、JB、JNB、JBC等。使用這些指令可以完成0、1、正、負(fù),以及相等、不相等作為各種條件判斷依據(jù)的程序轉(zhuǎn)移。在MCS-51指令系統(tǒng)中,通過(guò)條件判斷實(shí)現(xiàn)單分支程序轉(zhuǎn)移的指

例:片內(nèi)RAMONE和TWO兩個(gè)單元中存有兩個(gè)無(wú)符號(hào)數(shù),將兩個(gè)數(shù)中的小者存入30H單元。Back 例:片內(nèi)RAMONE和TWO兩個(gè)單元中存有兩個(gè)無(wú)符號(hào)數(shù)三、循環(huán)程序在程序運(yùn)行時(shí),有時(shí)需要連續(xù)重復(fù)執(zhí)行某段程序,可以使用循環(huán)程序。其結(jié)構(gòu)包括四部分:

1、置循環(huán)初值

2、循環(huán)體(循環(huán)工作部分)

3、修改控制變量

4、循環(huán)控制部分其組織方式如圖4-2所示。三、循環(huán)程序在程序運(yùn)行時(shí),有時(shí)需要連續(xù)重復(fù)執(zhí)行某段程序,可以1、置循環(huán)初值對(duì)于循環(huán)程序中所使用的工作單元,在循環(huán)開始時(shí)應(yīng)置初值。例如,工作寄存器設(shè)置計(jì)數(shù)初值,累加器A清0,以及設(shè)置地址指針、長(zhǎng)度等。1、置循環(huán)初值對(duì)于循環(huán)程序中所使用的工作單元,在循環(huán)開始時(shí)應(yīng)2、循環(huán)體(循環(huán)工作部分)重復(fù)執(zhí)行的程序段部分,分為循環(huán)工作部分和循環(huán)控制部分。循環(huán)控制部分每循環(huán)一次,檢查結(jié)束條件,當(dāng)滿足條件時(shí),就停止循環(huán),往下繼續(xù)執(zhí)行其他程序2、循環(huán)體(循環(huán)工作部分)重復(fù)執(zhí)行的程序段部分,分為循環(huán)工作3、修改控制變量在循環(huán)程序中,不許給出循環(huán)結(jié)束條件。常見(jiàn)的是計(jì)數(shù)循環(huán),當(dāng)循環(huán)了一定的次數(shù)后,就停止循環(huán)。在單片機(jī)中,一般用一個(gè)工作寄存器Rn作為計(jì)數(shù)器,對(duì)該計(jì)數(shù)器賦初值作為循環(huán)次數(shù)。每循環(huán)一次,計(jì)數(shù)器的值減1,即修改循環(huán)控制變量,當(dāng)計(jì)數(shù)器的置件為0時(shí),就停止循環(huán)。3、修改控制變量在循環(huán)程序中,不許給出循環(huán)結(jié)束條件。4、循環(huán)控制部分根據(jù)循環(huán)結(jié)束條件,判斷是否結(jié)束循環(huán)。MCS-51可采用DJNZ指令來(lái)自動(dòng)修改控制變量并能結(jié)束循環(huán)。4、循環(huán)控制部分根據(jù)循環(huán)結(jié)束條件,判斷是否結(jié)束循環(huán)。置初值循環(huán)體循環(huán)修改循環(huán)控制退出循環(huán)未完完(a)置初值循環(huán)體循環(huán)修改循環(huán)控制退出循環(huán)未完完(b)圖4-2循環(huán)組織方式流程圖置初值循環(huán)體循環(huán)修改循環(huán)控制退出循環(huán)未完完(a)置初值循環(huán)體

Back例1:統(tǒng)計(jì)字串長(zhǎng)度。內(nèi)存從STRING開始有一字串,該字串以$結(jié)束,試統(tǒng)計(jì)該字串長(zhǎng)度,結(jié)果存于NUM單元中。Back例1:統(tǒng)計(jì)字串長(zhǎng)度。內(nèi)存從STRING開始有一字例:已知內(nèi)部RAM的BLOCK單元開始有一無(wú)符號(hào)數(shù)據(jù)塊,塊長(zhǎng)在LEN單元。請(qǐng)編寫求數(shù)據(jù)塊中各數(shù)累加和并存人SUM單元的程序。例:已知內(nèi)部RAM的BLOCK單元開始有一無(wú)符號(hào)數(shù)據(jù)塊,塊ORG0200HLENDATA20HSUMDATA21HBLOCKDATA22HCLRAMOVR2,LEN;塊長(zhǎng)送R2MOVR1,#BLOCK;塊起始地址送R1INCR2;R2一塊長(zhǎng)+1SJMPCHECKLOOP:ADDA,@R1;A<-A+(R1)INCR1;修改數(shù)據(jù)塊指針R1CHECK:DJNZR2,LOOP;若未完則轉(zhuǎn)LOOPMOVSUM,A;存累加和

SJMP$END方法B由同學(xué)們課后自己處理。ORG0200H方法B由同學(xué)們課后自己處理。查表程序

Back許多情況下,本來(lái)通過(guò)計(jì)算才能解決的問(wèn)題,可以用查表來(lái)解決,并且簡(jiǎn)便得多。因此,在實(shí)際單片機(jī)程序中,經(jīng)常會(huì)編寫查表程序以縮減程序的長(zhǎng)度,提高執(zhí)行效率。MOVCA,@A+DPTRMOVCA,@A+PC查表程序Back許多情況下,本來(lái)通過(guò)計(jì)算才能解決的問(wèn)題,可例:用查表法編一子程序,將40H單元中的BCD碼轉(zhuǎn)換成ASCII碼。

BackORG2000HTAB:DB30H31H32H33H34H35H36H37H38H39Hstart:MOVA,40HMOVDPTR,#TAB MOVCA,@A+DPTR MOV 40H,Aend例:用查表法編一子程序,將40H單元中的BCD碼轉(zhuǎn)換成ASC子程序設(shè)計(jì)

Back所謂子程序是指完成確定任務(wù)并能為其他程序反復(fù)調(diào)用的程序段。調(diào)用子程序的程序叫做主程序或稱調(diào)用程序。例如.代碼轉(zhuǎn)換、通用算術(shù)、函數(shù)計(jì)算、延時(shí)等等.都可以編成子程序。子程序設(shè)計(jì)Back所謂子程序是指完成確定任務(wù)并能為其他程序在編寫子程序時(shí)應(yīng)注意以下同題:(1)子程序的第一條指令地址稱為子程序的起始地址或入口地址。該指令前必須有標(biāo)號(hào),標(biāo)號(hào)應(yīng)以子程序任務(wù)定名。(2)主程序調(diào)用子程序是通過(guò)安排在主程序中的調(diào)用指令實(shí)現(xiàn)的。子程序返回主程序必須執(zhí)行子程序末尾的返回指令。(3)主程序調(diào)用于程序以及從子程序返

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論