单片机学习笔记(五)

汇编语言与寻址方式


汇编语言

指令和程序设计语言

指令:是CPU根据人的意图来执行某种操作的命令
程序设计语言:实现人机交换信息的基本工具,分为机器语言、汇编语言和高级语言

  • 机器语言:用二进制编码表示每条指令,是计算机能直接识别和执行的语言
  • 汇编语言:是用助记符、符号和数字等来表示指令的程序设计语言。它与机器语言指令是一一对应的

指令格式

操作码 [目的操作数][,源操作数][;注释]

汇编语言指令对应的二进制代码格式

  • 单字节指令
  • 双字节指令
  • 三字节指令

寻址方式

寄存器寻址(工作寄存器R0~R7、A、B、C、DPTR)

指令指出寄存器组R0~R7中某一个或其他寄存器(A、B、DPTR等)的内容作为操作数

MOV A,R0;	(R0)→A
MOV P1,A;	(A)→P1口
ADD A,R0;	(A)+(R0)→A

直接寻址(片内RAM低128B、特殊功能寄存器)

在指令中直接给出操作数所在的存储单元的地址,指令在操作数部分是操作数所在的地址
直接寻址方式可以访问片内RAM的128个单元以及所有的SFR。对于SFR,既可以使用它的地址,也可以使用你它的名字

MOV A,3AH;	(3AH)→A
MOV A,P1;	(P1口)→A

或

MOV A,90H;	90H是P1口的地址

立即数寻址(程序存储器ROM)

指令操作码后紧跟的是一字节或者两字节操作数。用“#”表示,以区别直接地址

MOV A,3AH;	(3AH)→A
MOV A,#3AH;	3AH→A

寄存器间接寻址(片内RAM低128B、片外RAM)

操作数事先存放在某个寄存器中,寄存器间接寻址是把指定寄存器的的内容作为地址,由该地址所指的单元格作为操作数

变址寻址(程序存储器(@A+PC,@A+DPTR))

以某个寄存器的内容为基地址,在这个及地址的基础上加上地址偏移量形成真正的操作数地址。用变址寻址的方式只能访问程序存储器

相对寻址(程序存储器256B范围(PC+偏移量))

以当前的PC值加上指令中规定的偏移量rel而形成实际的转移地址。

	目的地址=源地址+2(相对转移指令字节数)+rel

位寻址(片内RAM的20H~2FH字节地址、部分SFR)

采用位寻址方式的指令操作数是8位二进制中的某一位,指令中给出的是位置。位地址在指令中用bit表示

CLR bit

位地址的两种表示方法

  • 直接使用位地址,如D3H
  • 直接使用给寄存器名字加位数,如PSW.3

位寻址区域被:片内RAM的20H-2返回的16个单元中的128位;字节地址能被8整除的SFR

符号

  • Rn(n=0~7):当前选中的工作寄存器组R0 ~ R7
  • Ri(i=0,1):作为地址指针的两个工作寄存器R0,R1
  • #data:即8位立即数
  • #data:即16位立即数
  • direct:8位片内RAM单元(包括SFR)的直接地址
  • addr11:11位目的地址,用于ACALL和AJMP指令中
  • addr16:16位目的地址,用于ACALL和AJMP指令中
  • rel:补码中表示的8位地址偏移量。范围:-128~+127D
  • bit:片内RAM或SFR的直接寻址位地址
  • @:间接寄存器的符号
  • /:位操作指令中对该位取反再参与操作,不影响原值
  • (X):X中的内容
  • ((X)):X指出的地址单元中的内容
  • →:指令操作流程方向

89C51指令系统

89C51指令系统由111条指令组成。其中单字节指令49条,双字节指令45条,三字节指令17条。从指令执行时间看,单周期指令64条,双周期指令45条,中有乘除指令为4个周期。


总结

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值