数据传送和交换❗
将R0←→R7,R4←→20H
- 程序从0000H地址开始
- 使用XCH和MOV指令实现数据交换
- 通过A累加器作为中间变量来实现交换
完整程序代码:
不带符号多字节加法❗
程序要求:
不带符号多字节加法,设被加数存放于片内RAM的20H(低位字节)、21H,加数存放于22H(低位字节)、23H(高位字节),运算结果的和数存放于20H(低位字节)和21H(高位字节)中,实现16位相加。
程序分析:
- 先将20H地址单元内容送入R0寄存器
- 再将22H地址单元内容送入R1寄存器
- 将被加数低字节内容送入累加器A寄存器
- 加上加数的低字节
- 将结果存回低字节单元
- 处理高字节相加,考虑进位
完整程序代码:
查表❗
查表命令主要有两种:
- 用DPTR查表:- MOVC A, @A+DPTR (代码存储器)- MOVX A, @DPTR (外部数据存储器)
- 用PC查表:- MOVC A, @A+PC
特点:
- DPTR查表更灵活,可随意指定表的位置
- PC查表只能查找当前程序计数器附近的表
- 查表前需要将偏移量存入A中
- 表通常位于程序存储器中,用DB/DW伪指令定义
近程查表(PC)
远程查表(DRTR)

- 乘2
设数据表中有1024个元素,每个元素为两个字节,则表格总长为2048个字节。
这是乘以2的核心原因。当我们在内存中访问数组或表格时,需要计算每个元素的实际内存地址。
- 进位的处理
C的使用非常关键。即使是实现这样简单的乘2、相加,关注C的使用仍是必要的
- 数据的存放
因为只有一个A,所以数据需要很多辗转腾挪(R4,R5)
双字节乘法
带符号的双字节二进制加减法程序
太难了,不想写
散转(Switch-Case)❗
散转,又称跳转表或计算跳转,是一种实现多路分支的程序设计方法。它的核心思想是,根据一个变量(索引)的值,直接计算出应该跳转到的程序地址,从而“分散”地跳转到不同的处理程序段。这在功能上类似于 C 语言中的
switch-case
语句。在8051单片机中,散转主要通过
JMP @A+DPTR
这条指令实现。DPTR
(数据指针): 这是一个16位的寄存器,我们用它来存放跳转表的基地址。跳转表就是一段连续的内存空间,里面存放了一系列跳转指令。
A
(累加器): 这是一个8位的寄存器,我们用它来存放相对于基地址的偏移量。
JMP @A+DPTR
: 这条指令执行时,CPU会将DPTR
的内容和A
的内容相加,得到一个最终的16位目标地址,然后将这个地址装入程序计数器PC
,使程序直接跳转到该目标地址去执行。- 计算公式:
(PC) ← (DPTR) + (A)
- 如果采用
AJMP
,那么指令长度为2个字节;采用LJMP
长度为3个字节
简单来说,就是用
DPTR
定位一个“路口”,用 A
来决定走哪条“岔路”。