版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1第三章第三章 尋址方式和匯編指令尋址方式和匯編指令3.1 匯編語言指令集概述3.2 尋址方式3.3 C28x匯編操作指令3.4 匯編程序23.1 匯編語言指令集概述匯編語言指令集概述在TMS320C2000系列中,CPU內(nèi)核為: C20 x/C24x/C240 x:C2xLP: C27x/C28x:C27x、C28x 這些CPU的硬件結(jié)構(gòu)有一定差別,指令集也不相同,但在C28x芯片中可以通過選擇兼容特性模式,使C28xCPU與C27xCPU及C2xLPCPU具有最佳兼容性。通過狀寄存器STl的位OBJMODE和位AMODE的組合來選定模式。3種操作模式: C28x模式:在該模式中,用戶可以使
2、用C28x的所有有效特性、尋址方式和指令系統(tǒng),因此,一般應(yīng)使C28x芯片工作于該種模式。 C27x目標(biāo)兼容模式:在復(fù)位時(shí),C28x的CPU處于C27x目標(biāo)兼容模式。在該模式下,目標(biāo)碼與C27xCPU完全兼容,且它的循環(huán)計(jì)數(shù)也與C27xCPU兼容。 C2xLP源兼容模式:該模式允許用戶運(yùn)行C2xLP的源代碼,這些源代碼是用C28x代碼生成工具編譯生成的。 31、常用操作數(shù)符號(hào)說明、常用操作數(shù)符號(hào)說明符號(hào)符號(hào)描述描述XARn32位輔助寄存器XAR0XAR7ARn,ARm32位輔助寄存器XAR0XAR7的低16位ARnH32位輔助寄存器XAR0XAR7的高16位ARPn32位輔助寄存器指針,ARP0
3、指向XAR0,ARP1指向XAR1AR(ARP)ARP指向的輔助寄存器的低16位XAR(ARP)ARP指向的輔助寄存器AX累加器的高16位寄存器AH或者16位寄存器AL#立即數(shù)助記符PM乘積移位方式(+4 ,1 ,0 ,-1,-2,-3,-4 ,-5 ,-6)PC22位程序計(jì)數(shù)器按位求反碼loc16Loc16尋址方式對應(yīng)的16位數(shù)據(jù)0:loc16將Loc16尋址方式對應(yīng)的16位數(shù)據(jù)進(jìn)行零擴(kuò)展S:loc16將Loc16尋址方式對應(yīng)的16位數(shù)據(jù)進(jìn)行符號(hào)擴(kuò)展loc32Loc32尋址方式對應(yīng)的32位數(shù)據(jù)0:loc32將Loc32尋址方式對應(yīng)的32位數(shù)據(jù)進(jìn)行零擴(kuò)展S:loc32將Loc32尋址方式對應(yīng)的
4、32位數(shù)據(jù)進(jìn)行符號(hào)擴(kuò)展7bit表示7位立即數(shù)0:7bit7位立即數(shù),零擴(kuò)展S:7bit7位立即數(shù),符號(hào)擴(kuò)展8bit表示8位立即數(shù)0:8bit8位立即數(shù),零擴(kuò)展4S:8bit8位立即數(shù),符號(hào)擴(kuò)展位立即數(shù),符號(hào)擴(kuò)展10bit表示10位立即數(shù)0:10bit10位立即數(shù),零擴(kuò)展S:10bit10位立即數(shù),符號(hào)擴(kuò)展16bit表示16位立即數(shù)0:16bit16位立即數(shù),零擴(kuò)展S:16bit16位立即數(shù),符號(hào)擴(kuò)展22bit表示22位立即數(shù)0:22bit22位立即數(shù),零擴(kuò)展S:22bit22位立即數(shù),符號(hào)擴(kuò)展LSb最低有效位LSB最低有效字節(jié)LSW最低有效字MSb最高有效位MSB最高有效字節(jié)MSW最高有效字O
5、BJ對于某條指令,位OBJMODE的狀態(tài)N重復(fù)次數(shù)(N=0,1,2,3,4,5,6)可選字段=賦值=等于續(xù):續(xù):5關(guān)于算術(shù)方面的助記符以及與其相關(guān)的標(biāo)志位關(guān)于算術(shù)方面的助記符以及與其相關(guān)的標(biāo)志位COND語法語法描述描述測試標(biāo)志位測試標(biāo)志位0000NEQ不等于Z=00001EQ等于Z-10010GT大于(有符號(hào)減法)Z=0且N=10011GEQ大于或等于(有符號(hào)減法)N=00100LT小于(有符號(hào)減法)N=10101LEQ小于或等于(有符號(hào)減法)Z=1或N=10110HI高于(無符號(hào)減法)C=1且Z=00111HIS,C高于或相同(無符號(hào)減法)C=11000LO,NC低于(無符號(hào)減法)C=010
6、01LOS低于或相同(無符號(hào)減法)C=1或Z=01010NOV無溢出V=01011OV溢出V=11100NTC測試位為0TC=01101TC測試位為1TC=11110NBIOBIO輸入等于零BIO=01111UNC無條件 6 PM與結(jié)果保存方式的關(guān)系與結(jié)果保存方式的關(guān)系PM保存方式保存方式+4P(31:4)=相乘結(jié)果中低38位的(27:0),P(3:0)+0+1P(31:1)=相乘結(jié)果中低38位的(30:0),P(31)+0 0P(31:0)=相乘結(jié)果中低38位的(31:0)-1P(31:0)=相乘結(jié)果中低38位的(32:1)-2P(31:0)=相乘結(jié)果中低38位的(33:2)-3P(31:0
7、)=相乘結(jié)果中低38位的(34:3)-4P(31:0)=相乘結(jié)果中低38位的(35:4)-5P(31:0)=相乘結(jié)果中低38位的(36:5)-6P(31:0)=相乘結(jié)果中低38位的(37:6)72、匯編語法指令描述、匯編語法指令描述 匯編指令一般都由操作符和操作數(shù)組成,操作符也被稱為指令助記符,它是指令中的關(guān)鍵字,表示本條指令操作類型,不能省略。操作數(shù)可以省略,也可以有很多,但各操作數(shù)之間要用“,”分開。指令助記符與操作數(shù)之間要用空格分開。ARn : n為數(shù)值07,ARn指定下次的輔助寄存器。ind : 選擇以下7種符號(hào)之一:*,*+,*-,*0+,*0-,*BR0+,*BR0-(兼容模式使用
8、)。 #:立即尋址方式中常用的前綴。數(shù)值前面帶“#”,表示該數(shù)值為一個(gè)立即數(shù) 右移。 : 當(dāng)使用C28x語法時(shí),64位字段數(shù)據(jù)與通過“”符號(hào)來表示,以幫助程序員理解當(dāng)前正在使用哪種尋址模式。 : 當(dāng)使用C28x語法時(shí),128位字段數(shù)據(jù)頁通過“”符號(hào)來表示。loc16:16位尋址方式指定地址單元的內(nèi)容。loc32:32位尋址方式指定地址單元的內(nèi)容。#16bitsigned:16位有符號(hào)立即數(shù)。83.2 尋址方式尋址方式u直接尋址方式直接尋址方式u堆棧尋址方式堆棧尋址方式u間接尋址方式間接尋址方式u寄存器尋址方式寄存器尋址方式u數(shù)據(jù)數(shù)據(jù)/程序程序/IO空間尋址方式空間尋址方式u程序空間間接尋址方式
9、程序空間間接尋址方式u字節(jié)尋址方式字節(jié)尋址方式 C28x系列DSP的指令集采用7種尋址方式:9 F2812的大多數(shù)指令利用操作碼中的位字段來選的大多數(shù)指令利用操作碼中的位字段來選擇尋址方式和對尋址方式進(jìn)行修改在擇尋址方式和對尋址方式進(jìn)行修改在F2812指令系統(tǒng)指令系統(tǒng)中,這個(gè)位字段用于以下尋址方式:中,這個(gè)位字段用于以下尋址方式: (1)loc16 為16位數(shù)據(jù)訪問選擇直接堆棧間接寄存器尋址方式 (2)loc32 為32位數(shù)據(jù)訪問選擇直接堆棧間接寄存器尋址方式 以上7種尋址方式都與“l(fā)oc16/loc32”組合起來使用10 尋址方式選擇位尋址方式選擇位 由于由于F2812 提供了多種尋址方式,
10、提供了多種尋址方式, 因此用尋址方式選擇因此用尋址方式選擇位(位(AMODE)來選擇位字段()來選擇位字段(loc16/loc32)的解碼。該)的解碼。該位屬于狀態(tài)寄存器位屬于狀態(tài)寄存器ST1。尋址方式可以大致歸類如下:。尋址方式可以大致歸類如下: AMODE該方式是復(fù)位后的默認(rèn)方式,也是F2812的C/C+編譯器使用的方式。這種方式與C2xLP CPU的尋址方式不完全兼容。數(shù)據(jù)頁指針偏移量是位(在C2xLP CPU中是位),并且不支持所有的間接尋址方式。 AMODE該方式包括的尋址方式完全與C2xLP 器件的尋址方式兼容。數(shù)據(jù)頁指針的偏移量是位并支持所有C2xLP 支持的間接尋址方式 在F2
11、812間接尋址方式中,使用哪個(gè)輔助寄存器指針在指令中并不被明確指出。而在C2xLP的間接尋址方式中,位長度的輔助寄存器指針被用來選擇當(dāng)前使用哪個(gè)輔助寄存器以及下次操作將使用哪個(gè)輔助寄存器11 匯編器匯編器/編譯器對編譯器對AMODE位的追蹤位的追蹤 編譯器總是假定編譯器總是假定AMODE=0,所以它只使用對,所以它只使用對AMODE=0有效的尋址模式。而匯編器可以通過設(shè)置命令行選項(xiàng)實(shí)現(xiàn)默認(rèn)有效的尋址模式。而匯編器可以通過設(shè)置命令行選項(xiàng)實(shí)現(xiàn)默認(rèn)AMODE=0或者或者AMODE=1 v28 ;假定AMODE=0(C28x尋址方式) v28 m20 ;假定AMODE=1(與C2xLP全兼容的尋址方式
12、) 在文件中使用內(nèi)嵌偽指令 . c28_amode ;告訴匯編器后面的代碼段都假定AMODE=0 (C28x尋址方式) . lp_amode ;告訴匯編器后面的代碼段都假定AMODE=1(與C2xLP全兼容的尋址方式)121、直接尋址方式直接尋址方式 DP(數(shù)據(jù)頁指針),此方式中,16位的DP寄存器被當(dāng)做一個(gè)固定的頁指針,將指令提供6位或7位的地址偏移量與DP寄存器中的值組合起來就構(gòu)成完整的地址。當(dāng)訪問具有固定地址的數(shù)據(jù)結(jié)構(gòu)時(shí),這種尋址方式特別有用,例如,外設(shè)寄存器和C/C+中的全局及靜態(tài)變量。直接尋址方式下loc16/loc32的語法說明:AMODE(ST1.8)偏移量偏移量每頁大小每頁大小
13、32位數(shù)據(jù)地址位數(shù)據(jù)地址尋址范圍尋址范圍06位數(shù)64字(3222)=0(216)=DP:150(50)=6位數(shù)數(shù)據(jù) 空 間 的 低4M字的范圍17位數(shù)128字(3222)=0(217)=DP:150(60=7)位數(shù)22位地址的構(gòu)成:0DP寄存器的值(寄存器的值(150或或151)來自指令中偏移量(來自指令中偏移量(6位或位或7位)位)31 21 0132、堆棧尋址方式堆棧尋址方式 SP(堆棧指針),這種方式下,16位的SP指針被用來訪問軟件堆棧的內(nèi)容。C28x系列的堆棧是從存儲(chǔ)器的低地址變化到高地址的,SP總是指向下一個(gè)空的存儲(chǔ)單元。指令提供6位的偏移量,該偏移量是從當(dāng)前的堆棧指針值中抽取出來
14、的,用以訪問堆棧中的數(shù)據(jù)。在數(shù)據(jù)入棧和出棧時(shí),該偏移量也可分別用于堆棧指針操作后的增加或操作前的減少。堆棧尋址方式下loc16/loc32的語法說明:AMODE(ST1.8)偏移量偏移量32位數(shù)據(jù)地址位數(shù)據(jù)地址尋址范圍尋址范圍0 *-SP6位(3216)=0(150)=SP-6位 數(shù) 據(jù) 空 間 的 低64K字的范圍X*SP+(3216)=0(150)=SP如果loc16,SP=SP+1如果loc132,SP=SP+2X*-SP(3216)=0(150)=SP如果loc16,SP=SP-1如果loc132,SP=SP-214例1、帶偏移量的堆棧尋址方式訪問堆棧區(qū)16/32數(shù)據(jù),當(dāng)AMODE=0
15、時(shí): ADD AL,*-SP5 ;將(SP-5)指向堆棧單元的16位內(nèi)容加到AL MOV *-SP8,AL ;將AL中的16位內(nèi)容存入(SP-8)指向的堆棧單元 ADDL ACC,*-SP12 ;將(SP-12)指向的堆棧單元的32位內(nèi)容加到ACC MOVL *-SP34,ACC ;將ACC中的32位內(nèi)容存入(SP-34)指向的堆棧單元 例2、利用堆棧尋址方式遞增訪問堆棧區(qū)16/32為數(shù)據(jù): MOV *SP+,AL ;將16位AL寄存器的值壓入棧頂,且SP=SP+1 MOVL *SP+,P ;將32位P寄存器的值壓入棧頂,且SPSP+2 例3、通過堆棧尋址方式遞減訪問堆棧區(qū)16/32數(shù)據(jù): A
16、DD AL,*-SP ;SP=SP-1,再把新SP指向的16位堆棧的內(nèi)容加到AL中 MOVL ACC,*-SP ;SP=SP-2,再把新的SP指向的32位堆棧內(nèi)容移到ACC中153、間接尋址方式間接尋址方式 XAR0XAR7(輔助寄存器指針),該方式下,32位的XARn寄存器被當(dāng)做一般的數(shù)據(jù)指針。通過相應(yīng)的指令可以實(shí)現(xiàn)操作后XARn加1、操作前/后減1,或由3位立即數(shù)偏移量或另一個(gè)16位寄存器的內(nèi)容來索引。AMODELoc16/32語法語法說明說明 X *XARn+ARP=n(310)=XARn如果loc16,XARn=XARN+1如果loc32,XARn=XARN+2 X *-XARnARP
17、=n(310)=XARn如果loc16,XARn=XARN-1如果loc32,XARn=XARN-2X*+XARnAR0ARP=n(310)=XARn+AR0X*+XARnAR1ARP=n(310)=XARn+AR1X*+XARn3位數(shù)ARP=n(310)=XARn+三位數(shù)C28x的間接尋址方式下的loc16/loc32的語法說明:164、寄存器尋址方式寄存器尋址方式 該尋址方式下,寄存器可以是訪問的源操作數(shù),也可以是目標(biāo)操作數(shù),這樣在C28x中就能實(shí)現(xiàn)寄存器到寄存器的操作。這一方式包括對32位和16位寄存器的尋址寄存器尋址方式下的loc16/loc32語法說明:AMODELoc16/loc3
18、2語法語法說明說明XACC訪問32位寄存器ACC。當(dāng)寄存器ACC位目的地操作數(shù)是,Z、N、V、C、OVC等標(biāo)志可能會(huì)受到影響XP訪問32位寄存器PXXT訪問32位寄存器XTXXARn訪問32位寄存器XARnXAL訪問16位寄存器AL。AH的內(nèi)容不受影響。當(dāng)AL位目的操作數(shù)時(shí),Z、N、V、C、OVC等標(biāo)志可能會(huì)受到影響XAH訪問16位寄存器AH。AL的內(nèi)容不受影響。當(dāng)AH位目的操作數(shù)時(shí),Z、N、V、C、OVC等標(biāo)志可能會(huì)受到影響XPL訪問16位寄存器PL。寄存器PH的內(nèi)容不受影響XPH訪問16位寄存器PH。寄存器PL的內(nèi)容不受影響XTH訪問16位寄存器TH。寄存器TL的內(nèi)容不受影響XSP訪問16
19、位寄存器SPXARn訪問16位寄存器AR0AR7的內(nèi)容。寄存器ARH0ARH7的內(nèi)容不受影響17例1、ACC寄存器尋址32位數(shù)據(jù)MOVL XAR6,ACC ;將ACC的內(nèi)容裝入到XAR6MOVL ACC,XT ;將XT寄存器的內(nèi)容裝入到ACCADDL ACC,ACC ;ACC=ACC+ACC 例2、P寄存器尋址32位數(shù)據(jù)MOVL XAR6,P ;將P的內(nèi)容裝入到XAR6MOVL P,XT ;將XT寄存器的內(nèi)容裝入PADDL ACC,P ;ACC+ACC+P 例3、AX寄存器尋址16位數(shù)據(jù)MOV PH,AL ;將AL的內(nèi)容裝入到PHADD AH,AL ;AH=AH+ALMOV T,AL ;將AL
20、的內(nèi)容裝入T185、數(shù)據(jù)數(shù)據(jù)/程序程序/IO空間尋址方式空間尋址方式在該尋址方式下,存儲(chǔ)器操作的地址就存在指令中。語法語法地址說明地址說明*(0:16位位)32位數(shù)據(jù)地址:(31:16)=0、(15:0)=16位立即數(shù)PS:指令重復(fù)執(zhí)行時(shí)地址在操作后+1,只能尋址數(shù)據(jù)空間的低64K*(PA)32位數(shù)據(jù)地址:(31:16)=0、(15:0)=16位立即數(shù)PS:指令重復(fù)執(zhí)行時(shí)地址在操作后+1,0:pma22位程序地址:(21:16)=0、(15:0)=pmaPS:指令重復(fù)執(zhí)行時(shí)地址在操作后+1,只能尋址數(shù)據(jù)空間的低64K*(pma)22位程序地址:(21:16)=0 x3F、(15:0)=pmaP
21、S:指令重復(fù)執(zhí)行時(shí)地址在操作后+1,只能尋址數(shù)據(jù)空間的高64K數(shù)據(jù)/程序/IO空間立即尋址方式下的指令語法說明:196、程序空間間接尋址方式程序空間間接尋址方式 某些指令可以通過使用間接指針對程序空間中的存儲(chǔ)器進(jìn)行訪問。因?yàn)镃28xCPU的存儲(chǔ)器是標(biāo)準(zhǔn)一致的,使用的是統(tǒng)一尋址,這就使在一個(gè)機(jī)器周期中進(jìn)行兩次讀操作成為可能。程序空間間接尋址方式下的指令語法說明:語法語法地址說明地址說明*AL22位程序地址:(21:16)=0 x3F、(15:0)=ALPS:如果指令重復(fù)執(zhí)行,AL的地址會(huì)被復(fù)制到影子寄存器,同時(shí)其地址會(huì)在每一執(zhí)行后+1,寄存器AL中斷內(nèi)容沒有改變。只能尋址數(shù)據(jù)空間的高64K*XA
22、R722位程序地址:(21:0)=XAR7PS:如果該指令重復(fù)執(zhí)行,只有在指令XPREAD和XPWRITE中,XAR7中存放的地址才能被復(fù)制到影子寄存器中,同時(shí)地址置將會(huì)在每次執(zhí)行都+1,寄存器XAR7的值并沒有被修改,對于其他指令即使重復(fù)執(zhí)行,地址值也不增加*XAR7+22位程序地址:(21:0)=XAR7如果是16位數(shù)據(jù)操作,XAR7+=1如果是32位數(shù)據(jù)操作,XAR7+=2PS:如果指令被重復(fù)執(zhí)行,地址每次執(zhí)行后增加1207、字節(jié)尋址方式字節(jié)尋址方式字節(jié)尋址方式語法說明:語法語法說明說明*+XARnAR0*+XARnAR1*+XARn3bit32位數(shù)據(jù)地址(31:0)=XARn+偏移量(
23、即AR0/AR1/3bit)如果(偏移量=偶數(shù)),訪問16位存儲(chǔ)單元的最低有效字節(jié);其最高字節(jié)不受影響如果(偏移量=偶數(shù)),訪問16位存儲(chǔ)單元的最高有效字節(jié);其最低字節(jié)不受影響PS:其他尋址方式只能訪問固定地址單元的最低有效字節(jié),而不影響最高有效字節(jié)例: MOV AX.LSB,loc16 ;若(地址方式=*+XARnAR0/AR1/3bit) ;若(偏移量=偶數(shù)值),AX.LSB=loc16.LSB,AX.MSB=0 x00 ;若(偏移量=奇數(shù)值),AX.LSB=loc16.MSB,AX.MSB=0 x00 ;否則,AX.LSB=loc16.LSB,AX.MSB=0 x00 MOVB AX.M
24、SB,loc16 ;若(地址方式=*+XARnAR0/AR1/3bit) ;若(偏移量=偶數(shù)值),AX.LSB=原值,AX.MSB= loc16.LSB ;若(偏移量=奇數(shù)值),AX.LSB=原值,AX.MSB=loc16.MSB ;否則,AX.LSB=loc16.LSB,AX.MSB=loc16.LSB213.3 C28x匯編操作指令匯編操作指令 在C28x系列的DSP當(dāng)中有超過150條的匯編指令,按照功能來分可分為15類:1.對輔助寄存器(對輔助寄存器(XAR0XAR7)的操作)的操作 輔助寄存器的低16位為AR0AR7,它們用作循環(huán)控制和16位比較的通用目的寄存器。當(dāng)訪問AR0AR7時(shí),
25、寄存器的高16位(AR0HAR7H)可能改變或者不改變,這主要取決于所應(yīng)用的指令。AR0HAR7H只能作為XAR0XAR7的一部分來讀取,不能單獨(dú)進(jìn)行訪問助記符助記符說明說明ADD XARn,#7bit7位立即數(shù)加到輔助寄存器XARnADRK #8bit8位立即數(shù)加到當(dāng)前輔助寄存器MOV AR6/7,loc16loc16加載到輔助寄存器MOVB XARn,#8bit8位立即數(shù)加載到輔助寄存器XARnMOVL loc32,XARn存儲(chǔ)32位輔助寄存器內(nèi)容到loc32MOVZ ARn,loc16加載XARn的低16位清除高16位SBRK #8bit從當(dāng)前輔助寄存器中減去8位立即數(shù)SUBB XARn
26、,#7bit從輔助寄存器XARn中減去7位立即數(shù)222.對數(shù)據(jù)頁指針(對數(shù)據(jù)頁指針(DP)的操作)的操作助記符助記符說明說明MOV DP,#10bit加載10位立即數(shù)到數(shù)據(jù)頁指針MOVW DP,#19bit加載整個(gè)數(shù)據(jù)頁MOVZ DP,#10bit加載數(shù)據(jù)頁并清除高位3.對堆棧指針對堆棧指針SP的操作的操作 堆棧指針(SP)允許在數(shù)據(jù)存儲(chǔ)器中使用軟件堆棧。堆棧指針為16位,可以對數(shù)據(jù)空間的低64K進(jìn)行尋址。使用SP時(shí),將32位地址的高16位置為0。堆棧操作說明如下: 1. 棧從低地址向高地址增長。 2. SP總是指向堆棧中的下一個(gè)區(qū)域。 3. SP被初始化,它指向地址00000400h。 4.
27、 將32位數(shù)值存入堆棧時(shí),先存入低16位,然后將高16位存入下一個(gè)高地址中。 5. 讀取32位數(shù)值時(shí),C28x系列的CPU期望存儲(chǔ)器或外設(shè)接口邏輯把讀寫排成偶地址。例如,如果SP包含一個(gè)奇數(shù)地址00000083h,那么,進(jìn)行一個(gè)32位的讀操作時(shí),將從地址00000082h和00000083h中讀取數(shù)值23助記符助記符說明說明ADDB SP,#7bit7位立即數(shù)加載堆棧指針POP ACC堆棧內(nèi)容彈出到寄存器ACCPOP AR1:AR0堆棧內(nèi)容彈出到寄存器AR1和AR0POP AR1H:AR1H堆棧內(nèi)容彈出到寄存器AR1H和AR1HPOP DBGIER堆棧內(nèi)容彈出到寄存器DBFIERPOP DP:
28、ST1堆棧內(nèi)容彈出到寄存器DP和ST1POP DP堆棧內(nèi)容彈出到寄存器DPPUSH AR1H:AR0H寄存器AR1H和AR0H的內(nèi)容入棧PUSH DBGIER寄存器DBGIER的內(nèi)容入棧PUSH DP:ST1寄存器DP和ST1的內(nèi)容入棧PUSH DP寄存器DP的內(nèi)容入棧PUSH IFR寄存器IFR的內(nèi)容入棧PUSH loc16loc16入棧6. 增加SP的值,如果它超過FFFFh,或者減少SP的值,使它低于0000h開始計(jì)數(shù)。例如,如果SP=FFFFh而一個(gè)指令又想SP加3,其結(jié)果是0001h。當(dāng)減少SP的值使它達(dá)到0000h,它就會(huì)重新從FFFFh計(jì)數(shù)。例如,如果SP=0002h而一個(gè)指令又
29、從SP減4,則結(jié)果就是FFFFh7. 當(dāng)數(shù)值存入堆棧時(shí),SP并不要求排成奇數(shù)或者偶數(shù)地址。排列由存儲(chǔ)器或者外設(shè)接口邏輯完成部分堆棧指針操作指令:部分堆棧指針操作指令:244.對對AX寄存器的操作寄存器的操作助記符助記符說明說明ADD AX,loc16loc16加到AXADD loc16,AX將AX的內(nèi)容與loc16相加,并存儲(chǔ)到loc16ADDB AX,#8bit將8位立即數(shù)累加到AXAND AX,loc16,#16bit16位立即數(shù)和loc16逐位“與”,結(jié)果保存到AXANDB AX,#8bitAX與8位立即數(shù)(零擴(kuò)展)逐位“與”ASR AX,#(1-16)算術(shù)右移,移位次數(shù)由立即數(shù)決定AS
30、R AX,T算術(shù)右移,以為次數(shù)由T(3:0)的值決定CMP AX,loc16AX與loc16比較CMPB AX,#8bitAX與8位立即數(shù)(零擴(kuò)展)比較FLIP AX將AX寄存器中的數(shù)據(jù)位翻轉(zhuǎn)順序LSL AX,#(1-16)邏輯左移,移位次數(shù)由立即數(shù)決定LSL AX,T邏輯左移,移位次數(shù)由T(3:0)的值決定LSR AX,#(1-16)邏輯右移,移位次數(shù)由立即數(shù)決定LSR AX,T邏輯右移,移位次數(shù)由T(3:0)的值決定MAX AX,loc16AX與loc16相比較求最大值,并保存到AXMIN AX,loc16AX與loc16相比較求最小值,并保存到AXMOV AX,loc16loc16加載到
31、AX25續(xù):續(xù):MOV loc16,AX寄存器寄存器AX保存到保存到loc16MOV loc6,AX,COND有條件地把AX存儲(chǔ)到loc16MOVB AX,#8bit把8位立即數(shù)(零擴(kuò)展)加載到AXMOVB AX,LSB,loc16加載AX的低字節(jié),AX的高字節(jié)等于0 x00MOVB AX,MSB,loc16加載AX的高字節(jié),AX的低字節(jié)不變MOVB loc16,AX,LSB加載AX的低字節(jié)MOVB loc16,AX,MSB加載AX的高字節(jié)NEG AX求AX的相反數(shù)NOT AX求AX的“非”O(jiān)R AX,loc16AX和loc16按位“或”,結(jié)果保存到AXOR loc16,AXAX和loc16按
32、位“或”,結(jié)果保存到loc16ORB AX,#8bitAX和8位立即數(shù)(零擴(kuò)展)按位“或”,結(jié)果保存到AXSUB AX,loc16從AX中減去loc16SUB loc16,AXloc16減去AX中的數(shù)據(jù),結(jié)果存儲(chǔ)到loc16SUBR loc16,AX反向減法,AX中的數(shù)據(jù)減去loc16,結(jié)果存儲(chǔ)到loc16SXTB AX將AX的低字節(jié)符號(hào)擴(kuò)展到高字節(jié)XOR AX,loc16AX和loc16按位“異或”,結(jié)果保存到AXXOR loc16 ,AXAX和loc16按位“異或”,結(jié)果保存到loc16XORB AX,#8bitAX與8位立即數(shù)(零擴(kuò)展)逐位“異或”,結(jié)果保存到AX265.對對16位位AC
33、C寄存器的操作寄存器的操作 ACC支持單周期數(shù)據(jù)傳送、加法、減法和來自數(shù)據(jù)存儲(chǔ)器的寬度為32位的比較運(yùn)算,它也可以接受32位乘法操作的運(yùn)算結(jié)果。對ACC可以單獨(dú)進(jìn)行16位8位的訪問。累加器還具有如下的相關(guān)狀態(tài)位:(1)溢出模式位(OVM)(2)符號(hào)擴(kuò)展模式位(SXM)(3)測試控制標(biāo)志位(TC)(4)進(jìn)位位(C)(5)零標(biāo)志位(Z)(6)負(fù)標(biāo)志位(N)(7)溢出標(biāo)志位(V)(8)溢出計(jì)數(shù)位(OVC)部分部分16位位ACC寄存器操作說明寄存器操作說明助記符助記符說明說明ADD ACC,loc16#0.16將loc移位后(位擴(kuò)展)加到ACCADD ACC,#16bit#0.15將16位立即數(shù)移位后
34、(位擴(kuò)展)加到ACCADD ACC,loc16Tloc16移位后(位擴(kuò)展)加到ACC,移位次數(shù)由T(3:0)決定ADDB ACC,#8bit 8位立即數(shù)(零擴(kuò)展)加到ACCADDCU ACC,loc16帶進(jìn)位加法,將無符號(hào)數(shù)loc16(零擴(kuò)展)加到ACC27ADDU ACC,loc16帶無符號(hào)數(shù)帶無符號(hào)數(shù)loc16(零擴(kuò)展零擴(kuò)展)加到加到ACCAND ACC,loc16將loc16(零擴(kuò)展)和ACC逐位“與”MOV ACC,loc16#0.16將loc移位后(位擴(kuò)展)加載ACCMOV ACC,#16bit#0.15將16位立即數(shù)移位后(位擴(kuò)展)加載ACCMOV ACC,loc16移位后(位擴(kuò)展
35、)加載ACC,移位次數(shù)由T(3:0)決定MOVB ACC,#8bit8位立即數(shù)(零擴(kuò)展)加載ACCMOVH loc16,ACC#1.8ACC移位后高字節(jié)加載到loc16MOVU ACC,#8bit將無符號(hào)數(shù)loc16加載到AL,AH=0SUB ACC,loc16TACC減去loc16移位后(位擴(kuò)展)的數(shù)據(jù),結(jié)果保存到ACCSUB ACC,loc16#0.16ACC減去loc16移位后(位擴(kuò)展)的數(shù)據(jù),結(jié)果保存到ACCSUB ACC,#16bit#0.15ACC減去16位立即數(shù)移位后(位擴(kuò)展)的數(shù)據(jù),結(jié)果保存到ACCSUBB ACC,#8bitACC減去8位立即數(shù)SBBU ACC,loc16反向
36、帶借位減法,ACC減去無符號(hào)數(shù)loc16OR ACC,loc16loc16和ACC按位“或”,保存到ACCOR ACC,#16bit#0.1516位立即數(shù)移位后和ACC按位或,保存到ACCXOR ACC,loc16loc16和ACC按位“異或”,保存到ACCXOR ACC,#16bit#0.1516位立即數(shù)移位后和ACC按位異或,保存到ACCZALR ACC,loc16AL=0 x8000,loc6加載AH續(xù):續(xù):286 .對對P或或XT寄存器的操作寄存器的操作 被乘數(shù)寄存器(XT寄存器)主要用于在32位乘法操作之前,存放一個(gè)32位有符號(hào)整數(shù)值。XT寄存器的低16位部分是TL寄存器。該寄存器能
37、裝載一個(gè)16位有符號(hào)數(shù),能自動(dòng)對該數(shù)進(jìn)行符號(hào)擴(kuò)展,然后將其送入32位XT寄存器。XT寄存器的高16位部分是T寄存器。該寄存器主要用來存儲(chǔ)16位乘法操作之前的16位整數(shù)值助記符助記符說明說明ADDUL P,loc32無符號(hào)數(shù)loc32加到寄存器PMAXCUL P,loc32有條件地求無符號(hào)數(shù)loc32和P的最大值,存儲(chǔ)到PMINCUL P,loc32有條件地求無符號(hào)數(shù)loc32和P的最小值,存儲(chǔ)到PMOV PH,loc16loc16加載PHMOV PL,loc16loc16加載PLMOV loc16,P存儲(chǔ)移位后的P寄存器的低16位MOV loc16,T存儲(chǔ)T寄存器到loc16MOV TL,#0
38、清除TLMOVDL XT,loc32存儲(chǔ)XT寄存器并加載新XT寄存器MOVH loc16,P保存PH到loc16MOVL P,loc16loc16加載到P寄存器MOVL loc16,P寄存器P加載到loc16MOVL loc32,P寄存器P加載到loc32MOVL P,loc32loc32加載到P寄存器297.對中斷控制寄存器的操作(對中斷控制寄存器的操作(IFR、IER、DBGIER)助記符助記符說明說明AND IER,#16bit按位進(jìn)行“與”操作來禁止指定的CPU中斷AND IFR,#16bit按位進(jìn)行“與”操作來清除掛起的CPU中斷IACK #16bit中斷確認(rèn)INTR INT1/./
39、INT14、NMI、EMUINT、DLOGINT、RTOSINT、仿真硬件中斷MOV IER,loc16加載中斷允許寄存器MOV loc16,IER存儲(chǔ)中斷允許寄存器OR IER,#16bit按位相“或”O(jiān)R IFR,#16bit按位相“或”TRAT #0.31軟件陷阱308.對狀態(tài)寄存器(對狀態(tài)寄存器(ST0、ST1)的操作)的操作助記符助記符說明說明CLRC mode清除各狀態(tài)位CLRC XF清除狀態(tài)位XF并輸出信號(hào)CLRC AMODE清除AMODE位C28ADDR 清除AMODE狀態(tài)位CLRC OBJMODE清除OBJMODE位C27MAP清除M0M1MAP位CLRC OVC清除OVC位
40、ZAP OVC清除OVC位DINT禁止屏蔽中斷(置INTM位)EINT允許可屏蔽中斷(清除INTM)MOV PM,AX令乘積移位方式位PM=AX(2:0)MOV OVC,loc16用指定單元高6位數(shù)加載溢出計(jì)數(shù)器MOV loc16,OVC存儲(chǔ)溢出計(jì)數(shù)器SETC Mode置各狀態(tài)位SETC XF置XF位并輸出信號(hào)C28MAP 置M0M1MAP位SETC OBJMODE置OBJMODE位SETC AMODE置AMODE位LPADDR置AMODE位SPM PM 設(shè)置乘積移位方式319.對對16*16乘法操作的說明乘法操作的說明助記符助記符說明說明DMAC ACC:P,loc32,*XAR7/+雙16
41、*16乘法且累加MAC P,loc16,0:pma相乘且累加MAC P,loc16,*XAR7/+相乘且累加MAY P,T,loc1616位*16位乘法MPY ACC,loc16,#16bit16位*16位乘法MPYA P,loc16,#16bit16位*16位乘法并加上先前乘積MPYB P,T,#8bit有符號(hào)數(shù)與8位無符號(hào)立即數(shù)相乘MPYS P,T,loc1616位*16位乘法并做減法MPYB ACC,T,#8bit與8位立即數(shù)相乘MPYU ACC,T,loc1616位*16位無符號(hào)乘法MPYXU P,T,loc16有符號(hào)數(shù)與無符號(hào)數(shù)相乘MPYXU ACC,T,loc16有符號(hào)數(shù)與無符號(hào)數(shù)
42、相乘SQRA loc16求平方值并講P寄存器的內(nèi)容加到ACCSQRS loc16求平方值并且ACC做減法XMAC P,loc16,*(pma)與C2xLP兼容性的相乘且累加32 10.對對32*32乘法操作的說明乘法操作的說明助記符助記符說明說明IMACL P,loc32,*XAR7/+有符號(hào)32位數(shù)*有符號(hào)32位數(shù)且累加(低半段)IMPYAL P,XT,loc32有符號(hào)32位數(shù)乘法(低半段)且加上先前P的內(nèi)容IMPYL P,XT,loc32有符號(hào)32位數(shù)*有符號(hào)32位數(shù)(低半段)IMPYL ACC,XT,loc32有符號(hào)32位數(shù)*有符號(hào)32位數(shù)(低半段)IMPYSL P,XT,loc32有符
43、號(hào)32位數(shù)乘法(低半段)且減去先前P的內(nèi)容IMPXUL P,XT,loc32有符號(hào)32位數(shù)*無符號(hào)32位數(shù)(低半段)QMACL P,XT,loc32有符號(hào)32位數(shù)*有符號(hào)32位數(shù)且累加(高半段)QMPYAL P,XT,loc32有符號(hào)32位數(shù)乘法(高半段)且加上先前P的內(nèi)容QMPYL P,XT,loc32有符號(hào)32位數(shù)*有符號(hào)32位數(shù)(高半段)QMPYL ACC,XT,loc32有符號(hào)32位數(shù)*有符號(hào)32位數(shù)(高半段)QMPYSL P,XT,loc32有符號(hào)32位數(shù)乘法(高半段)且減去先前P的內(nèi)容QMPXUL P,XT,loc32有符號(hào)32位數(shù)*無符號(hào)32位數(shù)(高半段)3311.直接寄存器操作
44、直接寄存器操作助記符助記符說明說明ADD loc16,#16bit有符號(hào)16位立即數(shù)與loc16相加,結(jié)果保存到loc16AND loc16,#16bit有符號(hào)16位立即數(shù)與loc16按位“與”,結(jié)果保存到loc16CMP loc16,#16bit有符號(hào)16位立即數(shù)與loc16比較DEC loc16loc16 減1DMOV loc16loc16-1=loc16INC loc16loc16加1MOV loc16,*(0:16bit)16位地址指向存儲(chǔ)單元的內(nèi)容加載到loc16MOV loc16,16bit存儲(chǔ)16位立即數(shù)到loc16MOV loc16,#0清除loc16MOVB loc16,#8
45、bit,COND有條件存儲(chǔ)8位立即數(shù)(零擴(kuò)展)到loc16OR loc16,#16bitloc16和16位立即數(shù)按位“或”,結(jié)果保存到loc16TBIT loc16,#bit測試loc16中的指定位TBIT loc16,T測試loc16中由T寄存器指定的內(nèi)容TCLR loc16,#bit測試并清除loc16中的指定位TSET loc16,#bit測試并置loc16中的指定位為1XOR loc16,#16bitloc16和16位立即數(shù)按位“異或”3412.對對I/O空間操作的說明空間操作的說明助記符助記符說明說明IN loc16,*(PA)從端口輸入數(shù)據(jù)OUT *(PA),loc16從端口輸出數(shù)
46、據(jù)UOUT *(PA),loc16想I/O端口輸出不受保護(hù)的數(shù)據(jù)13.程序空間的操作說明程序空間的操作說明助記符助記符說明說明PREAD loc16,*XAR7 將XAR7指向的程序空間的16位數(shù)據(jù)放到loc16PWRITE *XAR7,loc16將loc16放到XAR7指向的程序空間的一個(gè)存儲(chǔ)單元XPREAD loc16,*AL與C2xLP兼容性的讀程序操作XPREAD loc16,*(pma)與C2xLP兼容性的讀程序操作XPWRITE *AL,loc16與C2xLP兼容性的寫程序操作3514.跳轉(zhuǎn)跳轉(zhuǎn)/調(diào)用調(diào)用/返回操作返回操作助記符助記符說明說明BANZ 16bitoff,ARn-若輔助寄存器為0,進(jìn)行跳轉(zhuǎn),PC變化同上BF 16bitoff,COND 快速跳轉(zhuǎn),PC變化同上IRET中斷返回LB 22bitAddr長跳轉(zhuǎn),PC=22位程序地址LCR *XARn使用RPC的間接長調(diào)用LOOPNZ loc16,#16bitloc16與16位立即數(shù)相與非0時(shí)循環(huán)lLRET 長返回LRETR使用RPC的長返回SB #8bitoff,COND有條件短跳轉(zhuǎn),PC變化同上XB pma與C2xLP兼容性的跳轉(zhuǎn)XB pma,*ARPn與C2xLP兼容性的功能調(diào)用跳轉(zhuǎn)XB *AL與C2xLP兼容性的功能調(diào)用XCALL pma,*ARPn與C2xLP兼容性的功能調(diào)用且改變ARPXCA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 土地合同書模板
- 退投資款合同范例
- 設(shè)計(jì)管理咨詢合同范例
- 中小學(xué)保安服務(wù)合同范例
- 防漏施工合同范例
- 光伏推廣合同范例
- 新風(fēng)機(jī)合同范例
- 項(xiàng)目咨詢論證合同范例
- 自建公寓轉(zhuǎn)租合同范例
- 飯店引流合同范例范例
- 【MOOC】中國近現(xiàn)代史綱要-武漢理工大學(xué) 中國大學(xué)慕課MOOC答案
- 【新教材】蘇教版小學(xué)科學(xué)三年級上冊:全冊單元試卷、期中期末總復(fù)習(xí)試卷
- 2025年公司半年工作總結(jié)及下半年工作計(jì)劃
- 屋面板的拆除與更換施工方案
- GB/Z 44047-2024漂浮式海上風(fēng)力發(fā)電機(jī)組設(shè)計(jì)要求
- 2024版統(tǒng)編版一年級道德與法治上冊《2 我向國旗敬個(gè)禮》教學(xué)課件
- 國開(內(nèi)蒙古)2024年《漢語中的中國文化》形成性考核1-3終結(jié)性考核答案
- 司法臨床司法鑒定培訓(xùn)
- 第47屆世界技能大賽江蘇省選拔賽計(jì)算機(jī)軟件測試項(xiàng)目樣題
- 勞務(wù)合同保證金合同模板
- 小學(xué)足球課課件
評論
0/150
提交評論