導航:首頁 > 操作系統 > 單片機匯編指令表

單片機匯編指令表

發布時間:2022-06-30 00:32:29

A. 單片機匯編查表指令

mov xp0,#0
mov dptr,#tp0
LOOP: mov a,xp0
movc a,@a+dptr
mov p2,a
inc xp0
mov a,xp0
cjne a,#80,LOOP %循環查表中每一個直接的值,一共80次%
ret

tp0: DB 030H,048H,048H,048H,048H,048H,030H,000H
DB 010H,030H,010H,010H,010H,010H,07CH,000H
DB 000H,038H,044H,004H,018H,020H,07CH,000H
DB 030H,048H,008H,010H,008H,048H,030H,000H
DB 008H,018H,028H,048H,07CH,008H,008H,000H
DB 03CH,020H,020H,038H,004H,024H,018H,000H
DB 078H,040H,040H,078H,048H,048H,078H,000H
DB 078H,008H,008H,008H,008H,008H,008H,000H
DB 030H,048H,048H,030H,048H,048H,030H,000H
DB 030H,048H,048H,038H,008H,048H,030H,000H

B. 匯編語言在51單片機中的所有指令有那些

單片機指令功能一覽表
助記符 代碼 說明
MOV A,Rn E8~EF 寄存器A
MOV A,direct E5 dircet 直接位元組送A
MOV A,@Ri ER~E7 間接RAM送A
MOV A,#data 74 data 立即數送A
MOV Rn,A F8~FF A送寄存器
MOV Rn,dircet A8~AF dircet 直接位元組送寄存器
MOV Rn,#data 78~7F data 立即數送寄存器
MOV dircet,A F5 dircet A送直接位元組
MOV dircet,Rn 88~8F dircet 寄存器送直接位元組
MOV dircet1,dircet2 85 dircet1 dircet2 直接位元組送直接位元組
MOV dircet,@Ro 86~87 間接RAM送直接位元組
MOV dircet,#data 75 dircet data 立即數送直接位元組
MOV @Ri,A F6~F7 A送間接RAM
MOV @Ri,#data 76~77 data 直接位元組送間接RAM
MOV @Ri,#data 76~77 data 立即數送間接RAM
MOV DPTR,#data16 90 data 15~8 16位常數送數據指針
data7~0
MOVC A,@A+DPTR 93 由((A)+(DPTR))定址的程序存貯
器位元組選A
MOVC A,@A+PC 83 由((A)+(PC));定址的程序存貯器位元組送A
MOVX A,@Ri E2~E3 送外部數據(8位地址)送A
MOVX A,@DPTR E0 送外部數據(16位地址)送A
MOVX @Ri,A F2~F3 A送外部數據(8位地址)
MOVX @DPTR,A F0 A送外部數據(16位地址)
PUSH dircet C0 dircet 直接位元組進棧,SP加1
POP dircet D0 dircet 直接位元組退棧,SP減1
XCH A,Rn C8~CF 交換A和寄存器
XCH A,dircet C5 dircet 交換A和直接位元組
XCH A,@Ri C6~C7 交換A和間接RAM
XCH A,@Ri D6~D7 交換A和間接RAM的低位
SWAP A C4

算術操作 (A的二個半位元組交換)
ADD A,Rn 28~2F 寄存器加到A
ADD A,dircet 25 dircet 直接位元組加到A
ADD A,@Ri 26~27 間接RAM加到A
ADD A,#data 24data 立即數加到A
ADD A,Rn 38~3F 寄存器和進位位加到A
ADD A,dircet 35dircet 直接位元組和進位位加到A
ADD A,@Ri 36~37 間接位元組和進位位加到A
ADD A,data 34 data 立即數和進位位加到A
ADD A,Rn 98~9F A減去寄存器和進位位
ADD A,dircet 95 dircet A減去直接位元組和進位位
ADD A,@Ri 36~37 間接RAM和進位位加到A
ADD A,data 34 data 立即數和進位位加到A
SUBB A,Rn 98~9F A減去寄存器和進位位
SUBB A,dircet 95 dircet A減去直接位元組和進位位
SUBB A,@Ri 96~97 A減去間接RAM和進位位
SUBB A,#data 94 data A減去立即數和進位位
INC A 04 A加1
INC Rn 08~0F 寄存器加1
INC dircet 05 dircet 直接位元組加1
INC @Ri 06~07 間接RAM加1
DEC A 14 A減1
DEC Rn 18~1F 寄存器減1
DEC dircet 15 dircet 直接位元組減1
DEC @Ri 16~17 間接RAM減1
INC DPTR A3 數據指針加1
MUL AB A4 A乘以B
DIV AB 84 A除以B
DA A D4 A的十進制加法調整

