匯編語(yǔ)言程序設(shè)計(jì)zl_第1頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)zl_第2頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)zl_第3頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)zl_第4頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)zl_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 l mcs-51指令所編寫的匯編語(yǔ)言源程序,必須經(jīng)過從匯編指令所編寫的匯編語(yǔ)言源程序,必須經(jīng)過從匯編源程序到機(jī)器語(yǔ)言目標(biāo)程序的源程序到機(jī)器語(yǔ)言目標(biāo)程序的“ 翻譯翻譯”,才能在,才能在 51 系系列單片機(jī)運(yùn)行,這種翻譯的過程稱為列單片機(jī)運(yùn)行,這種翻譯的過程稱為匯編匯編。l 匯編程序是將匯編源程序轉(zhuǎn)變?yōu)橄鄳?yīng)目標(biāo)程序的翻譯程匯編程序是將匯編源程序轉(zhuǎn)變?yōu)橄鄳?yīng)目標(biāo)程序的翻譯程序。由于指令助記符與機(jī)器語(yǔ)言指令是一一對(duì)應(yīng)的等價(jià)序。由于指令助記符與機(jī)器語(yǔ)言指令是一一對(duì)應(yīng)的等價(jià)關(guān)系,所以匯編程序能很容易將匯編源程序迅速、準(zhǔn)確、關(guān)系,所以匯編程序能很容易將匯編源程序迅速、準(zhǔn)確、 有效地翻譯成目標(biāo)程序。有效地翻譯

2、成目標(biāo)程序。 l 偽指令又稱偽指令又稱匯編控制指令匯編控制指令,是為了便于對(duì)匯編語(yǔ)言源,是為了便于對(duì)匯編語(yǔ)言源程序的匯編過程進(jìn)行控制,在編制匯編語(yǔ)言程序時(shí)加程序的匯編過程進(jìn)行控制,在編制匯編語(yǔ)言程序時(shí)加進(jìn)的一些特殊指令。進(jìn)的一些特殊指令。l 偽指令用來(lái)偽指令用來(lái)設(shè)置符號(hào)值設(shè)置符號(hào)值、保留和初始化存儲(chǔ)空間保留和初始化存儲(chǔ)空間、控控制用戶程序代碼的位置制用戶程序代碼的位置。l 偽指令僅起到幫助匯編順利進(jìn)行的作用,不產(chǎn)生任何偽指令僅起到幫助匯編順利進(jìn)行的作用,不產(chǎn)生任何機(jī)器碼,也不影響程序的執(zhí)行。機(jī)器碼,也不影響程序的執(zhí)行。(1)匯編起始地址偽指令)匯編起始地址偽指令 org 規(guī)定其后面目標(biāo)程序的起

3、始地址。它放在一段源程序規(guī)定其后面目標(biāo)程序的起始地址。它放在一段源程序(主程序、子程序)或數(shù)據(jù)塊的前面,說明緊跟在其后的程(主程序、子程序)或數(shù)據(jù)塊的前面,說明緊跟在其后的程序段或數(shù)據(jù)塊的起始地址就是序段或數(shù)據(jù)塊的起始地址就是指令中的指令中的16位絕對(duì)地址或用標(biāo)位絕對(duì)地址或用標(biāo)號(hào)、表達(dá)式表示的地址。號(hào)、表達(dá)式表示的地址。 例如:例如: org 2000hstart: mov a, #7fh 它表明標(biāo)號(hào)為它表明標(biāo)號(hào)為start的目標(biāo)程序是從的目標(biāo)程序是從2000h單元開始存放的。單元開始存放的。 (2)結(jié)束匯編偽指令)結(jié)束匯編偽指令endend是匯編語(yǔ)言源程序的結(jié)束標(biāo)志,表示匯編結(jié)束。在是匯編語(yǔ)

