Holtek單片機(jī)指令系統(tǒng)_第1頁
Holtek單片機(jī)指令系統(tǒng)_第2頁
Holtek單片機(jī)指令系統(tǒng)_第3頁
Holtek單片機(jī)指令系統(tǒng)_第4頁
Holtek單片機(jī)指令系統(tǒng)_第5頁
已閱讀5頁,還剩139頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第四章指令集介紹1、程序:使計(jì)算機(jī)完成一個(gè)任務(wù)的一組命令或指令序列。2、指令:使計(jì)算機(jī)執(zhí)行某一特定操作的二進(jìn)制編碼。3、計(jì)算機(jī)的指令系統(tǒng):計(jì)算機(jī)的指令的集合。4、計(jì)算機(jī)指令的組成操作碼字段和操作數(shù)字段局部。操作碼:計(jì)算機(jī)所要執(zhí)行的操作。操作數(shù):指令執(zhí)行過程中所需要的操作數(shù)??梢杂卸鄠€(gè)。5、指令的書寫格式6、尋址方式 在指令中取得操作數(shù)地址所使用的方法。

操作碼操作數(shù)……源操作數(shù)HOLTEK尋址方式立即尋址直接尋址間接尋址特殊存放器尋址指針尋址立即尋址

立即尋址指操作數(shù)在指令中直接給出,操作數(shù)是指令的一局部,完整取出該條指令后,也就獲得了操作數(shù)。例如:MOVA,33HADD A,33H直接尋址直接尋址指操作數(shù)在存儲(chǔ)器中,指令中給出操作數(shù)在存儲(chǔ)器中的地址,例如:MOV [33H],ACLR[33H]間接尋址

間接尋址指操作數(shù)在存儲(chǔ)器中,操作數(shù)在存儲(chǔ)器中的地址放在到間接尋址存放器〔IAR0,IAR1〕中,例如:例:include "ht48r70a-1.inc"code .section at0 'code'org0jmpstartorg10hstart:mova,30hmovmp0,amova,23hmov[30h],a mova,[00h]特殊存放器尋址操作數(shù)在存放器中,在指令直接指定存放器。例如:CLRWDTCLRWDT1指針尋址指針尋址只適用在配合做查表指令,例如:[例]假設(shè)RAM[2FH]=00H,ROM[180H]=0123H MOV A,80HMOV TBLP,AMOVA,55HMOVTBLH,A0150H:TABRDC[2FH];目前頁在100~1FFH運(yùn)行后:TBLP=80H,TBLH=01H,PC=0151H,[2FH]=23H,[180H]=0123H匯編源程序的語句類型匯編語言的語句〔指令〕1、指令性語句/可執(zhí)行語句/符號(hào)指令通知CPU進(jìn)行某種操作的命令,與機(jī)器指令相對(duì)應(yīng),相應(yīng)功能由硬件完成;2、指示性指令/說明性語句/偽指令偽指令,又稱為偽語句,是匯編語言提供的指示性語言,它為匯編程序和鏈接程序提供信息。偽指令本身不占用內(nèi)存單元,它們的功能是在匯編和鏈接時(shí)由相應(yīng)的軟件完成的。格式:指令性語句 [標(biāo)號(hào):]符號(hào)指令[;注釋] 指示性語句 [變量名]偽指令[;注釋]偽指令I(lǐng)NCLUDEfile-nameINCLUDE“file-name”將file-name的文件內(nèi)容,包含至目前的源代碼文件,并將其視為源代碼。盛群公司的編譯器提供最多7層嵌套INCLUDE微體系結(jié)構(gòu)。偽指令;command注釋,以CR/LF結(jié)束偽指令Name.SECTION[align][combine]‘class’Name:定義SECTION的名稱Align:指定此SECTION存放在ROM存儲(chǔ)器的具體位置,有以下存放方式:BYTE:將此SECTION放在ROM存儲(chǔ)器的任何字節(jié)地址。WORD:將此SECTION放在ROM存儲(chǔ)器的偶地址。PARA:將此SECTION放在ROM存儲(chǔ)器的段落地址〔16的整數(shù)倍地址〕。PAGE:將此SECTION放在ROM存儲(chǔ)器的頁地址〔256的整數(shù)倍地址〕。缺?。築YTE偽指令Combine:定義此SECTION如何與name和align相同的SECTION結(jié)合,有下面幾種方式:COMMON:指定此SECTION可以與相同名稱的SECTION重疊。ATaddress:指定此SECTION必須放在address的地址。DA1.sectionAT40H如果沒有設(shè)定combine的類型,那么相同名稱的SECTION可以連接成一個(gè)單一的程序段,這些具有完全相同名稱的程序段可以分別定義在不同的源程序文件中。Class:用于指定此SECTION的類別,類別有CODE和DATACODE:表示此SECTION為程序段,是放在ROM中DATA:表示此SECTION為數(shù)據(jù)段,是放在RAM中相同類別的程序段被安排在存儲(chǔ)器中的連續(xù)區(qū)域,以其輸入的先后順序安排在存儲(chǔ)器中,在此偽指令之后,直到下一個(gè)SECTION偽指令之前的所有指令及數(shù)據(jù),都屬于同一個(gè)SECTION.偽指令END

程序結(jié)束.ORGexpression

設(shè)定程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器的起始值例:ORG08HMOVA,3偽指令NamePROC...Nameendp

定義子程序例:

toggleprocmovtmpbuf,amova,1xorma,flagmova,tmpbufrettoggleendp偽指令[label:]DCexpression1[,expression2[,…]]將expression1及expression2等值依次放在以label為首址的程序存儲(chǔ)器中注意:該偽指令只能用于CODE類型的程序段內(nèi)expression計(jì)算的數(shù)值是以16位表示,編譯器會(huì)將多余的位數(shù)去除掉,expression必須為數(shù)值或標(biāo)記。該指令通常被用在程序段所建立的表格中,已被查詢。例:orglastpagetable:dc28h,025ch偽指令[name]DBvalue1[,value2[,…]][name]DWvalue1[,value2[,…]][name]DBBIT[name]DBrepeat-countDUP(?)[name]DWrepeat-countDUP(?)引導(dǎo)編譯器在數(shù)據(jù)存儲(chǔ)器(datamemory)內(nèi)保存空間給變量name(如果有指定name)。存儲(chǔ)器保存的空間大小那么由其后的個(gè)數(shù)及數(shù)據(jù)類型,或由重復(fù)次數(shù)及數(shù)據(jù)類型來決定。由于單片機(jī)的數(shù)據(jù)存儲(chǔ)器無法事先記錄數(shù)據(jù)內(nèi)容,編譯器不會(huì)對(duì)數(shù)據(jù)存儲(chǔ)器做初始值的設(shè)定,因此value1和value2必須為“?”表示只是保存存儲(chǔ)器空間給程序執(zhí)行時(shí)使用,并沒有設(shè)定其初始值。DBIT只保存一個(gè)位,編譯器會(huì)將每8個(gè)DBIT整合在一起并且保存一個(gè)字節(jié)給這8個(gè)DBIT變量。例:MY-DATA.SECTION‘DATA’DATA .SECTION ‘DATA’ tbuf DB? chksum DW? flag1 DBIT sbuf DB? cflag DBIT在此范例中,編譯器保存字節(jié)地址0給變量tbuf、字節(jié)地址1與2給變量chksum、字節(jié)地址3的第0位給變量flag1、字節(jié)地址4給變量sbuf以及字節(jié)地址3的第1位給變量cflag。偽指令nameLABELBIT︱BYTE︱WORD說明此偽指令會(huì)將name的地址設(shè)定為與其后的變量相同的存儲(chǔ)器地址。范例 lab1 LABEL WORD d1 DB? d2 DB?在這個(gè)范例中,d1是lab1的低字節(jié),而d2那么是lab1的高字節(jié)。偽指令nameEQUexpression說明通過給name指定expression,EQU偽指令會(huì)生成一個(gè)新的數(shù)值符號(hào)、別名或文字符號(hào)(name)來代表expression。數(shù)值符號(hào)是一個(gè)代表16位值的名稱、別名那么是另一個(gè)符號(hào)的名稱、而文字符號(hào)那么是代表一串字符組合的名稱。name必須是唯一的,即先前未被定義過。expression可以是一個(gè)整數(shù)、字符串常量、指令助記符、數(shù)學(xué)表達(dá)式或地址表達(dá)式。范例 accreg EQU 5 bmove EQU mov在這個(gè)范例中,變量accreg等于5,而bmove相當(dāng)于指令mov。偽指令宏指令是程序員自己設(shè)計(jì)的指令,是假設(shè)干指令的集合,用以完成某項(xiàng)操作。即便是較低版本的宏匯編語言,也允許用戶程序自定義宏指令。宏指令的定義語句可以不放在任何邏輯段之中,通常都放在程序的首部。nameMACRO[dummy-parameter[,...]] statements ENDM宏調(diào)用格式:宏指令名<實(shí)際參數(shù)>宏展開:宏指令名用宏體代替,用實(shí)參代替形參(兩者個(gè)數(shù)一一對(duì)應(yīng),假設(shè)不等,多余形式作空處理.include "ht48r70a-1.inc"data .section 'data'a1 db ? a2 db ?sDb?ad1db?ad2db?sumdb?code .section at0 'code'org0jmpstartorg40h start:ADDUPMACROAD1,AD2,SUMMOVA,AD1ADDA,AD2MOVSUM,AENDMmova,12hmova1,amova,34hmova2,aADDUPa1,a2,send偽指令偽指令在宏指令中,可以使用偽指令LOCAL來定義只能在宏指令本體內(nèi)使用的變量。nameLOCALdummy-name[,...]說明宏指令LOCAL用來定義只能在宏指令本體內(nèi)使用的符號(hào),使用時(shí)必須定義在MACRO偽指令之后的第一行。dummy-name是一個(gè)暫時(shí)使用的名稱,當(dāng)宏指令被調(diào)用展開時(shí),它將被一個(gè)唯一的名稱所取代,編譯器會(huì)對(duì)dummy-name生成對(duì)應(yīng)的實(shí)際名稱,這個(gè)實(shí)際名稱的格式為??digit,其中digit數(shù)字為十六進(jìn)制且范圍由0000至FFFF。

偽指令include "ht48r70a-1.inc"data .section 'data'a1 db ? a2 db ?sDb?ad1db?sumdb?code .section at0 'code'org0jmpstartorg4 start:ADDUPMACROAD1,SUMMOVA,0L:ADDA,AD1SDZAD1JMPLMOVSUM,AENDM

mova,09hmova1,aADDUPa1,s

mova,0Ahmova2,aADDUPa2,s出現(xiàn)重復(fù)標(biāo)號(hào)偽指令include "ht48r70a-1.inc"data .section 'data'a1 db ? a2 db ?sDb?ad1db?sumdb?code .section at0 'code'org0jmpstartorg4 start:ADDUPMACROAD1,SUMLOCALLMOVA,0L:ADDA,AD1SDZAD1JMPLMOVSUM,AENDM

mova,09hmova1,aADDUPa1,smova,0Ahmova2,aADDUPa2,s沒有重復(fù)標(biāo)號(hào),正確指令集任何單片機(jī)成功運(yùn)作的核心在于它的指令集,此指令集為一組程序指令碼,用來指導(dǎo)單片機(jī)如何去執(zhí)行指定的工作。在盛群?jiǎn)纹瑱C(jī)中,提供了豐富且易變通的指令,共超過六十條,程序設(shè)計(jì)師可以事半功倍地實(shí)現(xiàn)他們的應(yīng)用。匯編語言指令

[name:]mnemonic[operand1[,operand2]][;comment]其中name: → 符號(hào)名稱mnemonic → 指令名稱〔關(guān)鍵字〕operand1 → 存放器 存儲(chǔ)器地址operand2 → 存放器 存儲(chǔ)器地址 立即數(shù)匯編語言指令名稱名稱是由字母、數(shù)字或特殊字符所組成的,可以當(dāng)標(biāo)號(hào)(label)使用。當(dāng)標(biāo)號(hào)使用時(shí),必須在名稱后面緊接一個(gè)冒號(hào)(colon)。助記符助記符是源程序中使用的指令名稱。操作數(shù)、運(yùn)算子和表達(dá)式操作數(shù)〔源操作數(shù)或目的操作數(shù)〕定義被指令所使用的數(shù)值,它們可以是常量、變量、存放器、表達(dá)式或關(guān)鍵字。當(dāng)使用指令時(shí),必須謹(jǐn)慎選擇正確的操作數(shù),即源操作數(shù)和目的操作數(shù)。錢字符號(hào)$是一個(gè)特殊的操作數(shù),它代表當(dāng)前的地址。表達(dá)式是由操作數(shù)所組成,在程序編譯時(shí)用來計(jì)算出數(shù)值或存儲(chǔ)器地址。表達(dá)式是常量、符號(hào)以及任何被算術(shù)運(yùn)算子分隔的常量和符號(hào)組合。運(yùn)算子定義表達(dá)式中各操作數(shù)之間的運(yùn)算動(dòng)作,編譯器提供了許多運(yùn)算子去處理操作數(shù),有些運(yùn)算子只處理常量,有些那么處理存儲(chǔ)器數(shù)值,也有兩者兼具的。如果運(yùn)算子只是處理常量,那么在程序編譯時(shí)就會(huì)直接計(jì)算出數(shù)值。以下是編譯器所提供的運(yùn)算子。算術(shù)運(yùn)算子+–*/%〔MOD〕SHL和SHR運(yùn)算子語法 expressionSHRcount expressionSHLcount這些位平移運(yùn)算子的值全都為常量,expression依照count所指定的位數(shù)目向右移(SHR)或向左移(SHL),如果被平移的位超過有效位數(shù)時(shí),那么對(duì)應(yīng)的位會(huì)以0填滿,如: movA,01110111bSHR3;resultACC=00001110b movA,01110111bSHL4;resultACC=01110000b邏輯運(yùn)算子NOT、AND、OR、XOR

語法

NOT

expression expression1 AND expression2 expression1 OR

expression2 expression1 XOR expression2 NOT 各位的1階補(bǔ)碼

AND 各位AND運(yùn)算

OR

各位OR運(yùn)算

XOR 各位XOR運(yùn)算偏移運(yùn)算子語法

OFFSET

expressionOFFSET運(yùn)算子會(huì)生成expression的偏移地址,expression可以是標(biāo)號(hào)、變量或其它直接存儲(chǔ)器地址的操作數(shù),被OFFSET運(yùn)算子所返回的數(shù)值必須是立即數(shù)。LOW、MID和HIGH運(yùn)算子語法 LOW expression MID expression HIGH expression如果expression的結(jié)果是一個(gè)立即數(shù)的話,那么LOW/MID/HIGH運(yùn)算子會(huì)生成expression的值,而且是分別取此數(shù)值的低/中/高字節(jié)。但是如果expression是標(biāo)號(hào),那么LOW/MID/HIGH運(yùn)算子將取得此標(biāo)號(hào)所在的程序存儲(chǔ)器地址的低/中/高字節(jié)的數(shù)值。mova,low123456hBANK儲(chǔ)存區(qū)塊運(yùn)算子

