汇编指令合集

这是我用爬虫扒下来的,由于原文是表格框起来的但不会数据分析,里面可能有1 1这种类似无关文字 ,我自己手动去了点,未细看,要看的小盆友注意了

8051指令周期表 

MOV A, Rn (Rn)→(A) Rn中的内容送到累加器A中,Rn=R0-R7 

MOV Rn,A (A)→(Rn) 累加器A中的内容送到寄存器Rn中。 

MOV A, @Ri ((Ri))→(A) Ri内容指向的地址单元中的内容送到累加器Ri=R0或R1 

MOV @Ri, A (A)→((Ri)) 累加器A中的内容送到以Ri中的内容为地址的RAM单元。
 
MOV A, #data #data→(A) 立即数送到累加器A中。 

MOV A, data (data)→(A) 直接单元地址中的内容送到累加器A

MOV data, A (A) →(data)累加器A中的内容送直接单元地址。 

MOV Rn,#data #data→(Rn)立即数直接送到寄存器Rn中。 

MOV data, #data  #data→(data)立即数送直接寻址单元 。 

MOV @Ri, #data  #data→((Ri))立即数送到以Ri中的内容为地址的RAM单元。 

MOV data, Rn (Rn)→(data)寄存器中的内容送直接寻址单元 。 

MOV Rn, data (data)→(Rn)直接寻址单元中的内容送寄存器 。 

MOV data, @Ri ((Ri))→(data)内部RAM单元送直接寻址单元 。
 
MOV @Ri, data (data)→((Ri))直接寻址单元送内部RAM单元 。 

MOV data2,data1 (data1)→(data2)直接寻址单元中的内容送直接寻址单元 。
 
MOV DPTR, #dataH→(DPH),#dataL→(DPL)16位常数的高8位送到DPH,低8位送到DPL #data16

MOVX A, @Ri ((Ri))→(A) 寄存器Ri指向片外RAM地址中的内容送到累加器A中。
 
MOVX @Ri, A (A)→((Ri)) 累加器中的内容送到寄存器Ri指向片外RAM地址中。 

MOVX A, @DPTR ((DPTR))→(A) 数据指针指向片外RAM地址中的内容送到累加器A中。 

MOVX @DPTR, A (A)→((DPTR)) 累加器中的内容送到数据指针指向片外RAM地址中。 

MOVC A, @A+DPTR ((A))+(DPTR)→(A) 表格地址单元中的内容送到累加器A中。 

MOVC A, @A+PC ((PC))+1→(A),((A))+(PC)→(A) 表格地址单元中的内容送到累加器A中。 

算术运算类指令 XCH A, Rn (A)←→(Rn)累加器与工作寄存器Rn中的内容互换。
 
XCH A, @Ri (A)←→((Ri))累加器与工作寄存器Ri所指的存储单元中的内容互换。
 
XCHD A, data (data)→(A)累加器A的内容与直接寻址单元的内容交换 。 

XCHD A, @Ri (A3-0)←→((Ri)3-0)累加器与工作寄存器Ri所指的存储单元中的内容低半字节互换。
 
SWAP A (A3-0)←→(A7-4)累加器中的内容高低半字节互换。 
 POP data (SP)→(data)(SP)-1→(SP), 堆栈指针SP所指的单元数据送到直接寻址单元中,堆栈指针SP再进行减1操作 

PUSH data (SP)+1→(SP),(data)→(SP) 堆栈指针首先加1,直接寻址单元中的数据送到堆栈指针SP所指的单元中 

 
ADD A, Rn (A)+(Rn)→(A) 累加器A中的内容与工作寄存器Rn中的内容相加,结果存在A中。 

 ADD A, @Ri (A)+((Ri))→(A) 累加器A中的内容与工作寄存器Ri所指向地址单元中的内容相加,结果存在A中。 

 ADD A, data (A)+(data)→(A) 累加器A中的内容与直接地址单元中的内容相加,结果存在A中。 
 