邏輯操作
ANL A,Rn 58~5F 寄存器「與」到A
ANL A,dircet 55 dircet 直接位元組「與」到A
ANL A,@Ri 56~57 間接RAm「與」到A
ANL A,#data 54 data 立即數「與」到A
ANL dircet A 52 dircet A「與」到直接位元組
ANL dircet,#data 53 dircet data 立即數「與」到直接位元組
ORL A,Rn 48~4F 寄存器「或」到A
ORL A,dircet 45 dircet 直接位元組「或」到A
ORL A,@Ri 46~47 間接RAM「或」到A
ORL A,#data 44 data 立即數「或」到A
ORL dircet,A 42 dircet A「或」到直接位元組
ORL dircet,#data 43 dircet data 立即數「或」到直接位元組
XRL A,Rn 68~6F 寄存器「異或」到A
XRL A,dircet 65 dircet 直接位元組「異或」到A
XRL A,@Ri 66~67 間接RAM「異或」到A
XRL A,#data 64 data 立即數「異或」到A
XRL dircet A 62 dircet A「異或」到直接位元組
XRL dircet,#data 63 dircet data 立即數「異或」到直接位元組
CLR A E4 清零
CPL A F4 A取反
RL A 23 A左環移
RLC A 33 A通過進位左環移
RR A 03 A右環移
RRC A 13 A通過進位右環移

控製程序轉移
ACALL addr 11 *1 addr(a7~a0) 絕對子程序調用
LCALL addr 16 12 addr(15~8) 長子程序調用
addr(7~0)
RET 22 子程序調用返回
RETI addr 11 32 中斷調用返回
AJMP addr 11 △1 addr(a7~a6) 絕對轉移
LJMP addr 16 02addr(15~8) 長轉移
addr(7~0)
SJMP rel 80 rel 短轉移,相對轉移
JMP @A+DPTR 73 相對於DPTR間接轉移
JZ rel 60 rel A為零轉移
JNZ rel 70 rel A為零轉移
CJNE A,dircet,rel B5 dircet rel 直接位元組與A比較,不等則轉移
CJNE A,#data,rel B4 data rel 立即數與A比較,不等則轉移
CJNE A,Rn,#data,rel B8~BF data rel 立即數與寄存器比較,不等則轉移
CJNE @Ri,#data,rel B6~B7 data rel 立即數與間接RAM比較,不等則轉移
DJNZ Rn,rel D8~DF rel 寄存器減1,不為零則轉移
DJNZ dircet,rel B5 dircet rel 直接位元組減1,不為零則轉移
NOP 00 空操作
*=a10a9a8l
△=a10a9a80

布爾變數操作
CLR C C3 清零進位
CLR bit C2 清零直接位
SETB C D3 置位進位
SETB bit D2 置位直接位
CPL C B3 進位取反
CPL bit B2 直接位取反
ANL C,bit 82 dit 直接數「與」到進位
ANL C,/bit B0 直接位的反「與」到進位
ORL C,bit 72 bit 直接位「或」到進位
ORL C,/bit A0 bit 直接位的反「或」到進位
MOV C,bit A2 bit 直接位送進位
MOV bit,C 92 bit 進位送直接位
JC rel 40 rel 進位位為1轉移
JNC rel 50 rel 進位位為0轉移
JB bit,rel 20 bit rel 直接位為1相對轉移
JNB bit,rel 30 bit rel 直接位為0相對轉移
JBC bit,rel 10 bit rel 直接位為1相對轉移,然後清零該位

[1]. 循環移位指令(4條)
RL A ;累加器A中的內容左移一位
RR A ;累加器A中的內容右移一位
RLC A ;累加器A中的內容連同進位位CY左移一位
RRC A ;累加器A中的內容連同進位位CY右移一位

[2]. 累加器半位元組交換指令(1條)
SWAP A ; 累加器中的內容高低半位元組互換

[3]. 求反指令(1條)
CPL A ; 累加器中的內容按位取反

[4]. 清零指令(1條)
CLR A ; 0→(A),累加器中的內容清0

[5]. 邏輯與操作指令(6條)
ANL A,data ;累加器A中的內容和直接地址單元中的內容執行與邏輯操作。結果存在寄存器A中。
ANL data,#data ;直接地址單元中的內容和立即數執行與邏輯操作。結果存在直接地址單元中。
ANL A,#data ;累加器A的內容和立即數執行與邏輯操作。結果存在累加器A中。
ANL A,Rn ;累加器A的內容和寄存器Rn中的內容執行與邏輯操作。結果存在累加器A中。
ANL data,A ;直接地址單元中的內容和累加器A的內容執行與邏輯操作。結果存在直接地址單元中。
ANL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行與邏輯操作。結果存在累加器A中。

[6]. 邏輯或操作指令(6條)
這組指令的作用是將兩個單元中的內容執行邏輯或操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。

ORL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯或操作。結果存在寄存器A中。
ORL data,#data ;直接地址單元中的內容和立即數執行邏輯或操作。結果存在直接地址單元中。
ORL A,#data ;累加器A的內容和立即數執行邏輯或操作。結果存在累加器A中。
ORL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯或操作。結果存在累加器A中。
ORL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯或操作。結果存在直接地址單元中。
ORL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯或操作。結果存在累加器A中。

[7]. 邏輯異或操作指令(6條)
XRL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯異或操作。結果存在寄存器A中。
XRL data,#data ;直接地址單元中的內容和立即數執行邏輯異或操作。結果存在直接地址單元中。
XRL A,#data ;累加器A的內容和立即數執行邏輯異或操作。結果存在累加器A中。
XRL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯異或操作。結果存在累加器A中。

XRL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯異或操作。結果存在直接地址單元中。
XRL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯異或操作。結果存在累加器A中

