66 0

[经济学教育] 单片机原理及应用第三章--河海大学--考试自用 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

40%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
0 小时
注册时间
2018-7-19
最后登录
2018-7-19

楼主
;了看见咯空间来看 发表于 2025-11-24 12:45:07 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

3.1 汇编语言概述

汇编语言(Assembly Language)是一种面向机器的程序设计语言,它使用助记符来代替操作码,用地址符号来代替地址码,从而使得程序员能够以更接近人类理解的方式编写底层代码。

3.1.1 汇编语言指令格式

3.1.2 描述操作数的简记符号

---------------------------------------------------------------------------------------------------------------------------------

3.2 MCS-51指令系统简介

3.2.1 寻址方式

CPU获取操作数的方法被称为寻址方式。MCS-51单片机共支持七种不同的寻址方式:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、变址寻址、相对寻址以及位寻址。

这些寻址方式是对操作数存放规律的总结。在实际应用中,具体某条指令属于哪种寻址方式通常并不关键,也不会影响其使用效果,因此无需过分纠结于分类细节。

3.2.2 数据传送与交换类指令

RAM:类似于计算机中的内存,用于临时存储运行时数据,断电后数据会丢失。

ROM:类似于计算机的硬盘,用于永久保存程序代码和常量信息,即使断电内容也不会消失。

寄存器寻址

寄存器间接寻址

变址寻址

3.2.3 算术运算类指令

算术运算类指令主要用于实现加法、减法、乘法、除法以及增量(+1)、减量(-1)等基本数学运算功能,共包含21条相关指令。

立即寻址

直接寻址

3.2.4 逻辑运算及移位类指令

逻辑运算及移位类指令可完成与、或、异或、取反、置位、清零以及左/右移位等功能,总计有34条指令。

字节级别的运算通常将累加器A作为目的操作数(#data与direct之间的运算除外),而位级别的运算则以进位标志C作为结果的存储位置。

所有位(1位)运算指令均将进位标志C作为结果寄存单元;大多数字节(8位)运算指令则把累加器A作为结果的存放目标。

3.2.5 控制转移类指令

控制转移类指令通过修改程序计数器PC的值,实现程序执行流程的跳转,这类指令共有22条。

无条件转移

MCS-51单片机中不同跳转指令所支持的地址范围如下所示。“位”在此处指的是指令中用于表示目标地址的二进制位数,该数值决定了跳转指令的最大跳跃距离(即寻址范围)。

  1. LJMP - 16位地址
    • 含义:采用完整的16位地址进行跳转
    • 寻址范围:0000H ~ FFFFH(覆盖整个64KB程序空间)
    • 特点:可跳转至程序存储器任意位置
    • 示例
      assembly
      LJMP 1234H    ; 无条件跳转到地址1234H
      LJMP MAIN     ; 跳转到标号MAIN所在位置(无论其位于何处)
              
  2. SJMP - 8位地址
    • 含义:使用8位有符号偏移量进行相对跳转
    • 寻址范围:相对于当前PC值的-128到+127字节范围内
    • 特点:适用于短距离跳转,常见于循环结构和条件分支
    • 示例
      assembly
      LOOP:
      MOV A, #55H
      DJNZ R0, LOOP    ; 循环跳转(短距离)
      SJMP $           ; 原地跳转($代表当前地址)
              

相对寻址

相对寻址依赖于“相对偏移量”,用于相对转移指令中,表示从下一条指令地址到目标地址之间的偏移距离。

该偏移量是一个8位有符号数,取值范围为:

  • 十进制:-128 至 +127
  • 十六进制:80H 至 7FH

跳转目标地址计算公式为:
目标地址 = 当前PC值 + 当前指令长度(字节数) + rel
其中:
- 当前PC值:当前指令的起始地址
- 指令字节数:当前指令所占的字节总数
- rel:相对偏移量

rel
rel
direct

直接地址说明

= 直接地址:指明要访问的具体内存单元地址。
地址范围:00H ~ FFH,涵盖片内RAM区域及特殊功能寄存器(SFR)。
与立即数的区别:不带“#”符号,表示的是地址而非常数值。

#

位寻址

条件转移指令

条件转移指令主要包括以下三类:

  • JZ / JNZ —— 判断累加器是否为零后跳转(Jump if Zero / Not Zero)
  • CJNE —— 比较两数是否不等,若不等则跳转(Compare and Jump if Not Equal)
  • DJNZ —— 先递减寄存器值,若结果非零则跳转(Decrement and Jump if Not Zero)

3.2.6 伪指令

在汇编语言中,伪指令用于指导汇编器如何处理源代码,它们并不生成实际的机器指令,而是在汇编过程中起控制作用。常见的伪指令包括符号定义、数据存储分配、程序起始地址设定等。

例如,可以使用伪指令来定义常量、分配内存空间、设置程序入口点以及包含其他文件内容。这些指令帮助程序员更好地组织和管理代码结构,提高程序的可读性和维护性。

基于进位标志CY的转移(Jump on Carry)

这类转移指令根据进位标志位CY的状态决定是否跳转。当CY = 1时执行跳转,称为JC;当CY = 0时跳转,则为JNC。此类指令常用于无符号数运算后的条件判断。

比较不相等则跳转指令(CJNE - Compare and Jump if Not Equal)

CJNE指令用于比较两个操作数,若不相等则发生跳转。该指令同时会影响进位标志CY:如果第一个操作数小于第二个,则CY被置1;否则清零。此功能常用于数值大小判断。

注意:在此类操作中,CY标志应由系统内部自动设置,但在显示层面不应直接暴露给用户或显式呈现。

累加器A判零转移(Jump if Zero)

该类转移指令通过检测累加器A的内容是否为零来决定程序流向。若A=0,则执行跳转;反之继续顺序执行。这类指令适用于判断运算结果是否为空或完成特定条件分支处理。

循环控制指令(DJNZ - Decrement and Jump if Not Zero)

DJNZ指令先将指定寄存器或内存单元的值减1,然后判断结果是否非零。若不为零,则跳转到目标地址继续循环;为零则退出循环。该指令广泛应用于计数型循环结构中。

位条件转移指令(如JB, JNB, JBC等)

此类指令依据某个特定位的状态(置位或清零)来决定是否跳转。JB表示位为1时跳转,JNB表示位为0时跳转,JBC则在位为1时跳转并自动将其清零。这些指令常用于实时状态监控与响应处理。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:河海大学 单片机 decrement Assembly Language
相关内容:单片机原理应用

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-5 20:24