ADD A, #data (A)+#data→(A) 累加器A中的内容与立即数#data相加,结果存在A中。

ADDC A, Rn (A)+Rn+(C)→(A) 累加器A中的内容与工作寄存器Rn中的内容、连同进位位相加,结果存在A中。 

ADDC A, @Ri (A)+((Ri))+(C)→(A) 累加器A中的内容与工作寄存器Ri指向地址单元中的内容、连同进位位相加,结果存在A中。 

ADDC A, (A)+#data +(C)→(A) 累加器A中的内容与立即数连同进位位相加,结果#data 存在A中。
 
ADDC A, data (A)+(data)+(C)→(A) 累加器A中的内容与直接地址单元的内容连同进位位相加,结果存在A中。
 
INC A (A)+1→(A) 累加器A中的内容加1,结果存在A中。
 
INC Rn (Rn)+1→(Rn)寄存器Rn的内容加1,结果送回原地址单元中。

INC data (data)+1→(data) 直接地址单元中的内容加1,结果送回原地址单元中。
 
INC @Ri ((Ri))+1→((Ri)) 寄存器的内容指向的地址单元中的内容1,结果送回原地址单元中。 

INC DPTR (DPTR)+1→(DPTR)数据指针的内容加1,结果送回数据指针中。 

DA A 在进行BCD码运算时,这条指令总是跟在ADD或ADDC指令之后,其功能是将执行加法运算后存于累加器A中的结果进行调整和修正

SUBB A, Rn (A)-(Rn) -(C)→(A) 累加器A中的内容与工作寄存器中的内容、连同借位位相减,结果存在A中。 

SUBB A, @Ri (A)-((Ri)) -(C)→(A) 累加器A中的内容与工作寄存器Ri指向的地址单元中的内容、连同借位位相减,结果存在A中。 

SUBB A, #data (A)-#data -(C)→(A) 累加器A中的内容与立即数、连同借位位相减,结果存在A中。
 
SUBB A, data (A)-(data) - (C)→(A) 累加器A中的内容与直接地址单元中的内容、连同借位位相减,结果存在A中。 

DEC A (A)-1→(A)累加器A中的内容减1,结果送回累加器A中。 

DEC Rn (Rn)-1→(Rn)寄存器Rn中的内容减1,结果送回寄存器Rn中。 

DEC @Ri ((Ri))-1→((Ri))寄存器Ri指向的地址单元中的内容减1,结果送回原地址单元中。 

DEC data (data)-1→(data)直接地址单元中的内容减1,结果送回直接地址单元中。 

MUL AB (A)×(B)→(A)和(B) 累加器A中的内容与寄存器B中的内容相乘,结果存在A、B中。 

DIV AB (A)÷(B)→(A)和(B) 累加器A中的内容除以寄存器B中的内容,所得到的商存在累加器A,而余数存在寄存器B中。
 
逻辑运算类指令 
ANL A, Rn 累加器A的内容和寄存器Rn中的内容执行与逻辑操作。结果存在累加器A中。

ANL A, @Ri 累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行与逻辑操作。结果存在累加器A中。 1 

ANL A, #data 累加器A的内容和立即数执行与逻辑操作。结果存在累加器A中。 

ANL A, data 累加器A中的内容和直接地址单元中的内容执行与逻辑操作。结果存在寄存器A中。 

ANL data, A 直接地址单元中的内容和累加器A的内容执行与逻辑操作。结果存在直接地址单元中。
 
ANL 直接地址单元中的内容和立即数执行与逻辑操作。结果存在直接地址单元中。 

data, #data ORL A, Rn 累加器A的内容和寄存器Rn中的内容执行逻辑或操作。结果存在累加器A中。

ORL A,@Ri 累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑或操作。结果存在累加器A中。 

ORL A,#data 累加器A的内容和立即数执行逻辑或操作。结果存在累加器A中。 

ORL A,data 累加器A中的内容和直接地址单元中的内容执行逻辑或操作。结果存在寄存器A中。 

