汇编指令

汇编指令,第1张

051指令

资料转移指令

MOV 移动

MOVC 程式记忆体移动

MOVX 外部RAM和扩展I/O口与累加器A的数据传送指令

PUSH 放入堆叠

POP 由堆叠取回

XCH 8位元交换

XCHD 低4位元交换

SWAP 高低4位元交换

算术指令

ADD 两数相加

ADDC 两数相加再加C

SUBB 两数相减再减C

INC 加一指令

DEC 减一指令

MUL (MUL AB乘法指令仅此一条)相乘指令,所得的16位二进制数低8位存累加器A高8位存B

DIV (DIV AB 除法指令仅此一条)相除指令,所得商存A,余数存B

DA (DA A 只此一条指令)调整为十进数

逻辑指令

ANL做AND(逻辑与)运算

ORL做OR(逻辑或)运算

XRL 做(逻辑异或)运算

CLR 清除为0

CPL 取反指令

RL 不带进位左环移

RLC 带进位左环移

RR 不带进位右环移

RRC 带进位右环移

控制转移类指令

JC C=1时跳

JNC C=0时跳

JB 位元=1时跳

JNB 位元=0时跳

JBC 位元=1时跳且清除此位元

LCALL 长调用子程序

ACALL 绝对调用子程序

RET 由副程式返回

RETI 由中断副程式返回

AJMP 绝对转移

SJMP 相对转移

JMP @A+DPTR 散转,相对DPTR的间接转移

JZ A=0时跳

JNZA 0时跳

CJNE 二数比较,不相等时跳

DJNZ 减一,不等於0时跳

NOP 空 *** 作

位变量指令

SETB 设定为1

ORG 程序开始,规定程序的起始地址

END 程序结束

EQU 等值指令(先赋值后使用)例:SUM EQU 30H

DB 定义字节指令

DW 定义字内容

DS 定义保留一定的存贮单元数目

BIT 位地址符号指令 例:SAM BIT P10

RET 子程序返回指令

RETI 中断子程序返回指令

$ 本条指令地址

算术运算指令

指令 说明 周期

ADD A,Rn A←A+Rn 12

ADD A,direct A←A+direct 12

ADD A,@Ri A←A+Ri 12

ADD A,#data A←A+data 12

ADDC A,Rn A←A+Rn+C 12

ADDC A,direct A←A+direct+C 12

ADDC A,@Ri A←A+Ri+C 12

ADDC A,#data A←A+data+C 12

SUBB A,Rn A←A-Rn-C 12

SUBB A,direct A←A-direct-C 12

SUBB A,@Ri A←A-Ri-C 12

SUBB A,#data A←A-data-C 12

INC A A←A+1 12

INC Rn Rn←Rn+1 12

INC direct direct←direct+1 12

INC @Ri @Ri←@Ri+1 12

INC DPTR DPTR←DPTR+1 12

DEC A A←A-1 12

DEC Rn Rn←Rn-1 12

DEC direct direct←direct-1 12

DEC @Ri @Ri←@Ri-1 12

MUL AB 两个无符号的8位数据相乘,其中高阶8位放入B缓存器,低阶8位则放入累积器ACC 24

DIV AB 两个无符号的8位数据相除,把ACC值除以B缓存器值,商数放回ACC,余数放在B 48

DA A 累加器作十进制调整 48

 

 

逻辑运算指令

指令 说明 周期

ANL A,Rn A←A and Rn 12

ANL A,direct A←A and direct 12

ANL A,@Ri A←A and Ri 12

ANL A,#data A←A and data 12

ANL direct,A direct←direct and A 12

ANL direct,#data direct←direct and data 24

ORL A,Rn A←A or Rn 12

ORL A,direct A←A or direct 12

ORL A,Rn A←A or Rn 12

ORL A,@Ri A←A or Ri 12

ORL A,#data A←A or data 12

ORL direct,A direct←direct or A 12

ORL direct,#data direct←direct or data 24

XRL A,Rn A←A xor Rn 12

XRL A,direct A←A xor direct 12

XRL A,@Ri A←A xor Ri 12

XRL A,#data A←A xor data 12

XRL direct,A direct←direct xor A 12

XRL direct,#data direct←direct xor data 12

CLR A 清除累加器 12

CPL A 累加器反相 12

RL A 累加器向左旋转 12

RLC A 累加器和C左旋 12

RR A 累加器向右旋转 12

RRC A 累加器和C右旋 12