4、言源程序的結(jié)束標(biāo)志,表示匯編結(jié)束。在end以后所寫的指令,匯編程序都不予以處理。以后所寫的指令,匯編程序都不予以處理。 在一個(gè)源程序中只能有在一個(gè)源程序中只能有1條條end命令。在同時(shí)包含有主程序命令。在同時(shí)包含有主程序和子程序的源程序中,也只能有一個(gè)和子程序的源程序中,也只能有一個(gè)end命令,并放到所有命令,并放到所有指令的最后;否則,就有一部分指令不能被匯編。指令的最后;否則,就有一部分指令不能被匯編。 是選擇項(xiàng),只有主程序模塊才具有,且其值為該程是選擇項(xiàng),只有主程序模塊才具有,且其值為該程序模塊的入口地址。序模塊的入口地址。 也是選擇項(xiàng),當(dāng)源程序?yàn)橹鞒桃彩沁x擇項(xiàng),當(dāng)源程序?yàn)橹鞒绦驎r(shí)才具有

5、,且其值為主程序第序時(shí)才具有,且其值為主程序第1條指令的符號(hào)地址;當(dāng)源條指令的符號(hào)地址;當(dāng)源程序不是主程序時(shí),程序不是主程序時(shí),end命令不應(yīng)帶命令不應(yīng)帶項(xiàng)。項(xiàng)。(3) 賦值偽指令賦值偽指令equ 用于給字符名稱賦值。賦值后,其值在整個(gè)程序中有效用于給字符名稱賦值。賦值后,其值在整個(gè)程序中有效(不能再改變)。其中(不能再改變)。其中可以是常數(shù)、可以是常數(shù)、 地址、標(biāo)號(hào)或地址、標(biāo)號(hào)或表達(dá)式,其值為表達(dá)式,其值為8位或位或16位二進(jìn)制數(shù)。賦值以后的字符名稱既位二進(jìn)制數(shù)。賦值以后的字符名稱既可以作地址使用,也可以作立即數(shù)使用。可以作地址使用,也可以作立即數(shù)使用。例如:例如:tab equ 1000h

6、 tab1 equ tab前一條偽指令表示前一條偽指令表示tab地址的值為地址的值為1000h,后一條表示符號(hào)地址,后一條表示符號(hào)地址tab1與與tab等值(可以互換)。等值(可以互換)。(4)定義字節(jié)偽指令)定義字節(jié)偽指令 db用于從指定的地址開始,在程序存儲(chǔ)器的連續(xù)單元中定用于從指定的地址開始,在程序存儲(chǔ)器的連續(xù)單元中定義字節(jié)數(shù)據(jù)。義字節(jié)數(shù)據(jù)。8位數(shù)表可以是一字節(jié)常數(shù)或字符,或用逗號(hào)位數(shù)表可以是一字節(jié)常數(shù)或字符,或用逗號(hào)分開的字節(jié)串,或用引號(hào)括起來(lái)的字符串。分開的字節(jié)串,或用引號(hào)括起來(lái)的字符串。例如例如: org 2000h tab1: db 30h, 8ah, 7fh, 73 db 5,

7、 a, bcd30h2008h8ah2007h7fh2006h49h2005h35h2004h61h2003h42h2002h43h2001h44h2000h由于由于org 2000h,所以,所以tab1的地址為的地址為2000h,因此以上偽指令經(jīng)匯編以后,將對(duì),因此以上偽指令經(jīng)匯編以后,將對(duì)2000h開始的若干內(nèi)存單元賦值。開始的若干內(nèi)存單元賦值。(5)定義數(shù)據(jù)字偽指令)定義數(shù)據(jù)字偽指令 dw 用于從指定地址開始,在程序存儲(chǔ)器的連續(xù)單元中定義用于從指定地址開始,在程序存儲(chǔ)器的連續(xù)單元中定義16位的數(shù)據(jù)字。位的數(shù)據(jù)字。存放時(shí),存放時(shí),數(shù)據(jù)字的高數(shù)據(jù)字的高8位在前(低地址),低位在前(低地址),

