重温51汇编指令(附实验)

Python微信订餐小程序课程视频

https://blog.csdn.net/m0_56069948/article/details/122285951

Python实战量化交易理财系统

https://blog.csdn.net/m0_56069948/article/details/122285941

重温51汇编指令(附实验)

写在前面:

在电子控制的课上,老师带我们重温了一些51的汇编指令,有了一些新的思考,感觉非常的有趣,所以这里进行总结和尝试。

正文:

实验平台:

keil5

实验目标MCU:

intel的80C51BH

51寄存器的简单介绍:

通过debug窗口可以进行观察

符号以及寄存器意义:

1、r0~r7寄存器组的八个工作寄存器
2、a是累加器,用于运算以及存放数据
3、b是专用寄存器,用于MUL(乘法)、DIV(除法)存放第二操作数、乘积的高位字节、除法余数等。
4、psw属于程序状态字


4.1 p是奇偶标志位

p=1则累加器a中1的个数为奇数;p=0则累加器a中1的个数为偶数。


4.2 ov是溢出标志位,ov=0没有溢出;ov=1溢出


这里进行完ab的乘法运算很显然是溢出了,高8位放到了b中,低8位放在了a里。

4.3 rs是当前寄存器选择位,就是说选择不同的寄存器组。

4.4 f0用户标志位,用户可用软件自定义的一个标志位。

4.5 cy进位标志位,存放算术运算的进位标志,布尔运算中作累加位使用。



执行add指令之前,a是80H,r4是8aH,相加应该是10aH(都是16进制)。


执行完add指令之后,a变成了0aH,进位标志位cy变成了1。

ac辅助进位标志位,做BCD运算时,低四位向高四位进位或错位时,置1。

5、sp栈指针寄存器

默认sp的值位0x07,在执行堆栈操作、程序调用、子程序返回以及中断返回等指令时,sp的值自动+1或-1

6、dptr数据指针寄存器
7、pc程序计数器

程序执行到什么位置了


states没有查到专门解释,我觉的可能是指令执行的数目,因为没执行一条指令会+1,但有时候执行复杂一点的指令,会+3或者+4。

sec这个也没有查到,我感觉应该和时间有关。

汇编指令:

每一种MCU都有自己独特的汇编指令,有相似的地方,但也有很大的不同。所以汇编语言可移植性很不好,但胜在简单高效。

指令格式

[标号]:操作码 [目的操作数],[源操作数] ; [注释]

指令分类

  • 数据传送指令 29条

    • 把源地址中的操作数传送到目的地址(寄存器)中
  • 算术运算指令 24条

    • 加减乘除等,第一操作数放在累加器A中,第二操作数放在某个寄存器或者片内RAM中,运算结果会保存在A中,因为运算产的进位标志、奇偶标志和溢出标志等保存在PSW中。
  • 逻辑运算操作指令 24条

    • 逻辑操作与循环移位两类指令
    • 逻辑运算:逻辑乘、逻辑加、逻辑取反、异或等。
    • 也是先把一个操作数放在A中,执行结果也放在A中
  • 位操作指令 17条

  • 控制转移指令 17条

寻址方式

  • 直接寻址

    • MOV A,36H把内部RAM 36H中的数据放在累加器A中
  • 立即寻址

    • MOV A,#20H操作数前加‘#’号就是立即数,不加就是直接地址
  • 寄存器寻址

    • MOV A,R0把当前R6中的内容送到累加器A中
  • 间接寻址

    • MOV R0,#40H
    • MOV A,@R0

数据传送类指令

MOV内部数据传送指令


MOVC程序存储器读指令


MOVX外部数据传送指令

XCH整字节交换指令

XCHD半字节交换指令

算术运算类指令

ADD不带进位的加法指令

ADDC带进位的加法指令

  • 一开始给累加器a=0ach,再向累加器a中加98h,1010 1100 +1001 1000=1 0100 0101
  • 会出现进位,所以这个时候进位标志位cy为1,辅助进位标志位ac为1,溢出标志位ov为1

