S08-03-Freescale-HCS08匯編指令及程序設(shè)計(jì)_第1頁(yè)
S08-03-Freescale-HCS08匯編指令及程序設(shè)計(jì)_第2頁(yè)
S08-03-Freescale-HCS08匯編指令及程序設(shè)計(jì)_第3頁(yè)
S08-03-Freescale-HCS08匯編指令及程序設(shè)計(jì)_第4頁(yè)
S08-03-Freescale-HCS08匯編指令及程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩29頁(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)介

Freescale

單片機(jī)原理及應(yīng)用FreescaleHCS08匯編指令及程序設(shè)計(jì)Slide1Slide1FreescaleHCS08匯編指令及程序設(shè)計(jì)ContentsandObjectives:理解匯編指令格式、機(jī)器碼、操作周期含義理解匯編指令16種尋址方式的實(shí)質(zhì)掌握常用匯編指令的功能和用法學(xué)會(huì)幾種常用程序設(shè)計(jì)方法學(xué)會(huì)實(shí)驗(yàn)開(kāi)發(fā)板的用法MCU通過(guò)執(zhí)行程序完成人們指定的任務(wù),程序由一條一條指令構(gòu)成,能為CPU識(shí)別并執(zhí)行的指令的集合就是該MCU的指令系統(tǒng);不同類型MCU的指令系統(tǒng)通常不一樣,但是都很類似;匯編指令:用符號(hào)、指令操作符等編寫(xiě)的語(yǔ)言稱為匯編語(yǔ)言符號(hào)約定數(shù)制表示Slide22.1匯編指令格式符號(hào)約定

數(shù)制表示規(guī)定在數(shù)字前面加前綴#表示立即數(shù),例如:LDA #%01011010 ;將二進(jìn)制數(shù)%01011010送累加器ALDA #$10 ;將十六進(jìn)制數(shù)$10送到累加器A注意指令中的數(shù)值前有、無(wú)#前綴的區(qū)別:LDA %01011010 ;將地址為%01011010的單元中的內(nèi)容送ALDA $10 ;將地址為$10的單元中的內(nèi)容送累加器A括號(hào)‘’或“”表示單個(gè)ASCII碼字符或字符串,例如:String FCB “MC9S08AW60”用符號(hào)*或$作為操作數(shù)時(shí)表示當(dāng)前存儲(chǔ)器地址,例如﹕

BRA * ;跳轉(zhuǎn)到本身,亦即程序在原地“踏步”。BRA $ ;跳轉(zhuǎn)到本身,亦即程序在原地“踏步”。符號(hào)*處于匯編語(yǔ)句中的第一列時(shí)表示該行為注釋語(yǔ)句。Slide32.1匯編指令格式匯編語(yǔ)句格式 HCS08的匯編源程序由一行行匯編語(yǔ)句組成,每行匯編語(yǔ)句的格式為: 標(biāo)號(hào)操作碼操作數(shù)注釋 標(biāo)號(hào)必需從一行的第一列開(kāi)始書(shū)寫(xiě),在一句匯編語(yǔ)句中,標(biāo)號(hào)并不是必需的,匯編程序中的絕大多數(shù)語(yǔ)句都沒(méi)有標(biāo)號(hào),通常只在子函數(shù)或轉(zhuǎn)移目的語(yǔ)句處使用標(biāo)號(hào)。注意,標(biāo)號(hào)區(qū)分大、小寫(xiě)字母,AGN和Agn表示不同標(biāo)號(hào)。 操作碼位于標(biāo)號(hào)局部之后,用至少一個(gè)空格或Tab符隔開(kāi)。操作碼可以是偽指令,也可以是指令助記符。對(duì)于沒(méi)有標(biāo)號(hào)的語(yǔ)句,不能從第一列開(kāi)始寫(xiě)操作碼,否那么匯編程序會(huì)將指令碼認(rèn)作標(biāo)號(hào)而編譯出錯(cuò),應(yīng)該至少退后一個(gè)空格或Tab符后再書(shū)寫(xiě)操作碼。 操作數(shù)跟在操作碼后,也需用至少一個(gè)空格或Tab符隔開(kāi)。操作數(shù)可以是地址、標(biāo)號(hào)、表達(dá)式或數(shù)值。對(duì)于隱含尋址方式的指令語(yǔ)句,那么沒(méi)有操作數(shù)。多個(gè)操作數(shù)之間那么用逗號(hào)“,”隔開(kāi)。如: INCA ;操作數(shù)隱含 LDA #0FFH ;操作數(shù)為數(shù)值 LDA $40 ;操作數(shù)為地址 LDA Labe1 ;操作數(shù)為標(biāo)號(hào) LDA Labe1+4 ;操作數(shù)為表達(dá)式