控制轉移類指令分析

[1]. 無條件轉移指令(4條)
LJMP addr16 ;addr16→(PC),給程序計數器賦予新值(16位地址)
AJMP addr11 ;(PC)+2→(PC),addr11→(PC10-0)程序計數器賦予新值(11位地址),(PC15-11)不改變
SJMP rel ;(PC)+ 2 + rel→(PC)當前程序計數器先加上2再加上偏移量給程序計數器賦予新值
JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址單元的值加上數據指針的值給程序計數器賦予新值

[2]. 條件轉移指令(8條)
JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的內容為0,則轉移到偏移量所指向的地址,否則程序往下執行
JNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的內容不為0,則轉移到偏移量所指向的地址,否則程序往下執行

CJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的內容不等於直接地址單元的內容,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址單元中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行

布爾變數操作指令分析

[1]. 位傳送指令(2條)
MOV C,bit ;bit→CY,某位數據送CY
MOV bit,C ;CY→bit,CY數據送某位

[2]. 位置位復位指令(4條)
CLR C ; 0→CY,清CY
CLR bit ; 0→bit,清某一位
SETB C ; 1→CY,置位CY
SETB bit ; 1→bit,置位某一位

[3]. 位運算指令(6條)
ANL C,bit ;(CY)∧(bit)→CY
ANL C,/bit ;(CY)∧( )→CY
ORL C,bit ;(CY)∨(bit)→CY
ORL C,/bit ;(CY)∧()→CY
CPL C ;()→CY
CPL bit ;()→bir

[4]. 位控制轉移指令(5)
JC rel ; (CY)=1轉移,(PC)+2+rel→PC,否則程序往下執行,(PC)+2→PC。
JNC rel ; (CY)=0轉移,(PC)+2+rel→PC,否則程序往下執行,(PC)+2→PC。
JB bit, rel ; 位狀態為1轉移。
JNB bit, rel ; 位狀態為0轉移。
JBC bit, rel ; 位狀態為1轉移,並使該位清「0」。

C. 單片機匯編語言關於subb指令的

如圖所示。A的結果是EEh,因為SUBB是帶進位位的減法,剛開始C被置1,所以12h減去23h再減1得到EEh,也就是-12h。

D. 匯編語言常用指令

單片機匯編語言匯編錯誤原因分析

匯編語言的指令格式,目前有兩種不同的標准:Windows下的匯編語言基本上都遵循Intel風格的語法,比如:MASM、NASM;而Unix/Linux下的匯編語言基本上都遵循AT&T風格的語法;

一、匯編語言語句的通用格式

[名稱[:]] 指令碼 [第一操作數][,第二操作數] ;注釋

匯編語言的指令碼的操作數的個數可以是0、1、2個;當操作數的個數為2的時候,語句還有兩種不同的格式:

Windows下Intel風格的匯編語言語句格式為:

[名稱[:]] 指令碼 目的操作數DST,源操作數SRC ;注釋

Unix/Linux下AT&T風格的匯編語言語句格式為:

[名稱[:]] 指令碼 源操作數SRC,目的操作數DST ;注釋

例如: CYCLE: ADD AX,02H ;(AX)匯編語言語句格式中的"名稱"並不是所有語句都必需的,但是,如果語句中帶有"名稱",那麼,大多數情況下,"名稱"都表示的是內存中某一存儲單元的地址,也就是"名稱"後面各項在內存中存放的第一個存儲單元的地址(包括該"名稱"所在段的段地址和段內偏移地址);比如上面的指令中,CYCLE就是該語句的名稱,CYCLE表示的就是其後面的機器指令碼在內存中存放的第一個地址;"名稱"與指令碼之間的分隔符可以是冒號":",也可以是空格字元" ";當以冒號分割時,該名稱代表的是一個標號;當以空格分割時,該名稱代表的可能是標號,也可能是變數;當指令碼有多個操作數的時候,相鄰兩個操作數之間要用逗號","分割;指令碼與操作數之間必須以空格分割;匯編語言語句的注釋必須以分號";"開頭;

二、組成語句的元素

1、常數:

匯編語言中的常數有整數、字元串;二進制、八進制、十進制、十六進制;匯編語言採用不同的後綴區分:

B:二進制數; O:八進制數; D:十進制數; H:十六進制數;

當一個數值後面沒有後綴的時候,默認為十進制數;

字元串常數是用一對單引號('')括起來的一串字元;

2、表達式:

由操作數和操作符組成;

算數運算操作符: +、-、*、/、MOD,等;取模運算MOD是取兩數相除的余數;

邏輯運算操作符: AND(邏輯與)、OR(邏輯或)、NOT(邏輯非)、XOR(邏輯異或);

注意:邏輯運算符同時又可以是邏輯運算指令的指令碼,只有當它們出現在指令的操作數部分時,才是操作符;例如:

ADD AL,0CH ADD 0FH ;第一個ADD是指令碼,第二個ADD是操作符;

關系運算操作符: EQ(相等)、NE(不等)、LT(小於)、GT(大於)、LE(小於等於)、GE(大於等於);

匯編語言中的表達式不能單獨構成語句,只能是語句的組成部分;