8、低 8位在后(高地址)。位在后(高地址)。例如,例如, dw“aa”;存入存入41h,41hdw“a” ;存入存入00h,41hdw“abc”; 超過兩字節(jié)超過兩字節(jié),不合法不合法例如例如: org 1500h tab2: dw 1234h, 80h匯編以后匯編以后: (1500h)=12h(1501h)=34h(1502h)=00h(1503h)=80h。12h1503h34h1502h00h1501h80h1500h(6) 預(yù)留存儲(chǔ)空間偽指令預(yù)留存儲(chǔ)空間偽指令 ds 表達(dá)式表達(dá)式用于從指定地址開始,在程序存儲(chǔ)器中保留指定數(shù)目的單用于從指定地址開始,在程序存儲(chǔ)器中保留指定數(shù)目的單元作為預(yù)留存

9、儲(chǔ)區(qū),供程序運(yùn)行使用。源程序匯編時(shí),對(duì)預(yù)留元作為預(yù)留存儲(chǔ)區(qū),供程序運(yùn)行使用。源程序匯編時(shí),對(duì)預(yù)留單元不賦值。單元不賦值。例如:例如:addrtabl: ds 20;從標(biāo)號(hào)從標(biāo)號(hào)addrtabl代表的地址開始,預(yù)留代表的地址開始,預(yù)留20個(gè)連續(xù)的地址單元個(gè)連續(xù)的地址單元org8100hds08h;從從8100h地址開始,保留地址開始,保留8個(gè)連續(xù)的地址單元個(gè)連續(xù)的地址單元例如例如: org 1000hds 20hdb 30h, 8fh匯編后:從匯編后:從1000h開始,預(yù)留開始,預(yù)留 32(20h)個(gè)字節(jié)的內(nèi)存單元,然后從個(gè)字節(jié)的內(nèi)存單元,然后從1020h開始,按照下一條開始,按照下一條db指令

10、賦值,即指令賦值,即(1020h)=30h,(1021h)=8fh。 8fh1021h30h1020h101fh1001h1000h1002h (7) 位定義偽指令位定義偽指令 bit 用于給字符名稱賦以位地址。經(jīng)賦值后就可用指令中用于給字符名稱賦以位地址。經(jīng)賦值后就可用指令中bit左面的字符名稱來(lái)代替左面的字符名稱來(lái)代替bit右邊所指出的位。右邊所指出的位。 其中其中可以是絕對(duì)地址,也可以是符號(hào)地址(位符號(hào)名稱)??梢允墙^對(duì)地址,也可以是符號(hào)地址(位符號(hào)名稱)。例如:例如:flg bit f0 ai bit p1.0經(jīng)以上偽指令定義后,在編程中就可以把經(jīng)以上偽指令定義后,在編程中就可以把fl

11、g和和ai作為位地址作為位地址來(lái)使用。來(lái)使用。 順序結(jié)構(gòu)程序是最簡(jiǎn)單的程序結(jié)構(gòu),在順序結(jié)構(gòu)程序中既順序結(jié)構(gòu)程序是最簡(jiǎn)單的程序結(jié)構(gòu),在順序結(jié)構(gòu)程序中既無(wú)分支、循環(huán),也不調(diào)用子程序,程序執(zhí)行時(shí)一條一條的無(wú)分支、循環(huán),也不調(diào)用子程序,程序執(zhí)行時(shí)一條一條的按順序執(zhí)行指令。按順序執(zhí)行指令。解題思路:解題思路: 對(duì)于雙字節(jié)加法要分為高、低字節(jié)相加,高位相加時(shí)要用帶對(duì)于雙字節(jié)加法要分為高、低字節(jié)相加,高位相加時(shí)要用帶進(jìn)位的加法運(yùn)算。進(jìn)位的加法運(yùn)算。 要得到正確的要得到正確的bcd數(shù),每做一次加法運(yùn)算就要進(jìn)行一次數(shù),每做一次加法運(yùn)算就要進(jìn)行一次bcd碼調(diào)整。碼調(diào)整?!纠?】設(shè)有兩個(gè)雙字節(jié)設(shè)有兩個(gè)雙字節(jié)bcd