格式:BANKname說明:BANK運(yùn)算子會(huì)返回程序段所在的存儲(chǔ)器區(qū)塊的編號(hào),此程序段的名稱是name。如果name是標(biāo)號(hào),那么返回ROM程序存儲(chǔ)器區(qū)塊。如果name是數(shù)據(jù)變量那么返回RAM數(shù)據(jù)存儲(chǔ)器區(qū)塊。存儲(chǔ)器區(qū)塊的數(shù)值格式與存放器BP的格式相同,請(qǐng)參考各單片機(jī)的規(guī)格。〔注意:不同的單片機(jī)可能有不同的BP格式。〕例1movA,BANKstartmovBP,Ajmpstart例2movA,BANKvarmovBP,AmovA,OFFSETvarmovMP1,AmovA,R1局部標(biāo)號(hào)

局部標(biāo)號(hào)有固定形式的,如$number。其中number可以為0至29,局部標(biāo)號(hào)除了可以重復(fù)使用外,其它功用與一般標(biāo)號(hào)是相同的。局部標(biāo)號(hào)必須使用在任意兩個(gè)連續(xù)的標(biāo)號(hào)之間而且同樣的局部標(biāo)號(hào)名稱也可以用在其它的兩個(gè)連續(xù)標(biāo)號(hào)之間。在編譯源程序文件之前,編譯器會(huì)將每一個(gè)局部標(biāo)號(hào)轉(zhuǎn)換成唯一的標(biāo)號(hào)。任何兩個(gè)連續(xù)標(biāo)號(hào)之間,最多可以定義30個(gè)局部標(biāo)號(hào)。范例Label1: ;label1 $1: ;;locallabel mova,1 jmp$3 $2: ;;locallabel mova,2 jmp$1 $3: ;;locallabel jmp$2Label2: ;label Jmp$1 $0: ;;locallabel jmpLabel1 $1: jmp$0Label3:指令周期大局部的操作均只需要一個(gè)指令周期來執(zhí)行。分支、調(diào)用或查表那么需要兩個(gè)指令周期。一個(gè)指令周期相當(dāng)于四個(gè)系統(tǒng)時(shí)鐘周期,因此如果在8MHz的系統(tǒng)時(shí)鐘振蕩器下,大局部的操作將在0.5ms中執(zhí)行完成,而分支或調(diào)用操作那么將在1ms中執(zhí)行完成。雖然需要兩個(gè)指令周期的指令通常指的是JMP、CALL、RET、RETI和查表指令,但如果牽涉到程序計(jì)數(shù)器低字節(jié)存放器PCL也將多花費(fèi)一個(gè)周期去加以執(zhí)行。即指令改變PCL的內(nèi)容進(jìn)而導(dǎo)致直接跳轉(zhuǎn)至新地址時(shí),需要多一個(gè)周期去執(zhí)行。例如“CLRPCL”或“MOVPCL,A”。對(duì)于跳轉(zhuǎn)命令必須注意的是,如果比較的結(jié)果牽涉到跳轉(zhuǎn)動(dòng)作將多花費(fèi)一個(gè)周期,如果沒有那么需一個(gè)周期即可。數(shù)據(jù)的傳送單片機(jī)程序的數(shù)據(jù)傳送是使用最為頻繁的操作之一。使用三種MOV的指令,數(shù)據(jù)不但可以從存放器轉(zhuǎn)移至累加器(反之亦然),而且能夠直接移動(dòng)立即數(shù)據(jù)至累加器。數(shù)據(jù)傳送最重要的應(yīng)用之一是從接收端口接收數(shù)據(jù)或者傳送數(shù)據(jù)到輸出端口。算術(shù)運(yùn)算算術(shù)運(yùn)算和數(shù)據(jù)處理是大局部單片機(jī)應(yīng)用所需具備的能力,在盛群?jiǎn)纹瑱C(jī)內(nèi)部的指令集中,可直接實(shí)現(xiàn)加與減的運(yùn)算。當(dāng)加法的結(jié)果超出255或減法的結(jié)果少于0時(shí),要注意正確的處理進(jìn)位和借位的問題。INC、INCA、DEC和DECA指令提供了對(duì)一個(gè)指定地址的值加一或減一的功能。邏輯和移位運(yùn)算標(biāo)準(zhǔn)邏輯運(yùn)算例如AND、OR、XOR和CPL全都包含在盛群?jiǎn)纹瑱C(jī)內(nèi)部的指令集中,如同大多數(shù)牽涉到數(shù)據(jù)運(yùn)算的指令,數(shù)據(jù)的傳送必須通過累加器。在所有邏輯數(shù)據(jù)運(yùn)算中,如果運(yùn)算結(jié)果為零,那么零標(biāo)志位將被置位。另外邏輯數(shù)據(jù)運(yùn)用形式還有移位指令,例如RR、RL、RRC和RLC提供了向左或向右移動(dòng)一位的方法。移位指令常用于串行端口的程序應(yīng)用,數(shù)據(jù)可從內(nèi)部存放器轉(zhuǎn)移至進(jìn)位標(biāo)志位,而此位那么可被檢驗(yàn)。移位運(yùn)算還可應(yīng)用在乘法與除法的運(yùn)算組成中。分支和控制的轉(zhuǎn)換

程序分支是采取使用JMP指令跳轉(zhuǎn)到指定地址或使用CALL指令調(diào)用子程序的形式。兩者之不同在于當(dāng)子程序被執(zhí)行完畢后,程序必須馬上返回原來的地址。這個(gè)動(dòng)作是由放置在子程序里的返回指令RET來實(shí)現(xiàn),它可使程序跳回CALL指令之后的地址。在JMP指令中,程序那么只是跳到一個(gè)指定的地址而已,并不需如CALL指令般跳回。一個(gè)非常有用的分支指令是條件跳轉(zhuǎn),條件是由數(shù)據(jù)存儲(chǔ)器或指定位來加以決定。遵循跳轉(zhuǎn)條件,程序?qū)⒗^續(xù)執(zhí)行下一條指令或略過且跳轉(zhuǎn)至接下來的指令。因此這些分支指令可在進(jìn)行決策時(shí)加以使用。位運(yùn)算提供數(shù)據(jù)存儲(chǔ)器單一位的運(yùn)算指令是盛群?jiǎn)纹瑱C(jī)的特性之一,這特性對(duì)于輸出端口位的規(guī)劃尤其有用,其中個(gè)別的位或端口的引腳可以使用“SET[m].i”或“CLR[m].i”指令來設(shè)定其為高位或低位。如果沒有這特性,程序設(shè)計(jì)師必須先讀入輸出口的8位數(shù)據(jù),處理這些數(shù)據(jù),然后再輸出正確的新數(shù)據(jù)。這種讀入-修改-寫出的程序現(xiàn)在那么由位指令所取代。查表運(yùn)算

數(shù)據(jù)的儲(chǔ)存通常由存放器完成,然而當(dāng)處理大量的數(shù)據(jù)時(shí),其龐大與復(fù)雜的內(nèi)容常造成對(duì)指定存儲(chǔ)器儲(chǔ)存上的不便,為了改善此問題,盛群?jiǎn)纹瑱C(jī)允許在程序存儲(chǔ)器中設(shè)定一塊數(shù)據(jù)可直接存取的區(qū)域,只需要一組簡(jiǎn)易的指令即可對(duì)數(shù)據(jù)進(jìn)行查表。其它運(yùn)算

除了上述功能指令外,其它指令還包括用于省電的“HALT”指令和使程序在極端電壓或電磁環(huán)境下仍能正常工作的看門狗定時(shí)器控制指令。慣例符號(hào)

x:立即數(shù)m:數(shù)據(jù)存儲(chǔ)器地址A:累加器i:0~7號(hào)位addr:程序存儲(chǔ)器地址算術(shù)運(yùn)算類指令A(yù)DDA,[m] AddDataMemorytoACC指令說明: 將指定數(shù)據(jù)存儲(chǔ)器和累加器的內(nèi)容相加后,把結(jié)果儲(chǔ)存回累加器。功能表示: ACC

ACC+[m]