SWAP A 累加器的高低四位互换 12

 

 

数据转移指令

指令 说明 周期

MOV A,Rn A←Rn 12

MOV A,direct A←direct 12

MOV A,@Ri A←Ri 12

MOV A,#data A←data 12

MOV Rn,A Rn←A 12

MOV Rn,direct Rn←direct 24

MOV Rn,#data Rn←data 12

MOV direct,A direct←A 12

MOV direct,Rn direct←Rn 24

MOV direct,direct direct←direct 24

MOV direct,@Ri direct←Ri 24

MOV direct,#data direct←data 24

MOV @Ri,A Ri←A 12

MOV @Ri,direct Ri←direct 24

MOV @Ri,#data Ri←data 12

MOV DPTR,#data 16 Ri←16bit data 24

MOVC A,@A+DPTR A←程序内存的数据 24

MOVC A,@A+PC A←程序内存的数据 24

MOVX A,@Ri A←外部RAM的数据(8bit地址) 24

MOVX A,@DPTR A←外部RAM的数据(16bit地址) 24

MOVX @Ri,A 外部的RAM(8bit)←A 24

MOVX @DPTR,A 外部的RAM(16bit)←A 24

PUSH direc 推迭区←direct 24

POP direc direct←堆栈区 24

XCH A,Rn A和Rn互换 12

XCH A,direct A和direct互换 12

XCH A,@Ri A和Ri互换 12

XCHD A,@Ri A和Ri的低四位互换 12

 

 

位运算指令

指令 说明 周期

CLR C 清除进位旗标 12

CLR bit 清除直接位 12

SETB C 设定进位旗标 12

SETB bit 设定直接位 12

CPL C 进位旗标反相 12

CPL bit 直接位反相 12

ANL C,bit C←C and bit 24

ANL C,/bit C←C and bit(反相) 24

ORL C,bit C←C or bit 24

ORL C,/bit C←C or bit(反相) 24

MOV C,bit C←bit 12

MOV bit,C bit←C 24

JC rel 若C=1跳至rel 24

JNC rel 若C=0跳至rel 24

JB bit,rel 若bit=1跳至rel 24

JNB bit,rel 若bit=0跳至rel 24

JBC bit,rel 若bit=1跳至rel,且清除此位 24

 

 

程序跳跃指令

指令 说明 周期

ACALL addr11 绝对式子程序呼叫 24

LCALL addr16 远程子程序呼叫 24

RET 从子程序返回 24

RETI 从中断子程序返回 24

AJMP addr11 绝对式跳跃 24

LJMP addr16 远程跳跃 24

SJMP rel 短程跳跃 24

JMP @A+DPTR 间接跳跃 24

JZ rel 若A=0跳至rel 24

JNZ rel 若A不等于0跳至rel 24

CJNE A,direct,rel 若A不等于direct跳至rel 24

CJNE A,#data,rel 若A不等于data跳至rel 24

CJNE Rn,#data,rel 若Rn不等于data跳至rel 24

CJNE @Ri,#data,rel 若Ri不等于data跳至rel 24

DJNZ Rn,rel Rn减1不等于0跳至rel 24

DJNZ direct,rel direct减1不等于0跳至rel 24

NOP 没动作 12

 

 

缩写符号说明

缩写符号 说明 备注

Rn 缓存器R0-R7

direct 8bit内部数据存储器,包括

1内部数据存储器(00-7F)的地址

2特殊功能缓存器(80-FF)的地址,如P0,PSW,TMOD等

@Ri 由缓存器R0或R1所寻址的内部RAM数据

#data 8bit常数

#data 16 16bit常数

addr 16 16bit的目的地址,可使跳跃指令跳跃64k

addr 11 11bit的目的地址,可使跳跃指令跳跃2k

rel 具正负号的8位地址偏移量,用于相对地址的跳跃

bit 1个bit:只所有可以位寻址的位。(如PSW7为CY旗号)

A 累加器(累积器)

C或CY 进位旗号

AC 辅助进位旗号

Bb 指定位B0-B7

D 半字节(4Bit)助忆符号

F0 旗号0

I 中断

PC 程序计数器

P0 I/O port 0

P1 I/O port 1

P2 I/O port 2

P3 I/O port 3

PSW 程序状态字组(类似于旗号缓存器)

SP 堆栈指针缓存器

B 缓存器B

DPTR 数据指针缓存器

X 外部滋要内存的助忆符号

@ 间接地址符号

$ 程序计数迄目前的值

reg 缓存器

