数据传送和交换

将R0←→R7,R4←→20H
  1. 程序从0000H地址开始
  1. 使用XCH和MOV指令实现数据交换
  1. 通过A累加器作为中间变量来实现交换
完整程序代码:

不带符号多字节加法

程序要求: 不带符号多字节加法,设被加数存放于片内RAM的20H(低位字节)、21H,加数存放于22H(低位字节)、23H(高位字节),运算结果的和数存放于20H(低位字节)和21H(高位字节)中,实现16位相加。
程序分析:
  1. 先将20H地址单元内容送入R0寄存器
  1. 再将22H地址单元内容送入R1寄存器
  1. 将被加数低字节内容送入累加器A寄存器
  1. 加上加数的低字节
  1. 将结果存回低字节单元
  1. 处理高字节相加,考虑进位
完整程序代码:

查表❗

查表命令主要有两种:
  • 用DPTR查表:- MOVC A, @A+DPTR (代码存储器)- MOVX A, @DPTR (外部数据存储器)
  • 用PC查表:- MOVC A, @A+PC
特点:
  • DPTR查表更灵活,可随意指定表的位置
  • PC查表只能查找当前程序计数器附近的表
  • 查表前需要将偏移量存入A中
  • 表通常位于程序存储器中,用DB/DW伪指令定义

近程查表(PC)

远程查表(DRTR)

notion image
  1. 乘2
设数据表中有1024个元素,每个元素为两个字节,则表格总长为2048个字节。
这是乘以2的核心原因。当我们在内存中访问数组或表格时,需要计算每个元素的实际内存地址。
  1. 进位的处理
C的使用非常关键。即使是实现这样简单的乘2、相加,关注C的使用仍是必要的
  1. 数据的存放
因为只有一个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 来决定走哪条“岔路”。
Loading...
Z_cosy
Z_cosy
浙江大学电气工程学院本科生
公告
🎉Welcome to Z-cosy🎉
-- 食用指南 ---
目前只有课程笔记以及电控学习笔记
陆续会整理更多内容!