Slide42.1匯編指令格式匯編語(yǔ)句格式 HCS08的匯編源程序由一行行匯編語(yǔ)句組成,每行匯編語(yǔ)句的格式為: 標(biāo)號(hào)操作碼操作數(shù)注釋 操作數(shù)跟在操作碼后,也需用至少一個(gè)空格或Tab符隔開(kāi)。操作數(shù)可以是地址、標(biāo)號(hào)、表達(dá)式或數(shù)值。對(duì)于隱含尋址方式的指令語(yǔ)句,那么沒(méi)有操作數(shù)。多個(gè)操作數(shù)之間那么用逗號(hào)“,”隔開(kāi)。如: INCA ;操作數(shù)隱含 LDA #0FFH ;操作數(shù)為數(shù)值 LDA $40 ;操作數(shù)為地址 LDA Labe1 ;操作數(shù)為標(biāo)號(hào) LDA Labe1+4 ;操作數(shù)為表達(dá)式 為便于理解程序,可以在程序中添加注釋。在一行語(yǔ)句中,分號(hào)“;”后面的內(nèi)容為注釋。注釋局部經(jīng)匯編后不會(huì)生成任何機(jī)器指令碼。假設(shè)“*”在一行語(yǔ)句的第一列,那么表示該行為注釋。 注意:匯編指令中的冒號(hào)〔:〕、逗號(hào)〔,〕、分號(hào)〔;〕、星號(hào)〔*〕等標(biāo)點(diǎn)符號(hào)要在英文狀態(tài)下輸入才合法,如果在中文狀態(tài)下輸入,編譯器會(huì)認(rèn)作非法字符,在編寫(xiě)匯編代碼時(shí)應(yīng)該注意把輸入法的狀態(tài)切換到英文輸入狀態(tài)。Slide52.1匯編指令格式HCS08的CPU能夠直接識(shí)別和執(zhí)行的是機(jī)器語(yǔ)言,每一條匯編指令都有唯一的16進(jìn)制編碼——機(jī)器碼與之對(duì)應(yīng),最終寫(xiě)入MCU的程序FLASH空間〔1860h~ffffh〕的都是機(jī)器碼

S08指令機(jī)器碼和執(zhí)行周期S08的指令機(jī)器碼通常由兩局部組成,前一局部為操作碼,表示指令功能,后一局部為操作數(shù),表示操作對(duì)象。不同指令不僅占用程序FLSAH的空間大小有別〔機(jī)器碼1~3字節(jié)〕,而且不同指令執(zhí)行的速度快慢也不一樣。指令執(zhí)行的快慢用指令所占用的機(jī)器周期〔總線周期〕來(lái)衡量,執(zhí)行完一條S08的指令通常需要1~4個(gè)機(jī)器周期〔總線周期〕,根據(jù)不同指令而異。Slide62.2指令的機(jī)器碼和操作周期S08指令機(jī)器碼和執(zhí)行周期S08的指令機(jī)器碼通常由兩局部組成,前一局部為操作碼,表示指令功能,后一局部為操作數(shù),表示操作對(duì)象。