注意:語句中表達式的求值不是在語句執行時完成的,而是在對源程序進行匯編鏈接時完成的.所以,語句中各表達式的值必須在匯編或鏈接時就是確定的,也就是說,表達式中各標識符的值在匯編或鏈接時就應該是確定的;

3、標號:

標號是由標識符表示的指令的名稱,用於指示對應指令的位置(地址);

標號具有三個屬性:段地址、偏移地址和類型;

標號的段地址和偏移地址屬性是指該標號所對應的指令所在段的段地址和段內偏移地址;

標號的類型有兩種:NEAR和FAR;標號定義成NEAR類型,表示該標號在段內使用,而定義成FAR類型則表示該標號可以在段間使用;

標號的定義:在指令碼前面加上標識符和冒號":";

例如:START: PUSH DS

這條語句裡面,START就是我們定義的標號,它代表指令PUSH的地址,所以,標號可以作為程序轉移指令的操作數(即:要轉向的地址);標號還可以採用偽指令來定義;例如:用LABEL偽指令和過程定義偽指令來定義;

4、變數:

與高級語言一樣,並不是所有的操作數都是常數,匯編語言也有自己的變數,變數的值在程序運行期間是可以被改變的;

A.定義變數:匯編語言中,變數的定義是通過偽指令來完成的;定義變數的偽指令格式如下:

變數名 DB 表達式 ;定義位元組變數,又稱單位元組變數(1個連續位元組),DB-->BYTE

變數名 DW 表達式 ;定義字變數,又稱雙位元組變數(2個連續位元組),DW-->WORD

變數名 DD 表達式 ;定義雙字變數,又稱四位元組變數(4個連續位元組),DD-->DWORD

變數名 DF 表達式 ;定義六位元組變數,又稱六位元組變數(6個連續位元組),DF-->FWORD

變數名 DQ 表達式 ;定義長字變數,又稱八位元組變數(8個連續位元組),DQ-->QWORD

變數名 DT 表達式 ;定義十位元組變數(10個連續位元組),DT-->TBYTE;

其中,變數名是一個合法的標識符,變數名後面不能加冒號":",只能用空格;變數名不是必要的,可有可無;變數的類型由關鍵字DB、DW、DD、DQ、DT來定義;

變數定義語句中的"表達式"是用於對變數進行初始化的,可有一下幾種情況:

(1).一個或多個常數或表達式;當為多個常數或表達式時,期間要用逗號隔開;如DATA1--DATA4;

(2).帶單引號的字元串;

對於位元組型(DB)變數,每個變數的大小為1個位元組,每個變數的值不能超過1個字元,每個位元組內存入一個字元的ASCII碼值,整個字元串可以在同一對單引號內給出,這相當於是定義了一個字元數組,如DATA5;

對於字類型(DW)變數,每個變數的大小為2個位元組,每個變數的值不能超過2個字元,若為2個字元時,同樣遵循高位存入高位元組,低位存入低位元組的規則;若為1個字元,則該字元的ASCII碼值存入到低位元組,高位元組為00,如DATA6;

對於雙字類型(DD)變數,每個變數的大小為4個位元組,每個變數的值不能超過2個字元,若為2個字元,同樣遵循高位存入高位元組,低位存入低位元組的規則;但是2個字元的值被存入到雙字變數的最低2個位元組中,1個字元的值被存入到雙字變數的最低1個位元組中;

對於長字類型(DQ)變數,每個變數的大小為8個位元組,每個變數的值不能超過2個字元,若為2個字元,同樣遵循高位存入高位元組,低位存入低位元組的規則;但是2個字元的值被存入到長字變數的最低2個位元組中,1個字元的值被存入到長字變數的最低1個位元組中;

(3).一個問號"?",表示該變數的值不確定,即:該變數所表示的內存單元中的內容是不確定的,或者說是,當表達式為問號時,變數所對應的內存區中並沒有存入新的值,而只是預留出了相應的存儲空間;如DATA7、DATA8

(4).重復方式;此時的格式為: 重復次數 DUP(表達式);重復方式指出表達式的值可以重復地存儲到變數對應的內存區中,重復的次數由偽指令給出,相當於定義數組;如DATA9、DATA10

定義變數的例子:

DATA1 DB 20H ;1位元組變數

DATA2 DW 0204H,1000H ;2位元組變數

DATA3 DB (-1*3),(15/3) ;1位元組變數

DATA4 DD 123456H ;4位元組變數

DATA5 DB '0123' ;字元串變數,相當於一個字元數組

DATA6 DW 'AB','C','D' ;字元串變數,相當於一個字元串數組;

DATA7 DB ? ;1位元組變數,未初始化

DATA8 DD ? ;4位元組變數,未初始化

DATA9 DB 5 DUP(0) ;1位元組變數,用5個0初始化,相當於是一個具有5個DB型元素的數組

DATA10 DW 3 DUP(?) ;2位元組變數,未初始化,相當於是一個具有3個DW型元素的數組

變數定義語句中偽指令的功能是在變數名所對應的地址開始的內存區依次存入表達式中的各項值,表達式中的每項值所佔用內存位元組數與變數的類型對應;

總結:一個變數的變數名實際上就代表了該變數所對應的內存區在內存段中的有效地址(偏移地址);高地址是指地址值相對較大,低地址是指地址值相對較小,高地址與低地址是相對而言的;

