在keil中debug分析单片机数据和函数调用过程(c51为例),使用寄存器组导致错误原因分析

news2025/1/12 17:55:06

寄存器参考
参考2
[寄存器组使用using参考](https://blog.csdn.net/weixin_46720928/article/details/110221835)

keil中的using关键字参考

官方文档里关于using的说明可参阅2个地方,(1)keil软件菜单栏->Help->uVision Heip,打开帮助文件,然后依次展开Ax51 Assembler User Guide -> Control Statement -> Reference -> USING,(2)帮助文件依次展开CX51 Compiler User‘s Guide-> Language Extensions -> Function Declarations -> Register Banks

C51单片机有关概念

PSW:(8个bit位)程序状态寄存器(下面汇编语言中就是对这个寄存器设置后使用不同寄存器器组),下面是修改使用寄存器组用到的位

在这里插入图片描述

寄存器组

从上面的图片可以知道,有4组寄存器每组寄存器中都有R0到R7,共8个字节。以第0组寄存器为例,地址是00h-07h。

程序寄存器组中的数据使用

(下面的程序实例中也有)从汇编中可以看出,寄存器组只是存储了运算的数据,而调用的执行命令是在存储命令的(code)内存中。存一个字节的数据使用一个寄存器组中的一个

汇编常用命令

参考:https://blog.csdn.net/zcx515545/article/details/26152169
MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;
MOVC(Move Code)读取程序存储器数据表格的数据传送;
MOVX (Move External RAM) 对外部RAM的数据传送;
XCH (Exchange) 字节交换;
XCHD (Exchange low-order Digit) 低半字节交换;
PUSH (Push onto Stack) 入栈;
POP (Pop from Stack) 出栈;

ADD(Addition) 加法;
ADDC(Add with Carry) 带进位加法;
SUBB(Subtract with Borrow) 带借位减法;
DA(Decimal Adjust) 十进制调整;
INC(Increment) 加1;DEC(Decrement) 减1;
MUL(Multiplication、Multiply) 乘法;
DIV(Division、Divide) 除法;

RET(Return from subroutine)子程序返回;
LCALL(Long subroutine Call)子程序长调用;
NOP (No Operation) 空操作;

整体c语言代码

#include <reg51.h>
#include <stdio.h>


int result;
void add_two(int a,int b,int c) using 1
	{
		result = a+b+c;
	}
void add_one(int a,int b) using 1
	{
		add_two(a,b,9);
	}


void main()
	{
		add_one(1,2);
		printf("result:%d",result);    //执行结果是9
	}

整体程序执行过程

在这里插入图片描述

从汇编语言分析数据变换

在这里插入图片描述

总结认知

导致计算错误的主要原因是上图中的绿线连接的部分:实际的数据存储和计算过程中并不是指向同一个地址的数据。上图中程序中函数add_one使用的1,2都是在寄存器组0中的R7,R6,R5,R4中(由于定义int需要使用2字节存储)。而在计算加的时候是指定了寄存器组1中的R7,R6,R5,R4,这当然会出现错误。切换使用寄存器的时候一定注意数据的传递情况,否则很可能出现错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1127894.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

被邀请为期刊审稿时,如何做一个合格的审稿人?官方版本教程来喽

审稿是学术研究中非常重要的环节&#xff0c;它可以确保研究的科学性和严谨性。审稿人的任务是检查文章是否符合学术规范&#xff0c;是否具有创新性&#xff0c;是否具有科学价值&#xff0c;以及是否符合期刊的定位和风格。因此&#xff0c;审稿人需要具有扎实的学术背景和丰…

SHELL编程基础2

文章目录 if语句if单分支应用案例 if多分支案例 for循环while循环正则表达式基本正则Perl兼容的正则 if语句 if单分支 if单分支的语法组成&#xff1a; 方式一: if 条件测试;then 命令序列 fi方式二 if 条件测试then 命令序列 fi应用案例 [rootsom day01]# vim user_v2.…

WPF中的绑定知识详解(含案例源码分享)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

带你深入了解git

目录 1、Git介绍1.1git是什么工具1.2git起到的作用1.2.1 个人开发&#xff1a;1.2.2 多人开发&#xff1a; 2、Git安装与下载项目代码2.1 下载安装git2.2 从仓库下载代码 3、创建仓库及提交代码3.1 创建仓库3.2 将本地代码以及文件提交到远程仓库3.2.1git全局配置3.2.2 远程仓库…

领域驱动设计:基于DDD的微服务设计实例

文章目录 项目基本信息战略设计战术设计后续的工作 用一个项目来了解 DDD 的战略设计和战术设计&#xff0c;走一遍从领域建模到微服务设计的全过程&#xff0c;一起掌握 DDD 的主要设计流程和关键 点。 项目基本信息 项目的目标是实现在线请假和考勤管理。功能描述如下&…

【数据中台建设系列之二】数据中台-数据采集

​ 【数据中台建设系列之二】数据中台-数据采集 上篇文章介绍了数据中台的元数据管理&#xff0c;相信大家对元数据模块的设计和开发有了一定的了解&#xff0c;本编文章将介绍数据中台另一个重要的模块—数据采集。 一、什么是数据采集 数据采集简单来说就是从各种数据源中抓…

美颜滤镜SDK,企业技术解决方案

企业越来越注重提升用户体验&#xff0c;而美颜滤镜SDK正是满足这一需求的强大工具。美摄美颜滤镜SDK是一款专为企业级应用打造的高效、稳定的美颜滤镜解决方案&#xff0c;能够帮助您的企业在瞬息万变的市场中保持竞争力。 一、强大的美颜滤镜功能 美摄美颜滤镜SDK拥有丰富的…

【wvp】wvp设备上可以开启tcp被动模式

目录 开启了 tcp被动模式 开启UDP模式 地平线不支持这种tcp情况 开启了 tcp被动模式 我的理解是zlm就会是tcp被动收流模式 tcpdump -i any host 10.1.3.7 and tcp 而wvp->浏览器&#xff0c;是SRTP,其实还是基于zlm8000的udp端口出来的 开启UDP模式 tcpdump -i any host…

面试算法40:矩阵中的最大矩形

题目 请在一个由0、1组成的矩阵中找出最大的只包含1的矩形并输出它的面积。例如&#xff0c;在图6.6的矩阵中&#xff0c;最大的只包含1的矩阵如阴影部分所示&#xff0c;它的面积是6。 分析 直方图是由排列在同一基线上的相邻柱子组成的图形。由于题目要求矩形中只包含数字…

解析一个月销售额过千万的商业模式——七人拼团

在当今的商业环境中&#xff0c;营销策略的运用对于企业的成功至关重要。其中&#xff0c;拼团模式作为一种以社交为核心的营销方式&#xff0c;正逐渐受到越来越多企业的关注。本文将探讨七人拼团模式&#xff0c;分析其奖励机制和特点&#xff0c;为企业家提供新的营销思路。…

如何设计出优秀的虚拟展厅,设计虚拟展厅有哪些步骤

引言&#xff1a; 虚拟展厅已经成为了当今数字时代的重要组成部分&#xff0c;无论是展示产品、推广服务&#xff0c;还是展示艺术品和文化遗产&#xff0c;虚拟展厅为用户提供了一个全新的互动体验。如何设计虚拟展厅成了很多人关注的焦点。 一.虚拟展厅设计的基本原则 虚拟…

5G RedCap工业智能网关

5G RedCap工业智能网关是当前工业智能化发展领域的重要技术之一。随着物联网和工业互联网的迅速发展&#xff0c;企业对于实时数据传输和高速通信需求越来越迫切。在这种背景下&#xff0c;5G RedCap工业智能网关以其卓越的性能和功能&#xff0c;成为众多企业的首选。 5G RedC…

双11电视盒子什么牌子好?数码达人测评25款整理电视盒子排名

双11买电视盒子什么牌子好&#xff1f;为了推荐更客观&#xff0c;这段时间我进行了25款主流电视盒子的深度测评&#xff0c;从芯片、内存、网络、散热、系统、广告、流畅度等多方面进行对比&#xff0c;整理了电视盒子排名&#xff0c;双十一想买电视盒子不知道怎么选可以参考…

应用程序无法正常启动0xc000007b的解决策略,多种解决方法分享

当我们在使用特定的软件或游戏时&#xff0c;我们可能会遇到一个特别令人头疼的问题—那就是"应用程序无法正常启动0xc000007b"的错误。但是&#xff0c;为何会出现这类情况和如何解决呢&#xff1f;接下来的内容&#xff0c;将会详细地为你阐释。 一.0xc000007b错误…

【小程序】实现一个定制的音乐播放器

应用地址&#xff1a;https://spacexcode.com/player 介绍 这是为自己制作的一个在线 Web 版的音乐播放器。众所周知&#xff0c;现在市面上的所有的音乐平台都是会员制。而免费的资源却分散在网络上的各个角落&#xff0c;为此&#xff0c;我收集了自己 喜欢的音乐&#xff0…

代码签名证书到期了怎么续费?

我们都知道代码签名证书最长期限可以申请3年&#xff0c;但有的首次申请也会申请1年&#xff0c;这种情况下证书到期了就意味着要重新办理&#xff0c;同样的实名验证步骤还需要再走一遍&#xff0c;尤其目前无论是哪种类型的代码签名证书都会有物理硬件&#xff0c;即使交钱实…

将本地代码上传至码云具体步骤

前言&#xff1a;假如我们在本地创建了一个新项目&#xff0c;现在想将这个项目上传至码云 第一步&#xff1a;码云上创建仓库 第二步&#xff1a;点击创建完成仓库 到这就已经完成了码云仓库的创建&#xff01;&#xff01;&#xff01; 第三步&#xff1a;打开cmd命令输入这…

微信小程序5

一、什么是后台交互&#xff1f; 在小程序中&#xff0c;与后台交互指的是小程序前端与后台服务器之间的数据通信和请求处理过程。通过与后台交互&#xff0c;小程序能够获取服务器端的数据、上传用户数据、发送请求等。 与后台交互可以通过以下方式实现&#xff1a; 发起网络请…

java对象深拷贝(Mapstruct)代码实现

这几天写的需求正在提测中&#xff0c;所以比较有空闲时间&#xff0c;正好来总结一下开发中遇到的问题并记录一下。 在开发过程中遇到这样一个问题&#xff1a;多个对象实体间要进行对象拷贝&#xff0c;并且对象里面还包含别的对象集合&#xff0c;对象名字也不同&#xff0…

那些只要一两行代码就能搞定的Python操作

Python是一种简洁、易读且功能强大的编程语言&#xff0c;有很多操作只需要一行代码就能完成。本文将介绍一些常用的单行代码操作&#xff0c;并分析其技术原理&#xff0c;让读者更深入地理解Python的简洁与高效。 1、列表推导式 列表推导式是Python中一种简洁的构造列表的方法…