INC加1指令


SUBB减法指令

DEC减一指令


DA十进制调整指令


68+89=157 结果a=57 进位标志位cy=1,这就是BCD加法程序

MUL乘法指令

注意乘积,高八位再b中,低八位在a中


DIV除法指令

逻辑运算指令

  • ANL与
  • ORL或
  • XRL异或
  • CLR清零

移位指令

  • RL累加器左环移
  • RR累加器右环移
  • RLC累加器带进位左环移
  • RRC累加器带进位右环移

控制转移类指令

  • LJMP长转移指令
  • AJMP绝对转移指令
  • SJMP短转移指令
  • JMP间接转移指令
  • JZ条件转移指令(a=0)
  • JNZ条件转移指令(a不等于0)
  • CJNE比较转移指令
  • DJNZ减一条件转移指令
  • LCALL调用指令(长)
  • ACALL绝对调用指令
  • RET返回指令(子程序)
  • RETI返回指令(中断服务程序)

写在最后:

最后,希望上海疫情早点过去,我不想我的学生生活天天呆在宿舍里。/(ㄒoㄒ)/~~

祝大家早安、午安和晚安

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

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

相关文章

第四章 C++数据类型

#include#includeusing std::cout;using std::cin;using namespace std;int main(){ // int a; //布尔 bool check; check0;//初始化为false check true; //字符 char ch; ch0; cout<< ch <<endl; cout<<(int)ch<<endl; for(int i32;i<128;i) { …

HttpClient 学习整理(转)

来自 http://www.blogjava.net/Alpha/archive/2007/01/22/95216.htmlHttpClient 是我最近想研究的东西&#xff0c;以前想过的一些应用没能有很好的实现&#xff0c;发现这个开源项目之后就有点眉目了&#xff0c;令人头痛的cookie问题还是有办法解决滴。在网上整理了一些东西&…

Hyperledger Fabric 通道配置文件和容器环境变量详解

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 摘要 Fabric 网络启动的过程中需要进行大量配置&#xff0c;新学时对各个配置的作…

课程作业二

课程作业二 github链接 题目要求&#xff1a; 编写一个程序&#xff0c;要求计算给定的圆的半径求圆的面积&#xff0c;并将所结果打印出来。需要建立一个工程&#xff0c;将程序写为两个.cpp与一个.h文件。 文件分离的感想&#xff1a; 对于本次作业&#xff0c;是一道我们平时…

SSH HTTPS 公钥、秘钥、对称加密、非对称加密、 总结理解

2019独角兽企业重金招聘Python工程师标准>>> 作者&#xff1a;shede333主页&#xff1a;http://my.oschina.net/shede333 && http://blog.sina.com.cn/u/1509658847版权声明&#xff1a;原创文章&#xff0c;版权声明&#xff1a;自由转载-非商用-非衍生-保…

windows下wamp安装

1.apache安装 php模块添加&#xff1a;LoadModel php5_module D:/wamp/php/php5apache2_2.dll 然后搜索“addtype”&#xff0c;在下方加入 AddType application/x-httpd-php .php 这句话&#xff0c;以使你的服务器能够识别php文件。 2.php安装 php.ini 打开mysql扩展 3.mysql…

图说Oracle基础知识

http://www.cnblogs.com/hsiang/ 本文版权归作者和博客园共有&#xff0c;欢迎转载&#xff0c;但未经作者同意必须保留此段声明&#xff0c;且在文章页面明显位置给出原文连接&#xff0c;谢谢。转载于:https://www.cnblogs.com/zbj815/p/6773508.html

petite-vue源码剖析-逐行解读@vue-reactivity之effect

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 当我们通过effect将副函数向响应上下文注册后&#xff0c;副作用函数内访问响应式对…

string.Format 格式化