5、變數的屬性:

(1).屬性介紹

一個變數具有一下屬性:

A.段地址(SEG):變數所在段的段地址;

B.偏移地址(OFFSET):變數所在段內的偏移地址;

C.類型(TYPE):變數的類型定義了每個變數所佔用的內存位元組數,對於DB、DW、DD、DQ、DT類型定義的變數所佔用的內存位元組數分別是1、2、4、8、10;通常又將DB、DW、DD類型所定義的變數分別成為BYTE類型、WORD類型、DWORD類型變數;

常用標識符的類型值列表:

標識符種類 位元組變數 字變數 雙字變數 近標號NEAR 遠標號FAR

TYPE的值 1 2 4 -1 -2

D.長度(LENGTH):變數定義時,一個變數名所定義的變數個數;在含有DUP操作符的變數定義中,變數名所定義的變數個數為定義格式中的重復次數;在其它各種變數定義中,每個變數名所定義的變數個數均為1個;

E.大小(SIZE):變數定義語句中,分配給同一個變數名的所有變數的總的位元組數,其值為該變數的類型與長度的成績;

其中,段地址、偏移地址和類型屬性是變數的主屬性,而長度和大小屬性是變數的輔助屬性;

(2).屬性操作符:

操作符 表達式 含義

SEG SEG 變數名或標號 取出變數名或標號所在段的段地址

OFFSET OFFSET 變數名或標號 取出變數名或標號所在段內的偏移地址

TYPE TYPE 變數名或標號 取出變數名或標號的類型(變數所佔用的位元組數)

LENGTH LENGTH 變數名 取出變數的長度

SIZE SIZE 變數名 取出變數的大小

這些操作符不能單獨構成語句,只能作為表達式的組成部分,並且表達式的求值也是在匯編過程中完成的;

6.強制類型轉換操作符PTR

格式:數據類型 PTR 地址表達式

格式中的"數據類型"可以是BYTE、WORD、DWORD、NEAR、FAR;前三種類型是變數的類型,後兩種類型是標號的類型;格式中的表達式可以是變數、標號、其它地址表達式;

PTR操作符的功能是用來重新定義已定義的變數或標號的類型,其作用域只在當前語句中; 例如:

DATA1 DW 02H

MOV BYTE PTR DATA1,AL

這條指令中,是把DATA1的類型轉換為BYTE類型,然後把AL中的內容存放到DATA1的最低一個位元組中;作用域只在這條MOV語句中,過了這條語句,DATA1仍然是DW類型,即:DATA1原來的類型並沒有被修改;

E. 求89S52單片機匯編指令表

51單片機匯編指令表
8051
INSTRUCTION
SET
1.Arithmetic
operations:
指令用法
位元組數
機器周期數
ADD
A,@Ri
1
1
ADD
A,Rn
1
1
ADD
A,direct
2
1
ADD
A,#data
2
1
ADDC
A,@Ri
1
1
ADDC
A,Rn
1
1
ADDC
A,direct
2
1
ADDC
A,#data
2
1
SUBB
A,@Ri
1
1
SUBB
A,Rn
1
1
SUBB
A,direct
2
1
SUBB
A,#data
2
1
INC
A
1
1
INC
@Ri
1
1
INC
Rn
1
1
INC
DPTR
1
1
INC
direct
2
1
INC
direct
2
1
DEC
A
1
1
DEC
@Ri
1
1
DEC
Rn
1
1
DEC
direct
2
1
MUL
AB
1
4
DIV
AB
1
4
DA
A
1
1
2.Logical
opreations:
ANL
A,@Ri
1
1
XRL
A,@Ri
1
1
ANL
A,Rn
1
1
XRL
A,Rn
1
1
ANL
A,direct
2
1
XRL
A,direct
2
1
ANL
A,#data
2
1
XRL
A,#data
2
1
ANL
direct,A
2
1
XRL
direct,A
2
1
ANL
direct,#data
3
2
XRL
direct,#data
3
2
ORL
A,@Ri
1
1
CLR
A
1
1
ORL
A,Rn
1
1
CPL
A
1
1
ORL
A,direct
2
1
RL
A
1
1
ORL
A,#data
2
1
RLC
A
1
1
ORL
direct,A
2
1
RR
A
1
1
ORL
direct,#data
3
2
RRC
A
1
1
SWAP
A
1
1
3.Data
transfer:
Mnemonic
Byte
Cyc
MOV
A,@Ri
1
1
MOV
DPTR,#data16
3
2
MOV
A,Rn
1
1
MOVC
A,@A+DPTR
1
2
MOV
A,direct
2
1
MOVC
A,@A+PC
1
2
MOV
A,#data
2
1
MOVX
A,@Ri
1
2
MOV
@Ri,A
1
1
MOVX
A,@DPTR
1
2
MOV
@Ri,direct
2
2
MOVX
@Ri,A
1
2
MOV
@Ri,#data
2
1
MOVX
@DPTR,A
1
2
MOV
Rn,A
1
1
PUSH
direct
2
2
MOV
Rn,direct
2
2
POP
direct
2
2
MOV
Rn,#data
2
1
XCH
A,@Ri
1
1
MOV
direct,A
2
1
XCH
A,Rn
1
1
MOV
direct,@Ri
2
2
XCH
A,direct
2
1
MOV
direct,Rn
2
2
XCHD
A,@Ri
1
1
MOV
direct,direct
3
2
MOV
direct,#data
3
2
4.Boolean
variable
manipulation:
Mnemonic
Byte
Cyc
CLR
C
1
1
ANL
C,bit
2
2
SETB
C
1
1
ANL
C,/bit
2
2
CPL
C
1
1
ORL
C,bit
2
2
CLR
bit
2
1
ORL
C,/bit
2
2
SETB
bit
2
1
MOV
C,bit
2
1
CPL
bit
2
1
MOV
bit,C
2
2
5.Program
and
machine
control:
Mnemonic
Byte
Cyc
NOP
1
1
JZ
rel
2
2
RET
1
2
JNZ
rel
2
2
RETI
1
2
JC
rel
2
2
ACALL
addr11
2
2
JNC
rel
2
2
AJMP
addr11
2
2
JB
bit,rel
3
2
LCALL
addr16
3
2
JNB
bit,rel
3
2
LJMP
addr16
3
2
JBC
bit,rel
3
2
SJMP
rel
2
2
CJNE
A,direct,rel
3
2
JMP
@A+DPTR
1
2
CJNE
A,#data,rel
3
2
DJNZ
Rn,rel
2
2
CJNE
@Ri,#data,rel
3
2
DJNZ
direct,rel
3
2
CJNE
Rn,#data,rel3
2