影響標(biāo)志位 OV,Z,AC,C [例] ADD A,[2FH]

運(yùn)算前:ACC=20H,[2FH]=10H

運(yùn)算后:ACC=30H,[2FH]=10H算術(shù)運(yùn)算類指令A(yù)DDA,x AddimmediatedatatoACC指令說明: 將累加器和立即數(shù)的內(nèi)容相加后,把結(jié)果儲(chǔ)存回累加器。功能表示: ACC

ACC+x影響標(biāo)志位 OV,Z,AC,C[例] ADD A,2FH

運(yùn)算前:ACC=20H

運(yùn)算后:ACC=4FH算術(shù)運(yùn)算類指令A(yù)DDMA,[m] AddACCtoDataMemory指令說明: 將指定數(shù)據(jù)存儲(chǔ)器和累加器的內(nèi)容相加后,把結(jié)果儲(chǔ)存回指定數(shù)據(jù)存儲(chǔ)器。 功能表示: [m]

ACC+[m]影響標(biāo)志位 OV,Z,AC,C [例] ADDM A,[2FH]

運(yùn)算前:ACC=20H,[2FH]=10H

運(yùn)算后:ACC=20H,[2FH]=30H

算術(shù)運(yùn)算類指令A(yù)DCA,[m];AddDataMemorytoACCwithCarry指令說明: 將指定數(shù)據(jù)存儲(chǔ)器、累加器和進(jìn)位標(biāo)志位的內(nèi)容相加后,把結(jié)果儲(chǔ)存回累加器。功能表示: ACC

ACC+[m]+C影響標(biāo)志位 OV,Z,AC,C [例] ADC A,[2FH]

運(yùn)算前:ACC=20H,[2FH]=10HC=1

運(yùn)算后:ACC=31H,[2FH]=10HC=0算術(shù)運(yùn)算類指令A(yù)DCMA,[m] AddACCtoDataMemorywithCarry指令說明: 將指定數(shù)據(jù)存儲(chǔ)器、累加器和進(jìn)位標(biāo)志位的內(nèi)容相加后,把結(jié)果儲(chǔ)存回指定數(shù)據(jù)存儲(chǔ)器。功能表示: [m]

ACC+[m]+C 影響標(biāo)志位 OV,Z,AC,C [例] ADCM A,[2FH]

運(yùn)算前:ACC=20H,[2FH]=10HC=1

運(yùn)算后:ACC=20H,[2FH]=31HC=0ADC和ADCM常用于多字節(jié)數(shù)據(jù)的加法運(yùn)算。例:編程實(shí)現(xiàn)1234H+5678Hinclude "ht48r70a-1.inc"code .section at0 'code'org0jmpstartorg10hstart:mova,34hMOV[30h],aMOVA,78HADDMA,[30H]MOVA,12HMOV[31H],AMOVA,56HADCMA,[31H]算術(shù)運(yùn)算類指令SUBA,x SubtractimmediateDatafromACC指令說明: 將累加器中內(nèi)容減去立即數(shù),把結(jié)果儲(chǔ)存回累加器。如果結(jié)果為負(fù),C標(biāo)志位去除為0,反之結(jié)果為正或0,C標(biāo)志位設(shè)置為1。功能表示: ACCACC–x影響標(biāo)志位 OV,Z,AC,C[例] SUB A,2FH 運(yùn)算前:ACC=20H,C=1運(yùn)算后:ACC=0F1H,C=0算術(shù)運(yùn)算類指令SUBA,[m] SubtractDataMemoryfromACC指令說明: 將累加器中內(nèi)容減去指定數(shù)據(jù)存儲(chǔ)器的數(shù)據(jù),把結(jié)果儲(chǔ)存回累加器。如果結(jié)果為負(fù),C標(biāo)志位去除為0,反之結(jié)果為正或0,C標(biāo)志位設(shè)置為1。功能表示: ACCACC–[m]影響標(biāo)志位 OV,Z,AC,C[例] SUB A,[2FH] 運(yùn)算前:ACC=20H,[2FH]=30HC=1運(yùn)算后:ACC=0F0H,[2FH]=30HC=0算術(shù)運(yùn)算類指令SUBMA,[m] SubtractDataMemoryfromACCwithresultinDataMemory指令說明: 將累加器中內(nèi)容減去指定數(shù)據(jù)存儲(chǔ)器的數(shù)據(jù),把結(jié)果儲(chǔ)存回?cái)?shù)據(jù)存儲(chǔ)器。如果結(jié)果為負(fù),C標(biāo)志位去除為0,反之結(jié)果為正或0,C標(biāo)志位設(shè)置為1。功能表示: [m]ACC–[m]影響標(biāo)志位 OV,Z,AC,C[例] SUB A,[2FH] 運(yùn)算前:ACC=20H,[2FH]=30HC=1運(yùn)算后:ACC=20H,[2FH]=0F0HC=0算術(shù)運(yùn)算類指令SBCA,[m] SubtractDataMemoryfromACCwithCarry指令說明: 將累加器中的數(shù)據(jù)與指定數(shù)據(jù)存儲(chǔ)器內(nèi)容和進(jìn)位標(biāo)志位的反相減,把結(jié)果儲(chǔ)存回累加器。如果結(jié)果為負(fù),C標(biāo)志位去除為0,反之結(jié)果為正或0,C標(biāo)志位設(shè)置為1。功能表示: ACCACC–[m]–影響標(biāo)志位 OV,Z,AC,C[例] SBC A,[2FH] 運(yùn)算前:ACC=30H,[2FH]=10HC=1運(yùn)算后:ACC=20H,[2FH]=10HC=1算術(shù)運(yùn)算類指令SBCMA,[m] SubtractDataMemoryfromACCwithCarryandresultinDataMemory指令說明: 將累加器中的數(shù)據(jù)與指定數(shù)據(jù)存儲(chǔ)器內(nèi)容和進(jìn)位標(biāo)志位的反相減,把結(jié)果儲(chǔ)存回?cái)?shù)據(jù)存儲(chǔ)器。如果結(jié)果為負(fù),C標(biāo)志位去除為0,反之結(jié)果為正或0,C標(biāo)志位設(shè)置為1。功能表示: [m]ACC–[m]–影響標(biāo)志位 OV,Z,AC,C[例] SBCM A,[2FH] 運(yùn)算前:ACC=30H,[2FH]=10HC=1運(yùn)算后:ACC=30H,[2FH]=20HC=1SBC和SBCM常用于多字節(jié)數(shù)據(jù)的減法運(yùn)算。例:編程實(shí)現(xiàn)1234H-5678Hinclude "ht48r70a-1.inc"code .section at0 'code'org0jmpstartorg10hstart:mova,78hMOV[30h],aMOVA,34HSUBMA,[30H]MOVA,56HMOV[31H],AMOVA,12HSBCMA,[31H]算術(shù)運(yùn)算類指令I(lǐng)NCA[m] IncrementDataMemorywithresultinACC指令說明: 將指定數(shù)據(jù)存儲(chǔ)器內(nèi)的數(shù)據(jù)加1,把結(jié)果儲(chǔ)存回累加器且數(shù)據(jù)存儲(chǔ)器中的內(nèi)容不變。功能表示: ACC

[m]+1影響標(biāo)志位 Z[例] INCA [2CH]

運(yùn)算前:[2CH]=0AH A=00H運(yùn)算后:[2CH]=0AH A=0BH算術(shù)運(yùn)算類指令I(lǐng)NC[m] IncrementDataMemory指令說明: 將指定數(shù)據(jù)存儲(chǔ)器內(nèi)的數(shù)據(jù)加1。功能表示: [m]

[m]+1影響標(biāo)志位 Z[例] INC [2CH]

