草庐IT

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

iron2222 2023-03-28 原文

重温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ㄒ)/~~

祝大家早安、午安和晚安

有关重温51汇编指令(附实验)的更多相关文章

  1. C51单片机——实现用独立按键控制LED亮灭(调用函数篇) - 2

    说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时

  2. 网络实验之RIPV2协议(一) - 2

    一、RIPV2协议简介  RIP(RoutingInformationProtocol)路由协议是一种相对古老,在小型以及同介质网络中得到了广泛应用的一种路由协议。RIP采用距离向量算法,是一种距离向量协议。RIP-1是有类别路由协议(ClassfulRoutingProtocol),它只支持以广播方式发布协议报文。RIP-1的协议报文无法携带掩码信息,它只能识别A、B、C类这样的自然网段的路由,因此RIP-1不支持非连续子网(DiscontiguousSubnet)。RIP-2是一种无类别路由协议(ClasslessRoutingProtocol),支持路由标记,在路由策略中可根据路由标记对

  3. 【Linux】初识Linux --指令Ⅰ - 2

    Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法,Linux…感兴趣就关注我吧!你定不会失望。目录1.ls显示当前目录下的文件内内容2.pwd-显示用户当前所在的目录3.cd-改变工作目录。将当前工作目录改变到指定的目录下1.cd-回到上一次待的工作空间2.cd..返回上一层目录1.相对路径:cd../aurora2.绝对路径:cd/home/aurora/lesson1/aurora3.cd~进入用户家目录4.cd/进入root目录4.mkdir-新建目录5.rmdir/rm-删除1.rmdir删除空文件夹2.rm删除1.rm-f2.rm-i3.rm-r1.ls显示当前目

  4. iOS快捷指令:执行Python脚本(利用iSH Shell) - 2

    文章目录前言核心逻辑配置iSH安装Python创建Python脚本配置启动文件测试效果快捷指令前言iOS快捷指令所能做的操作极为有限。假如快捷指令能运行Python程序,那么可操作空间就瞬间变大了。iSH是一款免费的iOS软件,它模拟了一个类似Linux的命令行解释器。我们将在iSH中运行Python程序,然后在快捷指令中获取Python程序的输出。核心逻辑我们用一个“获取当前日期”的Python程序作为演示(其实快捷指令中本身存在“获取当前日期”的操作,因而此需求可以不用Python,这里仅仅为了演示方便),核心代码如下。>>>importtime>>>time.strftime('%Y-%

  5. 第1部分 实验拓扑、终端服务器 - 2

    目录1.1访问Cisco路由器的方法1.1.1通过Console口访问路由器1.1.2通过Telnet访问路由器1.1.3终端访问服务器1.2终端访问服务器配置命令汇总1.1访问Cisco路由器的方法    路由器没有键盘和鼠标,要初始化路由器需要把计算机的串口和路由器的Console口进行连接。访问Cisco路由器的方法还有Telnet、WebBrowser和网络管理软件(如CiscoWorks)等,本节讨论前2种。1.1.1通过Console口访问路由器    计算机的串口和路由器的Console口是通过反转线(Rollover)进行连接的,反转线的一端接在路由器的Console口上,另一

  6. 【操作系统实验】Ubuntu Linux 虚拟机用户管理 - 2

    文章目录一、用户二、用户分类1、普通用户2、超级用户3、系统用户三、用户相关文件1、/etc/passwd文件2、/etc/shadow文件四、用户管理命令1、useradd2、adduser3、passwd4、usermod5、userdel一、用户Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统。在Linux系统中,任何文件都属于某一特定用户,而任何用户都隶属于至少一个用户组。用户名(username):每个用户账号都拥有一个惟一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后,就能够进入系

  7. 51单片机——74HC595的应用(SPI实践) - 2

    目录SPI总线SPI总线概述 SPI总线分类SPI优点及缺点SPI接口硬件原理SPI四种工作模式 74HC595应用74HC595芯片概述74HC595封装及管脚功能74HC595工作原理 ​编辑 74HC595串行转并行点亮LED灯 程序实现  Proteus运行结构示意图SPI总线SPI总线概述 SPI(SerialPeripheralinterface):串行外围设备接口 用途:用来在微控制器与外围设备芯片之间实现数据交换 特点:高速、全双工、同步 SPI总线分类四线制全双工SPI(同时收发)MISO    主机输入/从机输出MOSI    主机输出/从机输入SCLK   串行时钟CS或

  8. 基于51单片机、DS1302时钟模块的电子闹钟设计 - 2

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、设计原理1.DS1302介绍2.闹钟音乐播放原理二、程序设计1.DS1302.h2.ds1302.c3.music.h4.main.c三、电路图四、运行结果1.proteus仿真2.开发板实验五、总结六、附件提示:以下是本篇文章正文内容,下面案例可供参考一、设计原理1.DS1302介绍DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.0V~5.5V。该芯片采用普通32.768kHz晶振,DS1302工作时功耗很

  9. OSPF综合实验 - 2

    文章目录实验要求实验思路IP地址规划路由实验配置R1上配置R2上配置R3上配置R4上配置R5上配置R6上配置R7上配置R8上配置R9上配置R10上配置R11上配置R12上配置实验测试R10pingR4的环回R10pingR12的环回R10pingR1实验要求R4为ISP,其只能配置IP地址;R4与其他所有直连设备间均使用公有IP;R3-R5/6/7为MGRE环境,R3为中心站点;整个OSPF环境IP基于172.16.0.0/16划分;所有设备均可访问R4的环回;减少LSA的更新量,加快收敛,保障更新安全;全网可达实验思路IP地址规划公网IP随便配置,这里我R3-R4的网段为34.1.1.0/2

  10. ruby-on-rails - 设计 skip_confirmation!未能避免发送确认指令 - 2

    我的应用程序设置为如果用户使用Oauth或Openid登录,他们不必确认他们的电子邮件地址。但是,Devise仍在发送电子邮件确认。当我调用User.skip_confirmation时!我得到一个未定义的方法错误。我的模型:classUserfalsedefself.find_for_facebook_oauth(access_token,signed_in_resource=nil)data=access_token.extra.raw_infoifuser=User.where(:email=>data.email).firstuserelse#User.skip_confirm

随机推荐