不同指令不僅占用程序FLSAH的空間大小有別〔機(jī)器碼1~3字節(jié)〕,而且不同指令執(zhí)行的速度快慢也不一樣。指令執(zhí)行的快慢用指令所占用的機(jī)器周期〔總線周期〕來(lái)衡量,執(zhí)行完一條S08的指令通常需要1~4個(gè)機(jī)器周期〔總線周期〕,根據(jù)不同指令而異。如:LDA #$10 ;機(jī)器碼A610h,2個(gè)總線周期如上述指令為2字節(jié),說(shuō)明它要占用2B的程序FLASH空間(1860h~0ffffh)假設(shè)總線時(shí)鐘=4Mhz,那么上述指令需要0.5us時(shí)間才能執(zhí)行完。作業(yè):P73第2題;白紙作業(yè);下周2交Slide72.2指令的機(jī)器碼和操作周期指令到機(jī)器碼由匯編軟件完成,但要學(xué)會(huì)查附表ASlide82.3S08完整匯編程序框架完整匯編框架Slide92.4匯編指令尋址方式HCS08系統(tǒng)中有多種數(shù)據(jù)存放空間形式:CPU存放器、I/O控制和狀態(tài)存放器、用戶RAM、Flash區(qū)等。其中,除CPU存放器外,其它空間都采用了統(tǒng)一編址方式,結(jié)合HCS08的16種不同尋址方式,可以快速、方便、高效地訪問(wèn)這些存儲(chǔ)空間。Slide102.4匯編指令尋址方式通常將CPU獲取操作碼和操作數(shù)的各種方法稱之為尋址方式。在HCS08系統(tǒng)中,所有的存儲(chǔ)器、狀態(tài)和控制存放器以及I/O端口共享同一個(gè)64Kbyte的線性地址空間,這樣一來(lái)利用一個(gè)16位的地址就可以唯一確定存儲(chǔ)器空間中的任何一個(gè)單元,這意味著使用同一條指令不僅可以訪問(wèn)Ram空間變量,也能訪問(wèn)I/O和控制存放器,還能訪問(wèn)非易失性編程空間。