運(yùn)算前:[2CH]=0AH 運(yùn)算后:[2CH]=0BH 算術(shù)運(yùn)算類指令DECA[m] DecrementDataMemorywithresultinACC指令說明: 將在指定數(shù)據(jù)存儲(chǔ)器內(nèi)的數(shù)據(jù)減1,把結(jié)果儲(chǔ)存回累加器且數(shù)據(jù)存儲(chǔ)器中的內(nèi)容不變。功能表示: ACC

[m]–1影響標(biāo)志位 Z[例] DECA [2CH]

運(yùn)算前:[2CH]=0AH A=00H運(yùn)算后:[2CH]=0AH A=09H算術(shù)運(yùn)算類指令DEC[m] DecrementDataMemory指令說明: 將在指定數(shù)據(jù)存儲(chǔ)器內(nèi)的數(shù)據(jù)減1。功能表示: [m]

[m]–1影響標(biāo)志位 Z[例] DEC [2CH]

運(yùn)算前:[2CH]=0AH A=1BH運(yùn)算后:[2CH]=21H A=1BH算術(shù)運(yùn)算練習(xí)編程實(shí)現(xiàn)5678H+11A2H-3456Hinclude "ht48r70a-1.inc"code .section at0 'code'org0jmpstartorg10hstart:mova,78hMOV[30h],aMOVA,0A2HADDMA,[30H]MOVA,56HMOV[31H],AMOVA,11HADCMA,[31H]movA,56HMOV[40H],AMOVA,[30H]SUBMA,[40H]MOVA,34HMOV[41H],AMOVA,[31H]SBCMA,[41H]END算術(shù)運(yùn)算類指令DAA[m] Decimal-AdjustACCforadditionwithresultinDataMemory指令說明: 將存在累加器中的內(nèi)容數(shù)值轉(zhuǎn)換為BCD〔二進(jìn)制轉(zhuǎn)成十進(jìn)制〕數(shù)值,如果低4位大于9或AC標(biāo)志位被置位,那么在低4位加上一個(gè)6,不然低4位的內(nèi)容不變,如果高4位大于9或C標(biāo)志位被置位,那么在高4位加上一個(gè)6,十進(jìn)制的轉(zhuǎn)換主要是依照累加器和標(biāo)志位狀況,分別加上00H、06H、60H或66H,只有C標(biāo)志位也許會(huì)被此指令影響,它會(huì)指出原始BCD數(shù)是否大于100,并可以進(jìn)行雙精度十進(jìn)制數(shù)相加。功能表示: [m]ACC+00H或[m]ACC+06H或[m]ACC+60H或[m]ACC+66H影響標(biāo)志位 C[例1]單字節(jié)BCD碼加法運(yùn)算include ht48r70a-1.incdata .section 'data'bCnt db ? ;bigloopcountsCnt db ? ;smallloopcountcode .section at0 'code'org0jmpstartorg4start:mova,23hadda,59hdaa[30h] end練習(xí)[例2]試編程實(shí)現(xiàn)多字節(jié)BCD碼加法運(yùn)算:3423H+1959H[例2]試編程實(shí)現(xiàn)多字節(jié)BCD碼加法運(yùn)算:3423H+1959H

[例2]多字節(jié)BCD碼加法運(yùn)算code .section at0 'code'org0jmpstartorg4start:mova,23hadda,59hdaa[30h]mova,34h;注意此處不能直接用adca,34hmov[31h],amova,19hadca,[31h]daa[31h] end邏輯運(yùn)算類指令A(yù)NDA,[m]LogicalANDDataMemorytoACC指令說明: 將存在累加器和指定數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù)作AND的運(yùn)算,然后把結(jié)果儲(chǔ)存回累加器。功能表示: ACC

ACC“AND”[m]影響標(biāo)志位 Z [例] AND A,[2FH]

運(yùn)算前:ACC=10001110B,[2FH]=00101111B

運(yùn)算后:ACC=00001110B,[2FH]=00101111B

邏輯運(yùn)算類指令A(yù)NDA,x LogicalANDimmediatedatatoACC 指令說明: 將存在累加器中的數(shù)據(jù)和立即數(shù)作AND的運(yùn)算,然后把結(jié)果儲(chǔ)存回累加器。功能表示: ACC

ACC“AND”x影響標(biāo)志位 Z [例] AND A,2CH

運(yùn)算前:ACC=10001110B

運(yùn)算后:ACC=00001100B

邏輯運(yùn)算類指令A(yù)NDMA,[m]LogicalANDACCtoDataMemory

指令說明: 將存在指定數(shù)據(jù)存儲(chǔ)器和累加器中的數(shù)據(jù)作AND的運(yùn)算,然后把結(jié)果儲(chǔ)存回?cái)?shù)據(jù)存儲(chǔ)器。功能表示: [m]

ACC“AND”[m]影響標(biāo)志位 Z[例] AND A,[2CH]

運(yùn)算前:ACC=10001110B[2CH]=11111111B運(yùn)算后:ACC=00001110B[2CH]=00001110B邏輯運(yùn)算類指令ORA,[m] LogicalORDataMemorytoACC指令說明: 將存在累加器和指定數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù)作OR的運(yùn)算,然后把結(jié)果儲(chǔ)存回累加器。 功能表示: ACC

ACC“OR”[m]影響標(biāo)志位 Z [例] OR A,[2FH]

運(yùn)算前:ACC=10001110B,[2FH]=00101111B

運(yùn)算后:ACC=10101111B,[2FH]=00101111B

邏輯運(yùn)算類指令ORA,x LogicalORimmediatedatatoACC指令說明: 將存在累加器中的數(shù)據(jù)和立即數(shù)作OR的運(yùn)算,然后把結(jié)果儲(chǔ)存回累加器。功能表示: ACC

ACC“OR”x影響標(biāo)志位 Z [例] OR A,25H

運(yùn)算前:ACC=10001110B,25H=00100101B

運(yùn)算后:ACC=10101111B

邏輯運(yùn)算類指令ORMA,[m]LogicalORACCtoDataMemory

指令說明: 將存在指定數(shù)據(jù)存儲(chǔ)器和累加器中的數(shù)據(jù)作OR的運(yùn)算,然后把結(jié)果儲(chǔ)存回?cái)?shù)據(jù)存儲(chǔ)器。功能表示: [m]

ACC“OR”[m]影響標(biāo)志位 Z[例] OR A,[25H]

運(yùn)算前:ACC=10001110B,[2FH]=00100101B

運(yùn)算后:ACC=00001110B,[2FH]=00101111B

邏輯運(yùn)算類指令XORMA,[m]LogicalXORACCtoDataMemory

指令說明: 將存在指定數(shù)據(jù)存儲(chǔ)器和累加器中的數(shù)據(jù)作XOR的運(yùn)算,然后把結(jié)果儲(chǔ)存回?cái)?shù)據(jù)存儲(chǔ)器。功能表示: [m]

ACC“XOR”[m] 影響標(biāo)志位 Z[例] XORM A,[2FH]

運(yùn)算前:ACC=10001110B,[2FH]=00101111B

運(yùn)算后:ACC=10001110B,[2FH]=10100001B

邏輯運(yùn)算類指令XORA,x LogicalXORimmediatedatatoACC指令說明: 將存在累加器中的數(shù)據(jù)和立即數(shù)作XOR的運(yùn)算,然后把結(jié)果儲(chǔ)存回累加器。功能表示: ACC

ACC“XOR”x 影響標(biāo)志位 Z[例] XOR A,11110000B

運(yùn)算前:ACC=10001110B

運(yùn)算后:ACC=011111110B

邏輯運(yùn)算類指令CPL[m] ComplementDataMemory指令說明:將指定數(shù)據(jù)存儲(chǔ)器中的每一位取邏輯反,相當(dāng)于從1變0或0變1。功能表示: [m]

影響標(biāo)志位 Z[例] CPL [2CH]