ORL data A 直接地址单元中的内容和累加器A的内容执行逻辑或操作。结果存在直接地址单元中。 

ORL data, #data 直接地址单元中的内容和立即数执行逻辑或操作。结果存在直接地址单元中。 

XRL A, Rn 累加器A的内容和寄存器Rn中的内容执行逻辑异或操作。结果存在累加器A中。 


XRL A,@Ri 累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑异或操作。结果存在累加器A中。 

XRL A,#data 累加器A的内容和立即数执行逻辑异或操作。结果存在累加器A中。 

XRL A,data 累加器A中的内容和直接地址单元中的内容执行逻辑异或操作。结果存在寄存器A中。 

XRL data, A 直接地址单元中的内容和累加器A的内容执行逻辑异或操作。结果存在直接地址单元中。 

XRL data, #data 直接地址单元中的内容和立即数执行逻辑异或操作。结果存在直接地址单元中。 3 

RL A 累加器A中的内容左移一位。 

RLC A 累加器A中的内容连同进位位CY左移一位。 

RR A 累加器A中的内容右移一位。
 
RRC A 累加器A中的内容连同进位位CY右移一位。 

CPL A 累加器中的内容按位取反。 

CLR A0→(A),累加器中的内容清0。 

控制转移类指令 
ACCALL addr11 绝对调用指令,可在2kB空间调用子程序,此时(PC)+ 2→(PC),(SP)+ 1→(SP),(PC7-0)→(SP),(SP)+ 1→(SP),(PC15-8)→(SP),addr11→(PC10-0) 

AJMP addr11 (PC)+2→(PC),addr11→(PC10-0)程序计数器赋予新值(11位地址),(PC15-11)不改变。
 
 LCALL addr16 长调用指令,可在64kB空间调用子程序。此时(PC)+ 3→(PC),(SP)+ 1→(SP),(PC7-0)→(SP),(SP)+ 1→(SP),(PC15-8)→(SP),addr16→(PC),即分别从堆栈中弹出调用子程序时压入的返回地址。 

LJMP addr16 addr16→(PC),给程序计数器赋予新值(16位地址)
。 
SJMP rel (PC)+ 2 + rel→(PC)当前程序计数器先加上2再加上偏移量给程序计数器赋予新值。 

 JMP @A+DPTR (A)+ (DPTR)→(PC),累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值。

RET 子程序返回指令。此时(SP)→(PC15-8),(SP)- 1→(SP),(SP)→(PC7-0),(SP)- 1→(SP) 

RET1 中断返回指令,除具有RET功能外,还具有恢复中断逻辑的功能,需注意的是,RETI指令不能用RET代替
 
 JZ rel A=0,(PC)+ 2 + rel→(PC),累加器中的内容为0,则转移到偏移量所指向的地址,否则程序往下执行。 

