3.2.1 MOV-内部8位数据传送指令
MOV指令是8051单片机中最基本的数据传送指令之一,用于在不同的寄存器或存储器之间传送8位数据。其基本格式为:
MOV指令的常见用法包括:
- 寄存器之间的数据传送例如:MOV A, R0 - 将R0中的内容传送到累加器A中
- 立即数传送例如:MOV A, #25H - 将立即数25H传送到累加器A中
- 直接地址传送例如:MOV P1, A - 将累加器A的内容传送到P1端口
- 间接地址传送例如:MOV A, @R0 - 将R0指向的内部RAM单元的内容传送到累加器A中
所有的断路都来自两个工作寄存器之间的操作 ❗❗❗

3.2.2 MOV-16位数据传送指令
这是80C51中唯一的一条16位指令(因为DPTR是唯一一个可以读写的16位寄存器)。此指令把16位常数装入数据指针DPTR,即数据高8位送入DPH寄存器,数据低8位送入DPL寄存器。16位常数在指令的第二、第三字节中(第二字节为高位字节DPH,第三字节为低位字节DPL)。
此操作不影响标志位。
例:执行指令
MOV DPTR, #1234H
执行结果:(DPH)=12H, (DPL)=34H
3.2.3 MOVX-外部数据传送指令
实现累加器A与外部数据存储器或I/O口之间传送一个字节数据。
MOVX指令必须要以累加器A为中转
/DPTR
3.2.4 MOVC-程序存储器数据转送指令(查表指令)
MOVC(Move Code)指令是用于从程序存储器中读取数据的指令。这是一个特殊的数据传送指令,主要用于查表操作。
无论是片内ROM还是片外ROM,都使用MOVC(MOV-CODE)
MOVC指令有两种形式:
MOVC指令的主要特点:
- 只读操作:MOVC只能从程序存储器中读取数据,不能向其写入数据
- 累加器必需:数据必须读入累加器A中
- 变址寻址:通过A与DPTR或PC的内容相加来获取要读取的数据地址
MOVC A,@A+DPTR(远程查表)
- 将累加器A的内容与DPTR的内容相加,得到程序存储器的地址
- 从该地址读取一个字节的数据
- 将读取的数据存入累加器A中
MOVC A,@A+PC(近程查表)
- 将累加器A的内容与PC+3的内容(因为PC指向下一条指令的地址,而这个指令是3个字节的)相加,得到程序存储器的地址
- 从该地址读取一个字节的数据
- 将读取的数据存入累加器A中

这个方法其实很不方便,因为偏移量需要自己计算
3.2.5 数据交换指令
1.字节交换指令XCH组

这类指令的功能是将累加器A与源操作数的字节内容互换。源操作数有寄存器寻址、直接寻址和寄存器间接寻址等寻址方式。操作码分别为C5H~CFH。
目的操作数只能是累加器A ❗
示例:
2. 半字节交换指令组
XCHD A,@Ri
XCHD指令用于交换累加器A的低4位(低半字节)与由Ri(R0或R1)间接寻址的内部RAM单元的低4位。高4位保持不变。
这个指令的主要特点:
- 只能与内部RAM进行交换
- 只交换低4位数据
- 只能使用R0或R1进行间接寻址
示例代码:
在上述示例中,只有低4位(1011B和0101B)进行了交换,而高4位(0011B和1100B)保持不变,因此不影响符号位。
SWAP A
SWAP A指令用于交换累加器A中高4位和低4位的内容。这是一个单字节指令,执行时不影响任何标志位。

示例代码:
在上述示例中:
- 原始值3BH的高4位(0011B)和低4位(1011B)互换位置
- 执行SWAP A后得到B3H,即高4位变为1011B,低4位变为0011B
这个指令在BCD码运算和其他需要处理4位数据的场合特别有用。
3.2.6堆栈操作指令
入栈:PUSH direct
PUSH direct
- 执行指令后堆栈指示器
SP+1
指向栈顶的一个空单元
- 将直接地址direct单元内容送入SP所指示的堆栈单元。
- 此操作不影响标志位
例如,中断响应时保护DPTR的内容
出栈:POP direct
POP direct
- 将堆栈指示器SP所寻址的栈顶内容送入直接寻址单元direct
- 然后执行
SP-1
并送入SP
- 此操作不影响标志位