8051 INSTRUCTION SET

1Arithmetic operations:

Mnemonic ByteCyc

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 direct2 1

INC direct2 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

2Logical 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

3Data 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,direct3 2

MOV direct,#data 3 2

4Boolean 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

5Program 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,rel3 2

JMP @A+DPTR 1 2

CJNE A,#data,rel 3 2

DJNZ Rn,rel2 2

CJNE @Ri,#data,rel 3  2

DJNZ direct,rel 3 2

CJNE Rn,#data,rel3 2

基本没有区别!都会在返回时恢复压栈的PC指针并继续执行程序。

中断处理程序实际上也可以看做是一个普通的子程序,只是它的调用是预先设定的地址入口,并且它的调用时由中断触发的;而子程序是我们人为地调用的。

但是中断子程序的返回有时要考虑对中断的处理(如开关中断允许、初始化数据-----比如计数器或者定时器的初始值处理等等)。

子程序与主程序间的参数传递 用高级语言实现的程序,其主程序与子程序之间的参数传递方法是由编译系统来规定的。 一般是采用堆栈或者参数区(地址表)来进行参数的传递。 子程序总结: 1主程序用CALL指令调用子程序,子程序执行完后用RET指令返回到主程序的CALL指令的下一条指令; 2主程序有段内调用(NEAR)和段间调用(FAR),子程序返回对应有段内返回和段间返回; 3主程序可通过寄存器﹑堆栈﹑地址表以及约定的内存变量向子程序传递参数; 4凡在子程序中用到的寄存器必须先送堆栈,返回前按送栈相反的次序出栈; 5注意子程序调用时堆栈指针的变化; 84 系统服务子程序 除用户设计的子程序外, *** 作系统还提供大量的系统服务子程序,通常称为中断服务程序。 这类程序通常用于完成必要的输入/输出功能和一些必要的系统 *** 作。

子程序返回指令完整的功能是改变程序(转子指令)和返回指令(返主指令)。

子程序调用指令用于实现程序与程序之间的转移,与转移指令不同(转移指令用于实现同一程序内的转移)。子程序调用指令还可以进行嵌套调用,即可调用别的子程序,还可以实现递归调用,即直接或间接自己调用自己。

扩展资料:

在子程序的调用与返回过程中,子程序的入口地址是指子程序第一条指令的地址。用于调用子程序、控制程序的执行从主程序转向子程序的指令称为专注指令(子程序调用指令、过程调用指令)。为了正确调用子程序,必须在转子指令中给出子程序的入口地址。

主程序中转子指令的下一条指令的地址称为断点,断点是子程序返回主程序的返回地址,从子程序返回主程序的指令称为返回指令。为了在执行返回指令时能够正确地返回主程序,转子指令应具有保护断点的功能。

参考资料来源:

百度百科-子程序调用指令

在单片机中返回指令有RET、RETI或者跳转指令SJMP或LJMP。

RET是一般子程序返回指令,执行该指令,会自动d出被保护的地址给PC指针。

RETI是中断服务程序返回指令,执行该指令,除了d出被保护的地址指针给PC外,还会恢复影响中断的一些标志位,比如定时器中断的TFn标志。

RET用于一般程序的返回

RETI用于中断函数的返回

以上是一般单片机书籍简绍的,然而在实际应用中,我发现,在程序返回中一样可以使用RETI,而在中断返回中却无法使用RET,究其原因是因为RETI比RET多做一件事情就是将“优先级生效”触发器清零

原来在8051构架中--中断系统中含有两个不可寻址的“优先级生效”触发器。一个用于指出CPU是否正在执行高优先级的中断服务程序,这个触发器为1时,系统将屏蔽所有的中断请求;另一个则指出CPU是否正在执行低优先级中断服务程序,该触发器为1时,将阻止除高优先级以外的一切中断请求。由此可见,若要响应同级甚至是低级中断请求,必须使得该“优先级生效”触发器清零。但该触发器又是不可寻址的,所以无法用软件直接清零。”

reti是中断子程序的返回命令!

假设执行的主程序是反复执行的循环程序,与中断子程序无关。在主程序循环的过程中有中断响应,则结束主程序的一切循环,而去执行中断子程序,执行到RETI则说明中断子程序执行完毕,跳回主程序继续执行主程序的循环。

以上就是关于汇编指令全部的内容,包括:汇编指令、单片机里中断返回和子程序返回的区别是什么、smart200从子程序返回主程序用什么指令等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10037643.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存