運(yùn)算前:[2CH]=5FH運(yùn)算后:[2CH]=0A0H邏輯運(yùn)算類指令CPLA[m] 指令說明: 將指定數(shù)據(jù)存儲(chǔ)器中的每一位取邏輯反,相當(dāng)于從1變0或0變1,而結(jié)果被儲(chǔ)存回累加器且數(shù)據(jù)存儲(chǔ)器中的內(nèi)容不變。功能表示: ACC

影響標(biāo)志位 Z[例] CPLA [2CH]

運(yùn)算前:[2CH]=5FH A=0H運(yùn)算后:[2CH]=5FH A=0A0H邏輯運(yùn)算類指令XORA,[m] 指令說明: 將存在累加器和指定數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù)作XOR的運(yùn)算,然后把結(jié)果儲(chǔ)存回累加器。功能表示: ACC

ACC“XOR”[m] 影響標(biāo)志位 Z[例] XOR A,[2FH]

運(yùn)算前:ACC=10001110B,[2FH]=00101111B

運(yùn)算后:ACC=10100001B,[2FH]=00101111B

邏輯運(yùn)算類指令的應(yīng)用例1:將A的D0位清零,其余位保持不變。

MOVA,37HANDA,11111110B例2:將A的D1位置1,其余位保持不變。

MOVA,36HORA,00000010B例3:將A的D3位取反,其余位保持不變。

MOVA,36HXORA,00001000B例4:MOVA,36HANDA,36h移位指令RRA[m] 指令說明: 將指定數(shù)據(jù)存儲(chǔ)器的內(nèi)容向右移1個(gè)位,且第0位移回第7位,而移位的結(jié)果儲(chǔ)存回累加器且數(shù)據(jù)存儲(chǔ)器中的內(nèi)容不變。功能表示: ACC.i

[m].(i+1);(i=0~6)ACC.7

[m].0影響標(biāo)志位 None[例] RRA [25H]

運(yùn)算前:[25H]=10001110B

運(yùn)算后:[25H]=10001110B,A=01000111B移位指令RR[m] RotateDataMemoryright指令說明: 將指定數(shù)據(jù)存儲(chǔ)器的內(nèi)容向右移1個(gè)位,且第0位移回第7位。功能表示: [m].i

[m].(i+1);(i=0~6)[m].7

[m].0影響標(biāo)志位 None[例] RR [25H]

運(yùn)算前:[25H]=10001110B運(yùn)算后:[25H]=01000111B移位指令RRC[m] RotateDataMemoryrightthroughCarry指令說明: 將指定數(shù)據(jù)存儲(chǔ)器的內(nèi)容連同進(jìn)位標(biāo)志位向右移1個(gè)位,第0位取代進(jìn)位位且原本的進(jìn)位標(biāo)志位移至第7位。功能表示: [m].i

[m].(i+1);(i=0~6)[m].7

CC

[m].0影響標(biāo)志位 C[例] RRC [25H]

運(yùn)算前:[25H]=10001110B,C=0

運(yùn)算后:[25H]=01000111B,C=0移位指令RRCA[m] RotateDataMemoryrightthroughCarrywithresultinACC指令說明: 將指定數(shù)據(jù)存儲(chǔ)器的內(nèi)容連同進(jìn)位標(biāo)志位向右移1個(gè)位,第0位取代進(jìn)位位且原本的進(jìn)位標(biāo)志位移至第7位,而移位的結(jié)果儲(chǔ)存回累加器且數(shù)據(jù)存儲(chǔ)器中的內(nèi)容不變。功能表示: ACC.i

[m].(i+1);(i=0~6)ACC.7

CC

[m].0影響標(biāo)志位 C[例] RRCA [25H]

運(yùn)算前:[25H]=10001110B,C=0

運(yùn)算后:[25H]=10001110B,C=0,A=01000111B移位指令RL[m] RotateDataMemoryleft指令說明: 將指定數(shù)據(jù)存儲(chǔ)器的內(nèi)容向左移1個(gè)位,且第7位移回第0位。功能表示: [m].(i+1)

[m].i;(i=0~6)[m].0

[m].7影響標(biāo)志位 None[例] RL [25H]

運(yùn)算前:[25H]=10001110B

運(yùn)算后:[25H]=00011101B

移位指令RLA[m] RotateDataMemoryleftwithresultinACC指令說明: 將指定數(shù)據(jù)存儲(chǔ)器的內(nèi)容向左移1個(gè)位,且第7位移回第0位,而移位的結(jié)果儲(chǔ)存回累加器且數(shù)據(jù)存儲(chǔ)器中的內(nèi)容不變。功能表示: ACC.(i+1)

[m].i;(i=0~6)ACC.0

[m].7影響標(biāo)志位 None[例] RLA [25H]

運(yùn)算前:[25H]=10001110B,A=00000000B

運(yùn)算后:[25H]=10001110B,A=00011101B移位指令RLC[m] RotateDataMemoryLeftthroughCarry指令說明: 將指定數(shù)據(jù)存儲(chǔ)器的內(nèi)容連同進(jìn)位標(biāo)志位向左移1個(gè)位,第7位取代進(jìn)位位且原本的進(jìn)位標(biāo)志位移至第0位。功能表示: [m].(i+1)

[m].i;(i=0~6)[m].0

CC

[m].7影響標(biāo)志位 C[例] RLC [25H]

運(yùn)算前:[25H]=10001110B,C=0

運(yùn)算后:[25H]=00011100B,C=1移位指令RLCA[m] RotateDataMemoryleftthroughCarrywithresultinACC指令說明: 將指定數(shù)據(jù)存儲(chǔ)器的內(nèi)容連同進(jìn)位標(biāo)志位向左移1個(gè)位,第7位取代進(jìn)位位且原本的進(jìn)位標(biāo)志位移至第0位,而移位的結(jié)果儲(chǔ)存回累加器且數(shù)據(jù)存儲(chǔ)器中的內(nèi)容不變。功能表示: ACC.(i+1)

[m].i;(i=0~6)ACC.0

CC

[m].7影響標(biāo)志位 C[例] RLCA [25H]

運(yùn)算前:[25H]=10001110B,C=0

運(yùn)算后:[25H]=10001110B,C=1,A=00011100B移位指令的應(yīng)用例1:實(shí)現(xiàn)8位數(shù)*2

include "ht48r70a-1.inc"data .section 'data'org20hram1db?code .section at0 'code'org0jmpstartorg10hstart:mova,12hmovram1,aclrcrlcram1End移位指令的應(yīng)用練習(xí)1:實(shí)現(xiàn)16位數(shù)*2

移位指令的應(yīng)用練習(xí)1:實(shí)現(xiàn)16位數(shù)*2include "ht48r70a-1.inc"data .section 'data'org20hram1db?ram2db?code .section at0 'code'org0jmpstartorg10hstart:mova,12hmovram1,amova,56hmovram2,aclrcrlcram1rlcram2End運(yùn)行結(jié)果:RAM2=ACH,RAM1=24H移位指令的應(yīng)用例2:實(shí)現(xiàn)8位數(shù)/2include "ht48r70a-1.inc"data .section 'data'org0ram1db?code .section at0 'code'org0jmpstartorg10hstart:mova,12hmovram1,aclrcrrcram1end移位指令的應(yīng)用練習(xí)2:實(shí)現(xiàn)16位數(shù)/2

移位指令的應(yīng)用練習(xí)2:實(shí)現(xiàn)16位數(shù)/2include "ht48r70a-1.inc"data .section 'data'org20hram1db?ram2db?code .section at0 'code'org0jmpstartorg10hstart:mova,12hmovram1,amova,56hmovram2,aclrcrrcram1rrcram2end運(yùn)行結(jié)果:RAM2=2BH,RAM1=09H數(shù)據(jù)傳送指令MOVA,[m] MoveDataMemorytoACC指令說明: 將指定數(shù)據(jù)存儲(chǔ)器的內(nèi)容復(fù)制到累加器中。功能表示: ACC

