日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

51单片机汇编指令

發(fā)布時間:2025/3/11 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51单片机汇编指令 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

注: Rn與Ri中n=0 ~ 7,i=0 ~ 1,另外Cy是進位位,同時也是狀態(tài)位,標志位

數(shù)據(jù)傳送類指令

內(nèi)部數(shù)據(jù)傳送指令

助記符作用尋址方式機器周期字節(jié)數(shù)
MOV A,Rn將Rn的內(nèi)容傳送給A寄存器11
MOV A,directdirect是一個地址單元,將該地址的內(nèi)容傳送給A,例如:MOV A,50H直接12
MOV A @RiRi中存儲了一個地址,將該地址的內(nèi)容傳送給A,例如:MOV A ,@R0寄存器間接11
MOV A #data將data傳送到A,例如:MOV A,#00H立即數(shù)12
MOV Rn,A將A的內(nèi)容傳送到Rn中寄存器11
MOV Rn,directdirect是一個地址單元,將該地址的內(nèi)容傳送給Rn,例如:MOV R3,50H直接12
MOV Rn,#data將data傳送到Rn,例如:MOV R3,#00H立即數(shù)12
MOV direct,A將A的內(nèi)容傳送到direct這個地址中,例如:MOV 50H,A寄存器12
MOV direct,Rn將Rn中的內(nèi)容傳送到direct這個地址中寄存器12
MOV direct2,direct1將diret1這個地址中的內(nèi)容傳送到direct2這個地址中直接23
MOV direct,@RiRi中存儲的是一個地址,將這個地址的內(nèi)容傳送給direct這個地址中寄存器間接22
MOV direct,#data將data這個數(shù)據(jù)傳送到direct這個地址中立即數(shù)23
MOV @Ri,ARi中存儲的是一個地址,將A中的內(nèi)容傳送到這個地址中寄存器11
MOV @Ri,directRi存儲的是一個地址,將direct這個地址中的數(shù)據(jù)傳送到Ri存儲的地址中直接22
MOV @Ri,#dataRi存儲的是一個地址,將data傳送到這個地址中,例如:MOV @R0,#00H立即數(shù)12
MOV DPTR,#data16將一個16位data16數(shù)據(jù)傳送到DPTR數(shù)據(jù)指針中,高8位送入DPH,低8位送入DPL立即數(shù)23

外部數(shù)據(jù)傳送指令

助記符作用尋址方式機器周期字節(jié)數(shù)
MOVX A,@DPTRDPTR中存放了一個地址,將該地址的數(shù)據(jù)傳送到A寄存器間接21
MOVX A,@RiRi中存放了一個地址,將該地址的數(shù)據(jù)傳送到A寄存器間接21
MOVX @DPTR,ADPTR中存放了一個地址,將A中的內(nèi)容傳送到該地址中寄存器21
MOVX @Ri,ARi中存放了一個地址,將A中的內(nèi)容傳送到這個地址中寄存器21

交換類指令

助記符作用尋址方式機器周期字節(jié)數(shù)
XCH A,Rn將Rn中的內(nèi)容與A中的內(nèi)容互換寄存器11
XCH A,direct將direct這個地址中的內(nèi)容與A中的內(nèi)容互換直接12
XCH A,@RiRi中存放的是一個地址,將該地址中的內(nèi)容與A中的內(nèi)容互換寄存器間接11
XCHD A,@RiRi中存放了一個地址,將該地址中的數(shù)據(jù)的低4位與A中數(shù)據(jù)的低4位相交換,高4位不變寄存器間接11
SWAP A將A中的數(shù)據(jù)的高4位與低4位相交換寄存器11

查表指令

助記符作用尋址方式機器周期字節(jié)數(shù)
MOVC A,@A+PC從PC指令地址開始偏移A個地址后,將該地址中的數(shù)據(jù)再傳送給A變址尋址21
MOVC A,@A+DPTR從DPTR地址中偏移A個地址后再將該地址中的內(nèi)容傳送給A變址尋址21

堆棧操作指令

助記符作用尋址方式機器周期字節(jié)數(shù)
PUSH direct將direct 這個地址存放的數(shù)據(jù)入棧直接22
POP diret將棧頂數(shù)據(jù)存放在direct這個地址中直接22

注:在使用堆棧時,先要給SP賦初始值,該值是棧底地址,堆棧遵循先進后出的原則,每入棧一個數(shù)據(jù)后,SP會自加1,出棧時SP會自減1,另外也可對A,B寄存器進行入棧出棧操作,但是對于A寄存器,在賦值時可寫A,但在出棧入棧時要寫成ACC