12、碼,分別存放在碼,分別存放在51h、50h和和56h、55h單元中,要求編制程序,求這兩個(gè)單元中,要求編制程序,求這兩個(gè)bcd數(shù)數(shù)的和,并將和送到的和,并將和送到61h、60h單元中。(以上均為高位放單元中。(以上均為高位放高字節(jié),低位放低字節(jié))高字節(jié),低位放低字節(jié))程序如下:程序如下:org 2200hmov a, 50hadd a, 55h ;低字節(jié)相加低字節(jié)相加da a; 低字節(jié)低字節(jié)bcd碼調(diào)整碼調(diào)整mov 60h, a;存低字節(jié)存低字節(jié)mov a, 51haddc a, 56h;高字節(jié)相加高字節(jié)相加da a ;高字節(jié)高字節(jié)bcd碼調(diào)整碼調(diào)整mov 61h, a;存高字節(jié)存高字節(jié)end

13、 l 分支結(jié)構(gòu)也稱為分支結(jié)構(gòu)也稱為選擇結(jié)構(gòu)選擇結(jié)構(gòu),在程序中每個(gè)分支均為一,在程序中每個(gè)分支均為一個(gè)程序段。個(gè)程序段。l 為分支需要,程序設(shè)計(jì)時(shí)應(yīng)給程序段的起始地址賦予為分支需要,程序設(shè)計(jì)時(shí)應(yīng)給程序段的起始地址賦予一個(gè)地址標(biāo)號(hào),以供選擇分支使用。一個(gè)地址標(biāo)號(hào),以供選擇分支使用。l 分支結(jié)構(gòu)又可分為分支結(jié)構(gòu)又可分為單分支結(jié)構(gòu)單分支結(jié)構(gòu)和和多分支結(jié)構(gòu)多分支結(jié)構(gòu)。l 單分支程序結(jié)構(gòu)一般都單分支程序結(jié)構(gòu)一般都使用條件轉(zhuǎn)移使用條件轉(zhuǎn)移指令對(duì)程序的執(zhí)行結(jié)果進(jìn)行判斷指令對(duì)程序的執(zhí)行結(jié)果進(jìn)行判斷:若:若滿足條件則進(jìn)行程序轉(zhuǎn)移,否則程序滿足條件則進(jìn)行程序轉(zhuǎn)移,否則程序順序執(zhí)行,即通過條件判斷實(shí)現(xiàn)二選順序執(zhí)行,即

14、通過條件判斷實(shí)現(xiàn)二選一。一。l 在在mcs-51指令系統(tǒng)中,可實(shí)現(xiàn)單分指令系統(tǒng)中,可實(shí)現(xiàn)單分支程序轉(zhuǎn)移的指令有支程序轉(zhuǎn)移的指令有jz、jnz、cjne、djnz,以位狀態(tài)作為條件進(jìn),以位狀態(tài)作為條件進(jìn)行程序分支的指令有行程序分支的指令有jc、jnc、jb、jnb、jbc等。使用這些條件轉(zhuǎn)移指等。使用這些條件轉(zhuǎn)移指令可完成為令可完成為“0”、為、為“1”、為正、為正、為負(fù)以及相等、不相等等各種條件判為負(fù)以及相等、不相等等各種條件判斷。斷。條件滿足嗎?條件滿足嗎?程序段程序段anyl 多分支程序結(jié)構(gòu)流程中具有兩個(gè)以上條件可供選擇。多分支程序結(jié)構(gòu)流程中具有兩個(gè)以上條件可供選擇。程序設(shè)程序設(shè)計(jì)時(shí)常把分