[m]影響標(biāo)志位 None[例] MOV A,[2CH]

運(yùn)算前:[2CH]=0AH A=00H運(yùn)算后:[2CH]=0AH A=0AH數(shù)據(jù)傳送指令MOVA,x MoveimmediatedatatoACC指令說明: 將立即數(shù)載入至累加器中。 功能表示: ACC

x影響標(biāo)志位 None[例] MOV A,20H

運(yùn)算前:A=00H運(yùn)算后:A=20H數(shù)據(jù)傳送指令MOV[m],A MoveACCtoDataMemory指令說明: 將累加器的內(nèi)容復(fù)制到指定數(shù)據(jù)存儲(chǔ)器。功能表示: [m]

ACC影響標(biāo)志位 None[例] MOV [20H],A

運(yùn)算前:[20H]=1FhA=00H運(yùn)算后:[20H]=00HA=00H位運(yùn)算指令CLR[m] ClearDataMemory指令說明: 指定數(shù)據(jù)存儲(chǔ)器中的每一位均去除為0。功能表示: [m]00H影響標(biāo)志位 None [例] CLR [2CH] 運(yùn)算前:[2CH]=5FH運(yùn)算后:[2CH]=00H位運(yùn)算指令CLR[m].i ClearbitofDataMemory指令說明: 指定數(shù)據(jù)存儲(chǔ)器中的i位去除為0。功能表示: [m].i0影響標(biāo)志位 None [例] CLR [2CH].0 運(yùn)算前:[2CH]=5FH運(yùn)算后:[2CH]=5EH注意:位地址的表示:CLRINTC.0CLR[0BH].0CLREMI位運(yùn)算指令CLRWDT ClearWatchdogTimer指令說明:將TO、PDF標(biāo)志位和WDT全都清零。功能表示:WDTclearedTO

0PDF

0影響標(biāo)志位:TO,PDF位運(yùn)算指令CLRWDT1 Pre-clearWatchdogTimer指令說明: 將TO、PDF標(biāo)志位和WDT全都清零,請(qǐng)注意此指令要結(jié)合CLRWDT2一起動(dòng)作且必須交替執(zhí)行才有作用,重復(fù)執(zhí)行此項(xiàng)指令而沒有與CLRWDT2交替執(zhí)行將無任何作用。功能表示:WDTclearedTO

0PDF

0影響標(biāo)志位 TO,PDF位運(yùn)算指令CLRWDT2 Pre-clearWatchdogTimer指令說明: 將TO、PDF標(biāo)志位和WDT全都清零,請(qǐng)注意此指令要結(jié)合CLRWDT1一起動(dòng)作且必須交替執(zhí)行才有作用,重復(fù)執(zhí)行此項(xiàng)指令而沒有與CLRWDT1交替執(zhí)行將無任何作用。功能表示:WDTclearedTO

0PDF

0影響標(biāo)志位 TO,PDF位運(yùn)算指令SET[m] SetDataMemory指令說明: 將指定數(shù)據(jù)存儲(chǔ)器的每一個(gè)位置位為1。功能表示: [m]

FFH影響標(biāo)志位 None[例] SET [2FH]

運(yùn)算前:[2FH]=01H運(yùn)算后:[2FH]=0FFH位運(yùn)算指令SET[m].i SetbitofDataMemory指令說明:將指定數(shù)據(jù)存儲(chǔ)器的第i位置位為1。功能表示: [m].i

1影響標(biāo)志位 None[例] SET [2FH].2

運(yùn)算前:[2FH]=00000001B運(yùn)算后:[2FH]=00000101B轉(zhuǎn)移指令JMPaddr Jumpunconditionally指令說明: 程序計(jì)數(shù)器的內(nèi)容被指定地址所取代,程序由新地址繼續(xù)執(zhí)行,當(dāng)新地址被加載入時(shí),必須插入一個(gè)空指令周期,所以此指令為2個(gè)周期的指令。功能表示: ProgramCounter