F. 單片機(匯編語言)指令

MOV PC,#2222H
根本就沒有這條指令,這不是錯不錯的問題,是無中生有。匯編指令不是憑你自己的想像可隨便寫的。PC是程序計數器,是不可訪問的,更沒有MOV指令給它賦值。

G. 單片機匯編指令MOVC A,@A+DPTR

51單片機的指令系統中,是沒有movc
a,@r0+dptr的,查表指令只有兩條:
1、movc
a,@a+dptr
2、movc
a,@a+pc

H. 關於51單片機匯編送數的指令

可以這樣寫的沒有問題,只要編譯不報錯都是行的。
大家這樣寫只不過是沿用習慣,實際你這樣寫的指令周期和他們的寫法是相同的,都是兩個。
另外有時主要是該數據可能會在接下來的A中操作,所以這樣簡化直觀。
但有時又必須要傳到A或其它寄存器中,比如比較埠狀態:cjne p1,#5,dis1 ;像這樣就會報錯,要改為:mov a,p1 cjne a,#5,dis1 總的來講keil還是很智能的,怎麼簡便怎麼寫,另外用周期少的方式寫效率高。特別是在做乘除法。

I. 求單片機總匯編語言指令表、____

編號 指令名稱 指令助記符 指令說明
數據傳送類指令
1 一般傳送 MOV A, #data 將立即數#data送累加器A
2 MOV direct, #data 將立即數#data送片內RAM direct地址單元內
3 Mov Rn, #data 將立即數#data送寄存器Rn
4 Mov @Ri, #data 寄存器Ri內為RAM地址,將立即數#data送該地址單元內
5 Mov direct2, direct1 將direct1地址單元的數據送 direct2地址單元內
6 Mov direct, rn 將Rn的數據送 direct地址單元內
7 Mov Rn, direct 將direct地址單元內的數據送Rn寄存器
8 Mov direct, @Ri 寄存器Ri內為RAM地址,將該地址單元內的數據送direct地址單元內
9 Mov @Ri, direct 寄存器Ri內為RAM地址,將direct地址單元內的數據送該地址單元內
10 Mov A, Rn 將寄存器Rn內的數據送累加器A
11 Mov Rn, A 將累加器A內的數據送寄存器Rn
12 Mov A, direct 將direct地址單元內的數據送累加器A
13 Mov direct, A 將累加器A內的數據送direct地址單元內
14 Mov A, @Ri 寄存器Ri內為RAM地址,將該地址單元內的數據送累加器A
15 Mov @Ri , A 寄存器Ri內為RAM地址,將累加器A的數據送該地址單元內
16 目的地址傳送 Mov DPTR, #data16 將16位立即數送數據指針DPTR寄存器
17 位元組交換 SWAP A 累加器A高低4位數據交換
18 XCH A, Rn 將累加器A數據和寄存器Rn內的數據交換
19 XCH A, direct 將累加器A數據和direct地址單元內的數據交換
20 XCH A, @Ri 寄存器Ri內為RAM地址,將該地址單元內的數據與累加器A的數據交換
21 XCHD A, @Ri 寄存器Ri內為RAM地址,將該地址單元內的數據低4位與的低4位交換
22 與外部RAM傳送 MOVX @DPTR, A 將累加器A的數據送數據指針DPTR寄存器所指外部RAM地址單元內
23 MOVX A , @DPTR 將DPTR寄存器所指外部RAM地址單元內的數據送累加器A
24 MOVX A, @Ri 寄存器Ri內為片外RAM地址,將該地址單元內的數據送累加器A
25 MOVX @Ri, A 寄存器Ri內為片外RAM地址,將該地址單元內的數據送累加器A
26 與ROM傳送 MOVC A, @A+DPTR A+DPTR構成ROM地址,將該地址內的數據送累加器A內
27 MOVC A, @A+PC A+PC構成ROM地址,將該地址內的數據送累加器A內
28 棧操作 PUSH direct 堆棧指針SP自加1後,將direct地址單元的數據壓進堆棧,
29 POP direct 堆棧的數據送direct地址單元中,後堆棧指針減1,
算術運算指令
30 加法指令 ADD A, Rn 將寄存器Rn與累加器A的數據相加後,結果保存到累加器A
31 ADD A, direct 將direct地址單元內的數據與累加器A的數據相加後結果保存到累加器A
32 ADD A, @Ri 寄存器Ri內位地址,將該地址單元內的數據與累加器A的數據相加後結果保存到累加器A
33 ADD A, #data 將立即數與累加器A的數據相加後結果保存到累加器A
34 帶進位加法 ADDC A, Rn 將寄存器Rn與累加器A的數據相加,再加上進位標志內的值後,結果保存到累加器A
35 ADDC A, direct 將direct地址單元內的數據與累加器A的數據相加,再加上進位標志內的值後,結果保存到累加器A
36 ADDC A, @Ri 寄存器Ri內為RAM地址,將該地址單元內的數據與累加器A的數據相加,再加上進位標志內的值後,結果保存到累加器A
37 ADDC A, #data 將立即數與累加器A的數據相加,再加上進位標志內的值後結果保存到累加器A
38 帶借位減法 SUBB A, Rn 將與累加器A的數據減去寄存器Rn的數據,再減去進位標志內的值,結果保存到累加器A
39 SUBB A, direct 將與累加器A的數據減去direct地址單元內的數據,再減去進位標志內的值,結果保存到累加器A
40 SUBB A, @Ri 寄存器Ri內為RAM地址,將累加器A的數據減去該地址單元內的數據,再減去進位標志內的值後,結果保存到累加器A
41 SUBB A, #data 將累加器A的數據減去立即數,再減去進位標志內的值後,結果保存到累加器A
42 加1指令 INC A 累加器A的值自加1
43 INC Rn 寄存器Rn的值自加1
44 INC direct direct地址單元內值自加1
45 INC @Ri 寄存器Ri內為RAM地址,該地址單元內的值自加1
46 INC DPTR 數據指針寄存器DPTR內的值自加1
47 減1指令 DEC A 累加器A的值自減1
48 DEC Rn 寄存器Rn的值自減1
49 DEC direct direct地址單元內的值自減1
50 DEC @Ri 寄存器Ri內為RAM地址,該地址單元內的值自減1
51 乘法 MUL AB 累加器A與寄存器B內的值相乘,乘積的高8位保存在B寄存器,低8位保存在累加器A中
52 除法 DIV AB 累加器A的值除以寄存器B的值,商保存在累加器A中,余數保存在B寄存器
53 二-十進制調整 DA A 對累加器A的結果進行十進制調整
邏輯運算指令
54 邏輯與 ANL A, Rn 將累加器A的值和寄存器Rn的值進行與操作,結果保存到累加器A中
55 ANL A, direct 將累加器A的值和direct地址單元內的值進行與操作,結果保存到累加器A中
56 ANL A, @Ri 寄存器Ri內為RAM地址,將累加器A的值和該地址單元內的值進行與操作,結果保存到累加器A中
57 ANL A, #data 將累加器A的值和立即數進行與操作,結果保存到累加器A中
58 ANL direct, A 將累加器A的值和direct地址單元內的值進行與操作,結果保存到direct地址單元內
59 ANL direct, #data 將立即數和direct地址單元內的值進行與操作,結果保存到direct地址單元內
60 邏輯或 ORL A, Rn 將累加器A的值和寄存器Rn的值進行或操作,結果保存到累加器A中
61 ORL A, direct 將累加器A的值和direct地址單元內的值進行或操作,結果保存到累加器A中
62 ORL A, @Ri 寄存器Ri內為RAM地址,將累加器A的值和該地址單元內的值進行或操作,結果保存到累加器A中
63 ORL A, #data 將累加器A的值和立即數進行或操作,結果保存到累加器A中
64 ORL direct, A 將累加器A的值和direct地址單元內的值進行或操作,結果保存到direct地址單元內
65 ORL direct, #data 將立即數和direct地址單元內的值進行或操作,結果保存到direct地址單元內
66 邏輯異或 XRL A, Rn 將累加器A的值和寄存器Rn的值進行異或操作,結果保存到累加器A中
67 XRL A, direct 將累加器A的值和direct地址單元內的值進行異或操作,結果保存到累加器A中
68 XRL A, @Ri 寄存器Ri內為RAM地址,將累加器A的值和該地址單元內的值進行異或操作,結果保存到累加器A中
69 XRL A, #data 將累加器A的值和立即數進行異或操作,結果保存到累加器A中
70 XRL direct, A 將累加器A的值和direct地址單元內的值進行異或操作,結果保存到direct地址單元內
71 XRL direct, #data 將立即數和direct地址單元內的值進行異或操作,結果保存到direct地址單元內
72 按位取反 CPL A 累加器A的值按位取反
73 累加器清零 CLR A 累加器A清0
74 邏輯右移 RR A 累加器A的值循環右移1位
75 邏輯左移 RL A 累加器A的值循環左移1位
76 帶進位右移 RRC A 累加器A的值帶進位循環右移1位
77 帶進位左移 RLC A 累加器A的值帶進位循環左移1位
控制轉移指令
78 無條件轉移 SJMP rel rel為地址偏移量,PC加2後的地址加上rel作為目標地址,程序跳到目標地址繼續運行
79 AJMP addr11(a10- a0) addr11為11位地址,PC加2後的地址高5位與指令中的低11位地址構成目標地址,程序跳到目標地址繼續運行
80 LJMP addr16 將addr16的16位地址送程序計數器PC,使機器執行下一條指令時無條件轉移到addr16處執行程序
81 JMP @A+DPTR 目標地址的基地址放在DPTR中,目標地址對基地址的偏移量放在累加器A中,它們相加構成目標地址
82 條件轉移 JZ rel If(累加器A=0)則PC加2再加上rel作為目標地址
83 JNZ rel If(累加器A!=0)則PC加2再加上rel作為目標地址
84 CJNE A, direct, rel If(累加器A!= direct地址單元的值)則PC加2再加上rel作為目標地址
85 CJNE A, #data, rel If(累加器A!= 立即數)則PC加2再加上rel作為目標地址
86 CJNE Rn, #data, rel If(寄存器Rn的值!= 立即數)則PC加2再加上rel作為目標地址
87 CJNE @Ri, #data, rel 寄存器Ri內為RAM地址,If(該地址單元的值!= 立即數)則PC加2再加上rel作為目標地址
88 循環轉移 DJNZ Rn, rel 寄存器Rn的值減1後,If(寄存器Rn的值!=0)則PC加2再加上rel作為目標地址
89 DJNZ direct, rel Direct地址單元的值減1後,If(該值!=0)則PC加3再加上rel作為目標地址
90 布爾條件轉移 JC rel If(CY=1)則PC加2再加上rel作為目標地址
91 JNC rel If(CY=0)則PC加2再加上rel作為目標地址
92 JB bit, rel If(bit位=1)則PC加3再加上rel作為目標地址
93 JNB bit, rel If(bit位=0)則PC加3再加上rel作為目標地址
94 JBC bit, rel If(bit位=1)則PC加3再加上rel作為目標地址,且bit位清0
95 調用指令 ACALL addr11 addr11為11位地址,PC加2後的地址PUSH進堆棧,再將PC的地址高5位與指令中的低11位地址構成目標地址,程序跳到目標地址繼續運行
96 LCALL addr16 PC加3後的地址PUSH進堆棧,再將16位地址送PC作為目標地址,程序跳到目標地址繼續運行
97 返回指令 RET 子程序返回指令,把堆棧中的地址恢復到PC中使程序回到調用處
98 RETI 中斷程序返回指令,把堆棧中的地址恢復到PC中使程序回到調用處
99 空操作 NOP 空操作
位操作指令
100 布爾傳送 MOV C, bit 將bit位地址中的值送PSW中的進位標志位CY
101 MOV bit, C 將PSW中的進位標志位CY的值送bit位地址中
102 位清0 CLR C 將進位標志位CY清0
103 位清0 CLR bit 將bit位地址內清0
104 位置1 SETB C 將進位標志位CY置1
105 SETB bit 將bit位地址內置1
106 位與 ANL C, bit 將Cy和bit位地址中的值進行與操作後,結果送Cy
107 ANL C, /bit bit位地址中的值取反後再與Cy進行與操作,結構送Cy
108 位或 ORL C, bit 將Cy和bit位地址中的值進行或操作後,結果送Cy
109 ORL C, /bit bit位地址中的值取反後再與Cy進行或操作,結構送Cy
110 位取反 CPL C 將Cy取反
111 CPL bit 將bit位地址的值取反