算術(shù)運算類指令

普通加法指令

助記符作用
ADD A,Rn將A中的數(shù)據(jù)與Rn中的數(shù)據(jù)相加并將結(jié)果存放在A中
ADD A,direct將direct這個地址中的數(shù)據(jù)與A中的數(shù)據(jù)相加并將結(jié)果存放在A
ADD A,@RiRi存放了一個地址,將該地址的數(shù)據(jù)與A中的數(shù)據(jù)相加并將結(jié)果存放在A中
ADD A,#data將data與A中的數(shù)據(jù)相加并將結(jié)果存放在A中

帶進位位加法指令

助記符作用
ADDC A,Rn將A中的數(shù)據(jù),Rn中的數(shù)據(jù)和進位位Cy相加并將結(jié)果存放在A中
ADDC A,direct將direct這個地址中的數(shù)據(jù),A中的數(shù)據(jù)和進位位Cy相加并將結(jié)果存放在A中
ADDC A,@RiRi存放了一個地址,將該地址的數(shù)據(jù),A中的數(shù)據(jù)和進位位Cy相加并將結(jié)果存放在A中
ADDC A,#data將data與A中的數(shù)據(jù)相加并將結(jié)果存放在A中

注:ADDC加法指令常用于多字節(jié)加法運算中,例如16位數(shù),其低8位可由ADD指令相加,相加的結(jié)果若大于255將發(fā)生進位,即Cy=1,在相加這兩個數(shù)的高8位時就必須加上這個進位位,故而使用ADDC指令。相加進位位,就比如說 0xff + 0x01,結(jié)果是0x0100,由于51單片機寄存器是8位的,那么相加的結(jié)果只能將低8位存入寄存器中,結(jié)果便是0,但此時發(fā)生了進位,進位位Cy=1。

減法指令

助記符作用
SUBB A,Rn用A中的值減去Rn中的值再減去進位位Cy并將結(jié)果存放在A中
SUBB A,direct用A中的值減去direct這個地址中的值再減去進位位Cy并將結(jié)果存放在A中
SUBB A,@RiRi中存放了一個地址,用A中的值減去這個地址中的值再減去進位位Cy并將結(jié)果存放在A中
SUBB A,#data用A中的值減去data再減去進位位Cy并將結(jié)果存放在A中

注:一般在用減法時先將進位位Cy清零 , CLR C

加1指令

助記符作用
INC AA中的值加1并將結(jié)果存放在A中
INC RnRn中的值加1并將結(jié)果存放在Rn中
INC direct將direct這個地址中的值加1并將結(jié)果存在direct這個地址中
INC @RiRi中存放了一個地址,將該地址中的數(shù)據(jù)加1并將結(jié)果仍存在這個地址中
INC DPTRDPTR指針指向的數(shù)據(jù)加1并存在DPTR中

減一指令

助記符作用
DEC AA中的值減1并將結(jié)果存放在A中
DEC RnRn中的值減1并將結(jié)果存放在Rn中
DEC direct將direct這個地址中的數(shù)據(jù)減1并將結(jié)果存放在direct這個地址中
DEC @RiRi中存放了一個地址,將該地址中的數(shù)據(jù)減1并將結(jié)果存放在這個地址中

乘除法指令

助記符作用
MUL AB將A中的值與B中的值相乘,積的高位存在B中,低位存在A中
DIV AB用A中的值除以B中的值,商存在A中,余數(shù)存在B中

邏輯運算類指令

邏輯與指令

助記符作用
ANL A,direct將A中的值與direct這個地址中的值相與并將結(jié)果存在A中
ANL A,Rn將A中的值與Rn中的值相與并將結(jié)果存在A中
ANL A,@RiRi中存放了一個地址,將該地址中的數(shù)據(jù)與A中的值相與并將結(jié)果存在A中
ANL A,#data將A中的值與data相與并將結(jié)果存在A中
ANL direct,A將direct這個地址中的值與A中的值相與并將結(jié)果存在direct這個地址中
ANL direct,#data將direct這個地址中的值與data相與并將結(jié)果存在direct這個地址中

邏輯或指令