1、格式化货币&#xff08;跟系统的环境有关&#xff0c;中文系统默认格式化人民币&#xff0c;英文系统格式化美元&#xff09; string.Format("{0:C}",0.2) 结果为&#xff1a;&#xffe5;0.20 &#xff08;英文操作系统结果&#xff1a;$0.20&#xff09; 默认格…

8步教你打开Android之门 NDK入门教程

这是一篇Android NDK开发的入门教程&#xff0c;在这一教程结束后&#xff0c;你将创建你自己的项目&#xff0c;从Java代码简单地调用原生C语言代码。 本文为一篇外文翻译&#xff0c;我们将介绍如何学习安装 Android NDK 并开始使用它。在这一教程结束后&#xff0c;你将创建…

升级nginx,查看已经安装的模块,并隐藏或者修改版本号

升级前&#xff0c;查看已经安装的版本以及模块[rootmail ~]# /opt/nginx/sbin/nginx -Vnginx version: nginx/0.5.34 built by gcc 3.4.6 20060404 (Red Hat 3.4.6-3)configure arguments: --prefix/opt/nginx --sbin-path/opt/nginx/sbin/nginx --conf-path/opt/nginx/conf/n…

SpringCloudAlibaba微服务docker容器打包和部署示例实战

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 概述 我们使用前面《SpringCloudAlibaba注册中心与配置中心之利器Nacos实战与源码…

MongoVUE的Collections数据不显示的解决方法

问题描述&#xff1a; 使用 mongoDB数据库&#xff0c; 数据添加成功了&#xff0c;使用命令行能查询出来&#xff0c;但在MongoVUE 中数据却不显示 (我使用的是 mongoDB 3.4 的版本) 原因&#xff1a;引擎问题&#xff0c;只要降到2.X版本就可以显示了     3.x默认是wire…

(3)[wp7数据存储] WP7 IsolatedStorage系列篇——通过XmlSerializer读写XML文件 [复制链接]...

发表于 2012-5-17 15:51:07 |只看该作者 |倒序浏览 分享到&#xff1a;本帖最后由 agameboy 于 2012-5-17 17:08 编辑这一篇我们会通过XmlSerializer读写XML文件&#xff0c;跟多的相关文章请参考WP7 IsolatedStorage系列篇&#xff01;需要的命名空间&#xff1a;using System…

SaltStack WEB UI Halite初体验

闲来无聊&#xff0c;话说saltstack webui halite还一直没玩&#xff0c;于是就凑今天体验一把&#xff1b;很多尝鲜的同学都说halite的功能较少&#xff0c;而其也正符合其说明console&#xff0c;不过其UI我还是蛮喜欢的&#xff0c;个人觉得比较清新简洁、挺好下面就来安装体…

Envoy熔断限流实践(二)Rainbond基于RLS服务全局限流

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

UV坐标

1.什么是uv坐标 所有的图象文件都是二维的一个平面。水平方向是U&#xff0c;垂直方向是V&#xff0c;通过这个平面的&#xff0c;二维的UV坐标系。我们可以定位图象上的任意一个象素。但是一个问题是如何把这个二维的平面贴到三维的NURBS表面和多边形表面呢&#xff1f; 对于N…

再说WCF Data Contract KnownTypeAttribute

WCF 中的序列化是用DataContractSerializer,所有被[DataContract]和[DataMemeber]标记的类和属性会被DataContractSerializer序列化。在WCF中使用Contract模式来分辨和指定序列化/反序列化的类型&#xff0c;它是通过http://xmlns/Class这样的命名空间来标识这个序列化的对象的…

pyinotify结合ftplib自动上传新建的文件

应用场景&#xff1a;从国内往国外上传&#xff0c;因国际带宽影响&#xff0c;速度很慢&#xff0c;于是做了一个中转FTP&#xff0c;而自动上传需求也就诞生了。代码地址&#xff1a;https://github.com/coocla/linux/blob/master/ftp/autoupload_ftp.py sftp类型&#xff1…

EFCore 的 DbFirst 模式

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…