15、支程序按序號(hào)排列,且一般從計(jì)時(shí)常把分支程序按序號(hào)排列,且一般從0開始。開始。l 在在mcs-51指令系統(tǒng)中沒有專門的多分支轉(zhuǎn)移指令,指令系統(tǒng)中沒有專門的多分支轉(zhuǎn)移指令,可供使可供使用的是變址尋址轉(zhuǎn)移指令用的是變址尋址轉(zhuǎn)移指令“jmp a+dptr”,但使用該,但使用該指令實(shí)現(xiàn)多分支轉(zhuǎn)移時(shí),需要有數(shù)據(jù)表格配合。指令實(shí)現(xiàn)多分支轉(zhuǎn)移時(shí),需要有數(shù)據(jù)表格配合。 x, y均為均為8位二進(jìn)制數(shù)位二進(jìn)制數(shù), 設(shè)設(shè) x存入存入r0, y存入存入r1, 求解求解: 011y808080 xxxy開始y=-1x=80?結(jié)束nx80?y=0y=+1nystart: cjne r0, 50h, sul1 ;r0中的數(shù)與

16、00比較不等轉(zhuǎn)移 mov r1, 00h ; 相等, r1 0 sjmp sul2 sul1: jc neg ; 兩數(shù)不等, 若(r0)0, 則 r101h sjmp sul2 neg: mov r1, 0ffh ; (r0)0, 則 r10ffh sul2: ret 21 循環(huán)結(jié)構(gòu)是為了重復(fù)執(zhí)行某個(gè)程序段。循環(huán)結(jié)構(gòu)是為了重復(fù)執(zhí)行某個(gè)程序段。 mcs-51單片機(jī)的匯編語(yǔ)言中沒有專用的循環(huán)指令,但可以單片機(jī)的匯編語(yǔ)言中沒有專用的循環(huán)指令,但可以使用條件轉(zhuǎn)移指令通過條件判斷來(lái)實(shí)現(xiàn)和控制循環(huán)。使用條件轉(zhuǎn)移指令通過條件判斷來(lái)實(shí)現(xiàn)和控制循環(huán)。 循環(huán)程序一般由循環(huán)程序一般由 3 部分組成部分組成: 初始化

17、部分初始化部分:用來(lái)設(shè)置循環(huán)初值,為后面各部分做準(zhǔn)備工作。包:用來(lái)設(shè)置循環(huán)初值,為后面各部分做準(zhǔn)備工作。包括循環(huán)變量初值、地址寄存器初值及一些內(nèi)存單元的初值等。括循環(huán)變量初值、地址寄存器初值及一些內(nèi)存單元的初值等。循環(huán)體:循環(huán)體:即循環(huán)執(zhí)行部分。這是循環(huán)程序的主體,實(shí)現(xiàn)循環(huán)所完即循環(huán)執(zhí)行部分。這是循環(huán)程序的主體,實(shí)現(xiàn)循環(huán)所完成的具體功能。成的具體功能。 循環(huán)控制部分循環(huán)控制部分:用于控制循環(huán)程序的繼續(xù)循環(huán)或結(jié)束。每執(zhí)行:用于控制循環(huán)程序的繼續(xù)循環(huán)或結(jié)束。每執(zhí)行1次次循環(huán),修改循環(huán),修改1次循環(huán)變量,然后判斷循環(huán)控制條件,根據(jù)條件是否次循環(huán)變量,然后判斷循環(huán)控制條件,根據(jù)條件是否滿足控制循環(huán)程序是繼續(xù)循環(huán)還是結(jié)束。滿足控制循環(huán)程序是繼續(xù)循環(huán)還是結(jié)束。22movr0,#data;data數(shù)據(jù)區(qū)起始地址數(shù)據(jù)區(qū)起始地址movdptr , #buffer ;buffer數(shù)據(jù)區(qū)起始地址數(shù)據(jù)區(qū)起始地址movr1,#20h;數(shù)據(jù)串最大長(zhǎng)度數(shù)據(jù)串最大長(zhǎng)度loop: clrcmova,r0;取取data數(shù)據(jù)區(qū)中的數(shù)據(jù)數(shù)據(jù)區(qū)中的數(shù)據(jù)subba,#24h;判斷是否為判斷是否為“$”字符字符jzloo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論