addr影響標(biāo)志位 None轉(zhuǎn)移指令SZ[m] SkipifDataMemoryis0指令說明: 如果指定數(shù)據(jù)存儲(chǔ)器的內(nèi)容為0,那么程序計(jì)數(shù)器再加1跳過下一條指令,由于取得下一指令時(shí)會(huì)要求插入一個(gè)空指令周期,所以此指令為2個(gè)周期的指令。如果結(jié)果不為0,程序繼續(xù)執(zhí)行下面的指令。功能表示: Skipif[m]=0影響標(biāo)志位 None[例1] Retry: . .SZ [2FH] Jmp Retry CLR C運(yùn)算前:[2FH]=10H運(yùn)算后:[2FH]=10H執(zhí)行JmpRetry[例2] Retry: . .SZ [2FH] Jmp Retry CLR C運(yùn)算前:[2FH]=00H運(yùn)算后:[2FH]=00H,執(zhí)行CLRC轉(zhuǎn)移指令SZA[m] SkipifDataMemoryis0withdatamovementtoACC指令說明:將指定數(shù)據(jù)存儲(chǔ)器的內(nèi)容復(fù)制到累加器,如果值為0,那么程序計(jì)數(shù)器再加1跳過下一條指令,由于取得下一指令時(shí)會(huì)要求插入一個(gè)空指令周期,所以此指令為2個(gè)周期的指令。如果結(jié)果不為0,程序繼續(xù)執(zhí)行下面的指令。功能表示: ACC[m]Skipif[m]=0影響標(biāo)志位 None[例1] Retry: . .SZA [2FH] Jmp Retry CLR C運(yùn)算前:[2FH]=10H,A=00H運(yùn)算后:[2FH]=10H,A=10H執(zhí)行JmpRetry[例2] Retry: . .SZA [2FH] Jmp Retry CLR C運(yùn)算前:[2FH]=00H,A=10H運(yùn)算后:[2FH]=00H,A=00H執(zhí)行CLRC轉(zhuǎn)移指令SZ[m].i SkipifbitiofDataMemoryis0指令說明:如果指定數(shù)據(jù)存儲(chǔ)器第i位為0,那么程序計(jì)數(shù)器再加1跳過下一條指令,由于取得下一指令時(shí)會(huì)要求插入一個(gè)空指令周期,所以此指令為2個(gè)周期的指令。如果結(jié)果不為0,程序繼續(xù)執(zhí)行下面的指令。功能表示: Skipif[m].i=0影響標(biāo)志位 None[例1] SZ [2FH].1 Jmp Bit_High CLR C . .Bit_High:運(yùn)算前:[2FH]=00000011B運(yùn)算后:[2FH]=00000011B執(zhí)行JMPBit_High[例2] SZ [2FH].1 Jmp Bit_High CLR C . .Bit_High:運(yùn)算前:[2FH]=00000001B運(yùn)算后:[2FH]=00000001B執(zhí)行CLRC轉(zhuǎn)移指令SIZ[m] SkipifincrementDataMemoryis0指令說明: 將指定數(shù)據(jù)存儲(chǔ)器的內(nèi)容先加上1后,如果結(jié)果為0,那么程序計(jì)數(shù)器再加1跳過下一條指令,由于取得下一指令時(shí)會(huì)要求插入一個(gè)空指令周期,所以此指令為2個(gè)周期的指令。如果結(jié)果不為0,那么程序繼續(xù)執(zhí)行下面的指令。功能表示: [m][m]+1Skipif[m]=0影響標(biāo)志位 None[例1] Retry: . .SIZ [2FH] Jmp Retry CLR C運(yùn)算前:[2FH]=10H運(yùn)算后:[2FH]=11H執(zhí)行JmpRetry[例2] Retry: . .SIZ [2FH] Jmp Retry CLR C運(yùn)算前:[2FH]=0FFH運(yùn)算后:[2FH]=00H執(zhí)行CLRC轉(zhuǎn)移指令SIZA[m] SkipifincrementDataMemoryiszerowithresultinACC指令說明: 將指定數(shù)據(jù)存儲(chǔ)器的內(nèi)容先加上1后,如果結(jié)果為0,那么程序計(jì)數(shù)器再加1跳過下一條指令,此結(jié)果會(huì)被儲(chǔ)存回累加器且指定數(shù)據(jù)存儲(chǔ)器中的內(nèi)容不變,由于取得下一指令時(shí)會(huì)要求插入一個(gè)空指令周期,所以此指令為2個(gè)周期的指令。如果結(jié)果不為0,那么程序繼續(xù)執(zhí)行下面的指令。功能表示: ACC[m]+1 SkipifACC=0影響標(biāo)志位: None[例1] Retry: . .SIZA [2FH] Jmp Retry CLR C運(yùn)算前:[2FH]=10H,A=00H運(yùn)算后:[2FH]=10H,A=11H執(zhí)行JmpRetry[例2] Retry: . .SIZ [2FH] Jmp Retry CLR C運(yùn)算前:[2FH]=0FFH,A=10H運(yùn)算后:[2FH]=0FFH,A=00H執(zhí)行CLRC轉(zhuǎn)移指令SNZ[m].i SkipifbitiofDataMemoryisnot0指令說明: 如果指定數(shù)據(jù)存儲(chǔ)器的第i位不為0,那么程序計(jì)數(shù)器再加1跳過下一條指令,由于取得下一指令時(shí)會(huì)要求插入一個(gè)空指令周期,所以此指令為2個(gè)周期的指令。如果結(jié)果不為0,程序繼續(xù)執(zhí)行下面的指令。功能表示: Skipif[m].i≠0影響標(biāo)志位 None[例1] SNZ [2FH].1 Jmp Bit_Low CLR C . .Bit_Low:運(yùn)算前:[2FH]=00000011B運(yùn)算后:[2FH]=00000011B執(zhí)行CLRC[例2] SNZ [2FH].1 Jmp Bit_Low CLR C . .Bit_Low:運(yùn)算前:[2FH]=00000001B運(yùn)算后:[2FH]=00000001B執(zhí)行JMPBit_Low轉(zhuǎn)移指令SDZ[m] SkipifDecrementDataMemoryis0指令說明: 將指定數(shù)據(jù)存儲(chǔ)器的內(nèi)容先減去1后,如果結(jié)果為0,那么程序計(jì)數(shù)器再加1跳過下一條指令,由于取得下一指令時(shí)會(huì)要求插入一個(gè)空指令周期,所以此指令為2個(gè)周期的指令。如果結(jié)果不為0,那么程序繼續(xù)執(zhí)行下面的指令。功能表示: [m][m]–1Skipif[m]=0影響標(biāo)志位 None[例1] Retry: . .SDZ [2FH] Jmp Retry CLR C 運(yùn)算前:[2FH]=10H運(yùn)算后:[2FH]=0FH,執(zhí)行JmpRetry[例2] Retry: . .SDZ [2FH] Jmp Retry CLR C 運(yùn)算前:[2FH]=01H運(yùn)算后:[2FH]=00H,執(zhí)行ClrC轉(zhuǎn)移指令SDZA[m] SkipifdecrementDataMemoryiszerowithresultinACC指令說明: 將指定數(shù)據(jù)存儲(chǔ)器的內(nèi)容先減去1后,如果結(jié)果為0,那么程序計(jì)數(shù)器再加1跳過下一條指令,此結(jié)果會(huì)被儲(chǔ)存回累加器且指定數(shù)據(jù)存儲(chǔ)器中的內(nèi)容不變,由于取得下一指令時(shí)會(huì)要求插入一個(gè)空指令周期,所以此指令為2個(gè)周期的指令。如果結(jié)果不為0,那么程序繼續(xù)執(zhí)行下面的指令。功能表示: ACC[m]–1SkipifACC=0影響標(biāo)志位 None[例1] Retry: . .SDZA [2FH] Jmp Retry CLR C 運(yùn)算前:[2FH]=10H,A=0H運(yùn)算后:[2FH]=10H,A=0FH執(zhí)行JmpRetry[例2] Retry: . .SDZA [2FH] Jmp Retry CLR C 運(yùn)算前:[2FH]=01H,A=0FH運(yùn)算后:[2FH]=01H,A=00H執(zhí)行ClrC轉(zhuǎn)移指令CALLaddr Subroutinecall指令說明: 無條件地調(diào)用指定地址的子程序,此時(shí)程序計(jì)數(shù)器先加1獲得下一個(gè)要執(zhí)行的指令地址并壓入堆棧,接著載入指定地址并從新地址繼續(xù)執(zhí)行程序,由于此指令需要額外的運(yùn)算,所以為一個(gè)2周期的指令。功能表示: Stack

ProgramCounter+1ProgramCounter

addr影響標(biāo)志位 None轉(zhuǎn)移指令RET Returnfromsubroutine

指令說明: 將堆棧區(qū)的數(shù)據(jù)取回至程序計(jì)數(shù)器,程序由取回的地址繼續(xù)執(zhí)行。功能表示: ProgramCounter

Stack影響標(biāo)志位 None轉(zhuǎn)移指令RETA,x ReturnfromsubroutineandloadimmediatedatatoACC指令說明: 將堆棧區(qū)的數(shù)據(jù)取回至程序計(jì)數(shù)器且累加器載入立即數(shù),程序由取回的地址繼續(xù)執(zhí)行。功能表示: ProgramCounter

StackACC

x影響標(biāo)志位 None[例] RET A,01H

運(yùn)算前:ACC=00H

運(yùn)算后:ACC=01H

轉(zhuǎn)移指令RETI Returnfrominterrupt指令說明:將堆棧區(qū)的數(shù)據(jù)取回至程序計(jì)數(shù)器且中斷功能通過EMI位重新被使能,EMI是控制中斷使能的主中斷位(存放器INTC的第0位),如果在執(zhí)行RETI指令之前還有中斷未被響應(yīng),那么這個(gè)中斷將在返回主程序之前被響應(yīng)。功能表示: ProgramCounterStackEMI1影響標(biāo)志位 None查表指令TABRDC[m] Readtable(currentpage)toTBLHandDataMemory

指令說明: 將表格指針TBLP所指的程序代碼低字節(jié)(當(dāng)前頁)移至指定數(shù)據(jù)存儲(chǔ)器且將高字節(jié)移至TBLH。功能表示: [m]

程序代碼(低字節(jié))TBLH

程序代碼(高字節(jié))影響標(biāo)志位 None[例] include "ht48r70a-1.inc"data .section 'data'ram2db?code .section at0 'code'org0jmpstartorg20hstart:mova,56hMOVTBLP,ATABRDCRAM2ORG0050Htable:DW0A22FH,0226H,6D33H,4F34H,0C34H,0C34BH,0E33BH,0E12H,0E23FH,0C56FHend查表指令TABRDL[m] Readtable(lastpage)toTBLHandDataMemory指令說明: 將表格指針TBLP所指的程序代碼低字節(jié)(最后一頁)移至指定數(shù)據(jù)存儲(chǔ)器且將高字節(jié)移至TBLH。功能表示: [m]

程序代碼(低字節(jié))TBLH

程序代碼(高字節(jié))影響標(biāo)志位 None[例]include "ht48r70a-1.inc"data .section 'data'ram2db?code .section at0 'code'org0jmpstartorg20hstart:mova,2hMOVTBLP,ATABRDLRAM2ORG1F00Htable:DW0A22FH,0226H,6D33H,4F34H,0C34H,0C34BH,0E33BH,0E12H,0E23FH,0C56FHend查表

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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)論