Slide112.4匯編指令尋址方式隱含尋址方式〔INH—Inherentaddressingmode〕操作數(shù)由指令隱含,執(zhí)行指令的所有信息均在操作碼中,CPU不需要從存放器、存儲(chǔ)器中取操作數(shù),操作數(shù)隱含在累加器、變址存放器或狀態(tài)標(biāo)志存放器中。具有隱含尋址方式的指令多為單字節(jié)指令,匯編后生成的操作碼在程序存儲(chǔ)區(qū)只占用一個(gè)字節(jié)的空間。例如: INCA ;累加器A中的內(nèi)容加1,指令機(jī)器碼為$4C INCX ;變址存放器X中的內(nèi)容加1,指令機(jī)器碼為$5C DECA ;累加器A中的內(nèi)容減1,指令機(jī)器碼為$4A SEI ;中斷屏蔽位I置1,指令機(jī)器碼為$9B CLI ;中斷屏蔽位I清0,指令機(jī)器碼為$9A RTS ;子程序返回,指令機(jī)器碼為$81 RTI ;中斷返回,指令機(jī)器碼為$80 TAX ;將累加器A中的值賦給變址存放器X,指令機(jī)器碼為$97 TXA ;將變址存放器X中的值賦給累加器A,指令機(jī)器碼為$9F08指令系統(tǒng)中的尋址方式是針對(duì)整條指令而言,而不像8088系統(tǒng)那樣分別針對(duì)源操作數(shù)、目的操作數(shù)。Slide122.4匯編指令尋址方式立即數(shù)尋址方式〔IMM—Immediateaddressingmode〕 操作數(shù)包含在操作碼的后繼字節(jié)中。具有立即尋址方式的指令主要用于訪問(wèn)常數(shù),多為二字節(jié)指令,第一個(gè)字節(jié)為操作碼,后面字節(jié)為立即數(shù),立即數(shù)前面的符號(hào)前綴#說(shuō)明操作碼后面的是操作數(shù)值而不是操作數(shù)地址。例如: LDA #%01011010 ;將%01011010送到A中,指令操作碼為$A65A ADC #$30 ;將A中的內(nèi)容與立即數(shù)$30進(jìn)行帶進(jìn)位加運(yùn)算, ;和存至累加器A,機(jī)器指令碼為$A930。 AND #$FF ;將累加器A中的內(nèi)容與立即數(shù)$FF進(jìn)行邏輯與運(yùn) ;算,結(jié)果存至累加器A,機(jī)器指令碼為$A4FF LDHX #$2030 ;三字節(jié)指令,給變址存放器H:X賦值$2030,指 ;令操作碼為$452030Slide132.4匯編指令尋址方式直接尋址方式〔DIR—Directaddressingmode〕操作數(shù)的有效地址包含于操作碼后的一個(gè)字節(jié)中。由于操作數(shù)的有效地址僅為一個(gè)字節(jié),因此直接尋址方式只能對(duì)存儲(chǔ)器0頁(yè)的256字節(jié)空間〔$0000~$00FF〕進(jìn)行操作。0頁(yè)存儲(chǔ)區(qū)含有I/O控制和狀態(tài)存放器,還有局部用戶數(shù)據(jù)RAM區(qū)。一般將經(jīng)常要訪問(wèn)的數(shù)據(jù)放在0頁(yè)的用戶數(shù)據(jù)RAM中,以節(jié)省程序空間,提高數(shù)據(jù)訪問(wèn)速度。具有直接尋址方式的指令為2字節(jié)指令,指令的第一個(gè)字節(jié)是操作碼,第二個(gè)字節(jié)是操作數(shù)的有效地址。例如: LDA$00 ;將$0000單元〔即端口A的數(shù)據(jù)存放器〕中的內(nèi)容送入 ;累加器A中,機(jī)器指令碼為$B600。 STA$40 ;將累加器A中的值送入$0040單元中,機(jī)器碼為$B740 ADC$50 ;將累加器A中的內(nèi)容與存儲(chǔ)單元$0050中的內(nèi)容進(jìn)行帶進(jìn) ;位加運(yùn)算,和存至累加器A,機(jī)器指令碼為$B950。 ASL$60 ;將存儲(chǔ)單元$0060中的值算術(shù)左移一位,機(jī)器碼為$3860Slide142.4匯編指令尋址方式擴(kuò)展尋址方式〔EXT—Extendedaddressingmode〕 操作數(shù)的有效地址包含于操作碼后的兩個(gè)字節(jié)中。由于操作數(shù)的有效地址為兩個(gè)字節(jié),因此,采用擴(kuò)展尋址方式的指令可以訪問(wèn)64KB內(nèi)的任何存儲(chǔ)器空間。具有擴(kuò)展尋址方式的指令為一般為三字節(jié)指令,指令的第一個(gè)字節(jié)是操作碼,第二、三字節(jié)是操作數(shù)的有效地址。例如: LDA$0200;將$0200單元中的內(nèi)容送入A中,機(jī)器碼為$C60200 STA$0240;將A中的值送入$0040單元中,機(jī)器碼為$C70240ADC$0250;將A的內(nèi)容與存儲(chǔ)單元$0050中的內(nèi)容進(jìn)行帶進(jìn)位加 ;運(yùn)算,和存至累加器A,機(jī)器為$C90250。對(duì)于既有直接尋址方式又有擴(kuò)展尋址方式的指令,如ADC、ADD、AND等,它們?cè)趯ぶ返?頁(yè)存儲(chǔ)空間的存儲(chǔ)單元時(shí),是采用直接尋址還是擴(kuò)展尋址方式由編譯軟件自動(dòng)優(yōu)化,通常是按照直接尋址方式尋址,因?yàn)榇藭r(shí)采用直接尋址方式的指令執(zhí)行速度更快、所占用程序空間更小。Slide152.4匯編指令尋址方式變址尋址方式 操作數(shù)的有效地址由16位變址存放器H:X中的內(nèi)容和跟在操作碼后的無(wú)符號(hào)偏移量決定。根據(jù)偏移量的多少,變址尋址又分為無(wú)偏移量變址、8位偏移量變址、16位偏移量變址三種尋址方式:無(wú)偏移量變址尋址(IX—Indexed,nooffsetaddressingmode)操作數(shù)的有效地址在16位變址存放器H:X中。由于H:X為16位,故可訪問(wèn)存儲(chǔ)器中的所有64K字節(jié)空間〔$0000~$FFFF〕。具有無(wú)偏移量變址尋址的指令為單字節(jié)指令,例如: LDA,X;將以H:X中的值為地址的存儲(chǔ)單元中的內(nèi)容送至A中, ;指令機(jī)器碼為$F6。 STA,X;將A中的值送至以H:X中的值為地址的存儲(chǔ)單元中,指 ;令機(jī)器碼為$F7。 ADD,X;將(H:X)+A之和送至A中,機(jī)器碼為$FB。 INC,X;將以H:X中的值為地址的存儲(chǔ)單元內(nèi)容加1,$7C。Slide162.4匯編指令尋址方式變址尋址方式 操作數(shù)的有效地址由16位變址存放器H:X中的內(nèi)容和跟在操作碼后的無(wú)符號(hào)偏移量決定。根據(jù)偏移量的多少,變址尋址又分為無(wú)偏移量變址、8位偏移量變址、16位偏移量變址三種尋址方式:8位偏移量變址尋址(IX1—Indexed,8-bitoffsetaddressingmode)操作數(shù)的有效地址是16位變址存放器H:X中的無(wú)符號(hào)整數(shù)與操作碼后的一個(gè)字節(jié)無(wú)符號(hào)整數(shù)之和,這類指令同樣可訪問(wèn)存儲(chǔ)器中$0000~$FFFF范圍的任一字節(jié)單元。具有8位偏移量變址尋址的指令為2字節(jié)指令,一字節(jié)為操作碼,另一字節(jié)為操作數(shù),例如: LDA$10,X;將用H:X中的值加上$10所得的值為地址的存儲(chǔ)單 ;元中的內(nèi)容送至A中,指令機(jī)器碼為$E610。 INC$30,X;將用H:X中的值加上$30所得的值為地址的存儲(chǔ) ;單元中的內(nèi)容加1,指令機(jī)器碼為$6C30。Slide172.4匯編指令尋址方式變址尋址方式 操作數(shù)的有效地址由16位變址存放器H:X中的內(nèi)容和跟在操作碼后的無(wú)符號(hào)偏移量決定。根據(jù)偏移量的多少,變址尋址又分為無(wú)偏移量變址、8位偏移量變址、16位偏移量變址三種尋址方式:16位偏移量變址尋址〔IX2—Indexed,16-bitoffsetaddressingmode〕操作數(shù)的有效地址是16位變址存放器H:X中的無(wú)符號(hào)整數(shù)與操作碼后的兩字節(jié)無(wú)符號(hào)整數(shù)之和,這類指令同樣可訪問(wèn)64KB存儲(chǔ)器中的任一單元。具有16位偏移量變址尋址的指令為3字節(jié)指令,一字節(jié)為操作碼,兩字節(jié)為操作數(shù),例如: LDA$0110,X ;將用H:X中的值加上$0110所得的值為地址的 ;存儲(chǔ)單元的內(nèi)容存儲(chǔ)至累加器A中,機(jī)器指 ;令碼為$D60110。 AND$1030,X ;將用H:X中的值加上$1030所得的值為地址的 ;存儲(chǔ)單元中的內(nèi)容與累加器A中的值進(jìn)行邏 ;輯與運(yùn)算,結(jié)果存至A中,$D40130。Slide182.4匯編指令尋址方式變址尋址方式 操作數(shù)的有效地址由16位變址存放器H:X中的內(nèi)容和跟在操作碼后的無(wú)符號(hào)偏移量決定。根據(jù)偏移量的多少,變址尋址又分為無(wú)偏移量變址、8位偏移量變址、16位偏移量變址三種尋址方式:無(wú)偏移量變址〔IX—Indexed,nooffsetaddressingmode〕8位偏移量變址〔IX1—Indexed,8-bitoffsetaddressingmode〕16位偏移量變址〔IX2—Indexed,16-bitoffsetaddressingmode〕三種變址尋址方式雖然都可訪問(wèn)存儲(chǔ)器中的任一單元,但是其對(duì)應(yīng)的指令執(zhí)行的快慢和匯編后生成的代碼長(zhǎng)短是不相同的,無(wú)偏移量變址尋址的指令執(zhí)行最快,代碼最短,16位偏移量變址尋址的指令執(zhí)行最慢,代碼最長(zhǎng)。在所有變址尋址指令中,雖然出現(xiàn)的是X而不是H:X,但要注意變址尋址方式都是以16位存放器H:X中的值與相應(yīng)的偏移量相加構(gòu)成操作數(shù)的有效地址,而不是以X中的值與相應(yīng)的偏移量相加構(gòu)成操作數(shù)的有效地址。另外在變址尋址指令中的無(wú)符號(hào)整數(shù)前并沒(méi)有#前綴,但代表的是一偏移量數(shù)值,而不是地址,要注意與直接尋址和擴(kuò)展尋址中無(wú)#前綴的數(shù)值代表地址區(qū)分開(kāi)來(lái)。Slide192.4匯編指令尋址方式相對(duì)尋址方式〔REL—Relativeaddressingmode〕 只用于相對(duì)轉(zhuǎn)移指令。在這種尋址方式中,CPU首先測(cè)試給定的條件,如果滿足條件,那么發(fā)生相對(duì)轉(zhuǎn)移,即把當(dāng)前程序計(jì)數(shù)器PC的值加上指令碼所占字節(jié)數(shù),再加上指令操作碼后的8位有符號(hào)數(shù),使程序轉(zhuǎn)移到PC指定的新地址處,否那么CPU執(zhí)行該條指令的下一條指令。 PC值=當(dāng)前PC值+本指令所占2字節(jié)+8位帶符號(hào)偏移量 具有相對(duì)尋址方式的指令為2字節(jié)指令,一字節(jié)為操作碼,一字節(jié)為相對(duì)偏移量,轉(zhuǎn)移范圍為相對(duì)于存放機(jī)器指令碼地址的-126到+129。 用戶在編寫(xiě)匯編語(yǔ)言程序時(shí),用一個(gè)地址標(biāo)號(hào)代替偏移量,用戶不必自己去計(jì)算相對(duì)偏移量,匯編程序會(huì)在匯編用戶程序時(shí)自動(dòng)計(jì)算出偏移量〔8位補(bǔ)碼表示〕,并進(jìn)行檢查,以確定是否超出了有效轉(zhuǎn)移范圍。例如:Slide202.4匯編指令尋址方式相對(duì)尋址方式〔REL—Relativeaddressingmode〕 …… $9000 BCCPro1 ;進(jìn)位標(biāo)志為0那么轉(zhuǎn)移到Pro1標(biāo)號(hào)處執(zhí) ;行,否那么順序;執(zhí)行下一條語(yǔ)句,機(jī) ;器指令碼為$24rr,rr為相對(duì)偏移量, ;匯編程序會(huì)自動(dòng)計(jì)算。 …… $9012 Pro1:INCA ; …… 相對(duì)尋址方式指令的機(jī)器碼中rr為一字節(jié)相對(duì)偏移量(8位補(bǔ)碼表示),轉(zhuǎn)移范圍為相對(duì)于存放機(jī)器指令碼地址的-126到+129。此處,rr=10h〔9012h=9000h+2+rel〕[思考]為什么是-126到+129?8位補(bǔ)碼:-128到+127&&本身為2B指令Slide212.4匯編指令尋址方式堆棧尋址方式 操作數(shù)的有效地址由16位堆棧指針SP中的內(nèi)容和跟在操作碼后的有符號(hào)偏移量決定。根據(jù)偏移量的多少,堆棧尋址又分為8位偏移量堆棧尋址和16位偏移量堆棧尋址兩種尋址方式。都可以訪問(wèn)存儲(chǔ)器中$0000~$FFFF范圍的任一字節(jié)單元。8位偏移量堆棧尋址〔SP1〕 LDA$10,SP ;將用SP中的值加上$10所得的和為地址的 ;存儲(chǔ)單元中的值送至累加器A中,指令機(jī)器 ;碼為$9EE610。16位偏移量堆棧尋址〔SP2〕 LDA$0110,SP;將用SP中的值加上$0110所得的和為地址 ;的存儲(chǔ)單元中的值送至累加器A中,指令機(jī) ;器碼為$9ED60110Slide222.4匯編指令尋址方式存儲(chǔ)器到存儲(chǔ)器的尋址方式:指令格式為:MOV 源地址,目的地址立即數(shù)尋址到直接尋址方式〔IMM/DIR〕 MOV#$FF,PTAD ;初始化端口A數(shù)據(jù)存放器PTAD(地址 ;為$00)為$FF,機(jī)器指令碼為$6EFF00。 MOV#$FF,$00 ;等同于上面一條語(yǔ)句直接尋址到直接尋址方式〔DIR/DIR〕MOVPTBD,PTAD ;將端口B數(shù)據(jù)存放器〔$01地址〕中的 ;值送至端口A數(shù)據(jù)存放器〔$00地址〕, ;機(jī)器指令碼為$4E0100。MOV$70,PTBD ;將地址為$70存儲(chǔ)單元中的內(nèi)容送至端 ;口B數(shù)據(jù)存放器〔$01地址〕中,指令操 ;作碼為$4E7001。實(shí)現(xiàn)儲(chǔ)器到存儲(chǔ)器之間的直接數(shù)據(jù)傳送同8086正好相反Slide232.4匯編指令尋址方式存儲(chǔ)器到存儲(chǔ)器的尋址方式:指令格式為:MOV 源地址,目的地址自動(dòng)變址尋址到直接尋址方式〔IX+/DIR〕 LDA #$00 STA $0140 ;初始化$0140存儲(chǔ)單元內(nèi)容為$00 LDA #$01 STA $0141 ;初始化$0141存儲(chǔ)單元內(nèi)容為$01 LDHX #$0140 ;初始化H:X內(nèi)容為$0140 MOV X+,$40;將存放器H:X中內(nèi)容$0140所指的存儲(chǔ) ;單元中的值$00送至$40存儲(chǔ)單元,同時(shí) ;H:X中的值自加1,變?yōu)?0141,指令 ;操作碼為$7E40。 MOV X+,$41;$41存儲(chǔ)單元被賦值為$01,H:X=$0142, ;機(jī)器指令碼為$7E41。Slide242.4匯編指令尋址方式存儲(chǔ)器到存儲(chǔ)器的尋址方式:指令格式為:MOV 源地址,目的地址