JNZ rel A0,(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指向地址单元中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行。 


DJNZ Rn, rel (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)工作寄存器Rn减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行 

DJNZ data, rel (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)直接地址单元中的内容减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行。 

布尔操作类指令 NOP 这条指令除了使PC加1,消耗一个机器周期外,没有执行任何操作。可用于短时间的延时。 

MOV C, bit bit→CY,某位数据送CY。

MOV bit, C CY→bit,CY数据送某位。
 
CLR C 0→CY,清CY 11 CLR bit 0→bit,清某一位。 

CPL C ()→CY CPL bit ()→bit 21 SETB C 1→CY,置位CY 


SETB bit 1→bit,置位某一位 

 ANL C, bit (CY)∧(bit)→CY 

ANL C, /bit (CY)∧() →CY 

 ORL C, bit (CY)∨(bit) →CY 

 ORL C, /bit (CY)∨() →CY 

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转移,(PC)+3+rel→PC,否则程序往下执行,(PC)+3→PC。
 
 JNB bit,rel 位状态为0转移,(PC)+3+rel→PC,否则程序往下执行,(PC)+3→PC。 

 JBC bit,rel 位状态为1转移,并使该位清“0” ,(PC)+3+rel→PC,否则程序往下执行,(PC)+3→PC。 

    
C51汇编伪指令: 
1、DS ---预留存储区命令 格式: 〔标号:〕 DS   表达式值 
其功能是从指定地址开始,定义一个存储区,以备源程序使用。 存储区预留的存储单元数由表达式的值决定。 TMP:   DS   1 
从标号TEP地址处开始保留1个存储单元(字节)。
  
2、BIT---定义位命令 
格式:   字符名称   BIT   位地址 其功能用于给字符名称定义位地址。 SPK   BIT   P3.7 
经定义后,允许在指令中用SPK代替P3.7。 
 
3、USING指令 
USING指令通知汇编器使用8051的哪一个工作寄存器组。 格式: USING 表达式 (值必须为03,默认值为0。) USING 0 
使用第0组工作寄存器。
  
4、SEGMENT指令 
SEGMENT 指令用来声明一个再定位段和一个可选的再定位类型。 格式: 再定位段名 SEGMENT 段类型〔再定位类型〕 其中,“再定位段名”用于指明所声明的段。 
“段类型”用于指定所声明的段将处的存储器地址空间。 
可用的段类型有 CODE、XDATA、DATA、IDATA和BIT。 STACK_SEG SEGMENT IDATA DATA_SEG SEGMENT DATA   

5、RSEG---再定位段选择指令 
再定位段选择指令为RSEG,用于选择一个已在前面定义过的再定位段作为当前段。 格式: RSEG 段名 
段名必须是在前面已经声明过的再定位段。 
DATA_SEG SEGMENT DATA   ;声明一个再定位DATA段 
RSEG   DATA_SEG   ;选择前面声明的再定位DATA段作为当前段 
 
6、绝对段选择指令  
CSEG---绝对代码段  
DSEG---内部绝对数据段  XSEG---外部绝对数据段  ISEG---内部间接寻址数据段  BSEG---绝对位寻址数据段  格式:  
CSEG [AT 绝对地址表达式]  DSEG [AT 绝对地址表达式]  XSEG [AT 绝对地址表达式]  ISEG [AT 绝对地址表达式]  BSEG [AT 绝对地址表达式]  
括号内是可选项,用来指定当前绝对段的基地址。 CSEG AT 0000H AJMP MAIN  

7、ORG指令 
ORG指令用来改变汇编器的计数器,从而设定一个新的程序起始地址。 格式: ORG 表达式 
表达式必须是绝对或简单再定位表达式。 ORG 0000H AJMP MAIN 
设定 MAIN 程序的起始地址为 0000H。 
 
8、END指令 
END指令用来控制汇编结束。在每个汇编程序的最后一行必须有一条END指令, 并且END指令只能出现一次。
  
9、EQU指令 
EQU 指令用于将一个数值或寄存器名赋给一个指定的符号名。 格式: 符号名   EQU   表达式  或     符号名   EQU   寄存器名 
表达式必须是一个简单再定位表达式。 
用 EQU 指令赋值以后的字符名,可以用作数据地址、代码地址、位地址或者 直接当做一个立即数使用。 LIMIT   EQU   1200 COUNT   EQU   R5  

10、DATA 指令 
DATA 指令用于将一个内部 RAM 的地址赋给指定的符号名。 格式: 符号名   DATA   表达式 
数值表达式的值在 0255 之间,表达式必须是一个简单再定位表达式。 PORT1   DATA   40H 
 
11、DB 指令 
DB 指令以表达式的值的字节形式初始化代码空间。 格式: [标号:]   DB   表达式表 
表达式中可包含符号、字符串、或表达式等项,各个项之间用逗号隔开,字符串应用引号括起来。 
括号内的标号是可选项,如果使用了标号,则标号的值将是表达式表中第一字节的地址。 DB 指令必须位于 CODE 段之内,否则将会发生错误。 TABLE:DB 0C0H, 0F9H, 0A4H TABLE1: DB " 89C51 "
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值