汇编语言与寻址方式
文章目录
汇编语言
指令和程序设计语言
指令:是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个周期。