助記符作用
ORL A,direct將A中的值與direct這個地址中的值相或并將結(jié)果存在A中
ORL A,Rn將A中的值與Rn中的值相或并將結(jié)果存在A中
ORL A,@RiRi中存放了一個地址,將該地址中的數(shù)據(jù)與A中的值相或并將結(jié)果存在A中
ORL A,#data將A中的值與data相或并將結(jié)果存在A中
ORL direct,A將direct這個地址中的值與A中的值相或并將結(jié)果存在direct這個地址中
ORL direct,#data將direct這個地址中的值與data相或并將結(jié)果存在direct這個地址中

邏輯異或指令

助記符作用
XRL A,direct將A中的值與direct這個地址中的值相異或并將結(jié)果存在A中
XRL A,Rn將A中的值與Rn中的值相異或并將結(jié)果存在A中
XRL A,@RiRi中存放了一個地址,將該地址中的數(shù)據(jù)與A中的值相異或并將結(jié)果存在A中
XRL A,#data將A中的值與data相異或并將結(jié)果存在A中
XRL direct,A將direct這個地址中的值與A中的值相異或并將結(jié)果存在direct這個地址中
XRL direct,#data將direct這個地址中的值與data相異或并將結(jié)果存在direct這個地址中

循環(huán)移位指令

助記符作用
RL A將A中的值按二進制循環(huán)左移,即第0位變?yōu)榈?位,以此類推,第7位變?yōu)榈?位
RLC A帶進位循環(huán)左移,即進位位Cy變?yōu)锳中的值的第0位,原第0位變?yōu)榈?為,以此類推,第7位變?yōu)闃酥疚籆y
RR A將A中的值按二進制循環(huán)右移,即第7位變?yōu)榈?位,以此類推,第0位變?yōu)榈?位
RLC A帶進位循環(huán)右移,即進位位Cy變?yōu)锳中的值的第7位,原第7位變?yōu)榈?位,以此類推,第0位變?yōu)闃酥疚籆y

位操作類指令

注:在單片機中要對某個引腳進行操作,這個引腳就是一個位bit,例如將P1.1引腳置1,可用 SETB P1.1

位傳送指令

助記符作用
MOV C,bit將bit的值傳送到標志位Cy中
MOV bit,C將標志位Cy的值傳送到bit中

位置位和位復(fù)位指令

助記符作用
CLR C將標志位Cy清0
CLR bit將bit清0
SETB C將標志位Cy置1
SETB bit將bit置1

位運算指令

助記符作用
ANL C,bit將標志位Cy與bit相與并將結(jié)果存到標志位Cy中
ANL C,/bit將bit取反和標志位Cy相與并將結(jié)果存到標志位Cy中
ORL C,bit將標志位Cy與bit相或并將結(jié)果存到標志位Cy中
ORL C,/bit將bit取反和標志位Cy相或并將結(jié)果存到標志位Cy中
CPL C將標志位Cy取反
CPL bit將bit取反

位轉(zhuǎn)移指令

助記符作用
JB bit,rel如果bit的值位1,則程序跳到當(dāng)前指令地址+rel這個位置繼續(xù)執(zhí)行,否則順序執(zhí)行
JNB bit ,rel如果bit的值位0,則程序跳到當(dāng)前指令地址+rel這個位置繼續(xù)執(zhí)行 ,否則順序執(zhí)行
JBC bit ,erl如果bit的值位1,則程序跳到當(dāng)前指令地址+rel這個位置繼續(xù)執(zhí)行并將bit清0,否則順序執(zhí)行

判斷Cy標志指令

助記符作用
JC dstdst表示一個標識符,如果Cy的值為1,程序跳到dst所標識的位置繼續(xù)執(zhí)行 ,否則順序執(zhí)行
JNC dstdst表示一個標識符,如果Cy的值不為1,程序跳到dst所標識的位置繼續(xù)執(zhí)行 ,否則順序執(zhí)行

例:

SETB C JC dst MOV A, #01H dst: MOV A, #02H END

控制轉(zhuǎn)移類指令

無條件轉(zhuǎn)移指令

助記符作用范圍
LJMP dstdst表示一個標識符,程序無條件跳轉(zhuǎn)到dst這個位置繼續(xù)執(zhí)行任意位置
AJMP dstdst表示一個標識符,程序無條件跳轉(zhuǎn)到dst這個位置繼續(xù)執(zhí)行2KB
SJMP dstdst表示一個標識符,程序無條件跳轉(zhuǎn)到dst這個位置繼續(xù)執(zhí)行-128~127字節(jié)以內(nèi)
JMP @A+DPTR程序無條件跳轉(zhuǎn)到A與DPTR和這個地址位置開始執(zhí)行64KB

例:

MOV A, #03H LJMP dst MOV A, #01H dst: MOV A, #02H END

條件轉(zhuǎn)移指令

助記符作用范圍
JZ dstdst是一個標識符,如果A的值為0,程序跳轉(zhuǎn)到dst這個位置開始執(zhí)行,否則順序執(zhí)行-128~127字節(jié)
JNZ dstdst是一個標識符,如果A的值不為1,程序跳轉(zhuǎn)到dst這個位置開始執(zhí)行,否則順序執(zhí)行-128~127字節(jié)
CJNE A,#data,dstdst是一個標識符,如果A的值與data不相等,程序跳轉(zhuǎn)到dst這個位置開始執(zhí)行,否則順序執(zhí)行 ;如果A的值小于data,Cy=1,否則Cy=0-128~127字節(jié)
CJNE Rn,#data,dstdst是一個標識符,如果Rn的值與data不相等,程序跳轉(zhuǎn)到dst這個位置開始執(zhí)行,否則順序執(zhí)行 ;如果A的值小于data,Cy=1,否則Cy=0-128~127字節(jié)
CJNE @Ri,#data,dstdst是一個標識符,Ri存放了一個地址,如果這個地址存放的值與data不相等,程序跳轉(zhuǎn)到dst這個位置開始執(zhí)行,否則順序執(zhí)行 ;如果這個地址存放的值小于data,Cy=1,否則Cy=0-128~127字節(jié)
CJNE A,direct,dstdst是一個標識符,如果A的值與direct的值不相等,程序跳轉(zhuǎn)到dst這個位置開始執(zhí)行,否則順序執(zhí)行 ;如果A的值小于direct的值,Cy=1,否則Cy=0-128~127字節(jié)
DJNZ Rn,dstdst是一個標識符,將Rn的值先減1,如果此時Rn的值不為0,程序跳轉(zhuǎn)到dst這個位置開始執(zhí)行,否則順序執(zhí)行,常用作循環(huán)中-128~127字節(jié)
DJNZ direct,dstdst是一個標識符,將direct這個地址的值先減1,如果此時direct這個地址的值不為0,程序跳轉(zhuǎn)到dst這個位置開始執(zhí)行,否則順序執(zhí)行-128~127字節(jié)

例:

MOV A, #02H JZ dst MOV B, #01H dst: MOV B, #02H END

調(diào)用和返回指令

助記符作用范圍
ACALL namename表示子程序名,該指令表示調(diào)用子程序2KB
LCALL namename表示子程序名,該指令表示調(diào)用子程序任意位置
RET該指令表示調(diào)用子程序結(jié)束,子程序返回
RETI該指令表示中斷結(jié)束,中斷返回

例:

MOV A, #02H MOV B, #03H ACALL ADD_AB MOV R0, A SJMP $ //程序卡在這個位置ADD_AB: ADD A, B RETEND

空操作

助記符作用機器周期
NOP空操作1

偽指令

ORG

ORG 1000H MOV A,#00H

規(guī)定程序塊或數(shù)據(jù)塊存放的起始地址,示例中表示MOV A,#00H存放在1000H開始的單元中

END
匯編語言源程序結(jié)束標志

DB

ORG 1000H TAB: DB 02H,'B',"abc"

將指令后的數(shù)據(jù)依次存放在指定的地址單元中。示例中TAB的地址為1000H,故而從該地址開始的單元依次存放02H,B的ASCII碼,a的ASCII碼,b的ASCII碼,c的ASCII碼

DW

ORG 1000H TAB: DW 3000H, 80H

該指令后的數(shù)據(jù)為2個字節(jié),存放數(shù)據(jù)時類似DB,高位在前,低位在后。示例中TAB的地址為1000H,那么1000H存放30H,1001H存放00H,1002H存放00H,1003H存放80H

DS

ORG 1000H TAB: DS 1FH

該指令用于保留存儲單元用作備用空間,示例中TAB的地址為1000H,,從1000H開始預(yù)留32個存儲字節(jié)空間(1000H~101FH)

EQU

DLY: EQU 3200H TAB: EQU DLY

將該指令后的值賦給本語句的標號。示例中:DLY的地址是3200H,并將TAB的地址設(shè)置為DLY的地址,即TAB的地址也是3200H

BIT

DLY1: BIT 31H DIY2: BIT 32H

將位地址賦給本語句的標號,示例中:DLY1和DLY2當(dāng)作位地址31H和32H。

總結(jié)

以上是生活随笔為你收集整理的51单片机汇编指令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。