直接尋址到自動(dòng)變址尋址方式〔DIX+〕

MOV #$00,$40 ;初始化$40存儲(chǔ)單元內(nèi)容為$00 MOV #$01,$41 ;初始化$41存儲(chǔ)單元內(nèi)容為$01 LDHX #$0140 ;初始化H:X內(nèi)容為$0140 MOV $40,X+ ;將$40單元的內(nèi)容$00送至H:X中內(nèi) ;容$0140所指的存儲(chǔ)單元中,同時(shí)H:X ;中的值自加1,變?yōu)?0141, ;機(jī)器指令碼為$5E40。 MOV $41,X+ ;$0141存儲(chǔ)單元被賦值為$01, ;H:X=$0142,機(jī)器指令碼為$5E41。Slide252.4匯編指令尋址方式存儲(chǔ)器到存儲(chǔ)器的尋址方式:指令格式為:MOV 源地址,目的地址立即數(shù)尋址到直接尋址方式〔IMM/DIR〕直接尋址到直接尋址方式〔DIR/DIR〕自動(dòng)變址尋址到直接尋址方式〔IX+/DIR〕直接尋址到自動(dòng)變址尋址方式〔DIX+〕 注意:由于存儲(chǔ)器到存儲(chǔ)器尋址方式中,只有用H:X中的內(nèi)容作為源存儲(chǔ)器地址或目的存儲(chǔ)器地址時(shí)才是16位地址,而其余地址都是8位地址,因此MOV指令并不能實(shí)現(xiàn)任一存儲(chǔ)器地址到任一存儲(chǔ)器地址的直接數(shù)據(jù)傳送,而有一定的限制:立即尋址到直接尋址和直接尋址到直接尋址只能實(shí)現(xiàn)零存儲(chǔ)頁(yè)內(nèi)〔00h——FFh〕的直接傳送,自動(dòng)變址尋址到直接尋址只能實(shí)現(xiàn)任一地址到零存儲(chǔ)頁(yè)內(nèi)的直接傳送,直接尋址到自動(dòng)變址尋址只能實(shí)現(xiàn)零存儲(chǔ)頁(yè)到任一地址的直接傳送。Slide262.4匯編指令尋址方式無(wú)偏移量變址后加1尋址方式〔IX+〕 僅CBEQ X+,rel這一條指令采用無(wú)偏移量變址后加1尋址方式 〔IX+—Indexed,nooffset,postincrementaddressingmode〕。 CBEQ X+,Pro1 ;假設(shè)H:X中的值所指向的存儲(chǔ)單元的內(nèi) ;容和A中的值相等,那么轉(zhuǎn)移到標(biāo)號(hào) ;Pro1處執(zhí)行,否那么順序執(zhí)行下一條 ;語(yǔ)句,最后再將H:X中的值自動(dòng)加 ;1,機(jī)器指令碼為$71rr,rr為相對(duì) ;偏移量,具體數(shù)值由匯編程序計(jì)算。 本指令為2B指令,又由于指令碼中的相對(duì)轉(zhuǎn)移量只為一個(gè)字節(jié),所以這條指令轉(zhuǎn)移范圍為相對(duì)于存放機(jī)器指令碼地址的-126到+129字節(jié)。Slide272.4匯編指令尋址方式8位偏移量變址后加1〔IX1+〕 僅轉(zhuǎn)移指令CBEQopr,X+,rel采用8位偏移量變址后加1尋址方式(IX1+—Indexed,8-bitoffset,postincrementaddressingmode)。 CBEQ$10,X+,Pro1 ;假設(shè)H:X中的值和8位偏移量$10相加所 ;得的和所指向的存儲(chǔ)單元的內(nèi)容和A ;中的值相等,那么轉(zhuǎn)移到標(biāo)號(hào)Pro1處執(zhí) ;行,否那么順序執(zhí)行下一條語(yǔ)句;最后 ;再將H:X中的值自動(dòng)加1,指令操碼 ;為:$6110rr,rr為相對(duì)偏移量。 本指令為3B指令,又由于指令碼中的相對(duì)轉(zhuǎn)移量只為一個(gè)字節(jié),所以這條指令轉(zhuǎn)移范圍為相對(duì)于存放機(jī)器指令碼地址的-125到+130字節(jié)。Slide282.5

溫馨提示

  • 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)論