說明:
1)Ri, Rn指當前工作寄存器,i,n = 0 – 7,當前工作寄存器由程序狀態字寄存器PSW的2個位RS1, RS0決定

閱讀全文

與單片機匯編指令表相關的資料

熱點內容
java合並鏈表 瀏覽:499
pic單片機編譯器 瀏覽:801
麗水四軸加工中心編程 瀏覽:689
國產系統怎麼解壓 瀏覽:552
戰雙程序員 瀏覽:483
him觸摸編程軟體 瀏覽:931
植物大戰僵屍存檔怎麼轉移安卓 瀏覽:852
java棧的元素 瀏覽:737
程序員與籃球事件 瀏覽:675
app反編譯不完整 瀏覽:788
電腦上的文件夾怎麼調整 瀏覽:7
伺服器無響應是什麼原因呀 瀏覽:984
wd文檔里的app怎麼製作 瀏覽:513
電腦里的文件夾沒有了一般能恢復嗎 瀏覽:418
哪裡有配加密鑰匙的 瀏覽:210
伺服器開不了機怎麼把數據弄出來 瀏覽:958
gif動態圖片怎麼壓縮 瀏覽:521
黑猴子棒球壓縮文件解壓密碼 瀏覽:631
如何讓app適應不同的手機屏幕大小 瀏覽:10
蘋果手機如何給安卓手機分享軟體 瀏覽:761