汇编语言入门

概述

  1. 指令格式(最多包含4个区段):各区段之间用规定的分隔符分开

    [标号:]      操作码     [操作数]       [;注释]
    
    • 标号区段(当前指令行的符号地址)
    • 操作码区段(指令的操作行为,由操作助记符表征):42个操作码助记符(51单片机)(不区分大小写)
    • 操作数区段(指令的操作对象)
    • 注释区段(对指令的解释性说明):以英文分号开始,无须结束符号
    • 标识符:标号或汇编符号(由英文字母开头的1~6个字符组成)
    • 16进制地址:若存储单元地址的最高位>9时,应加前缀“0”以区别于标识符
    • 立即数:出现在指令中的额常数(应加前缀“#”以区别于地址)
  2. 简记符号(有明确的取值范围,不可越限使用)


指令系统

  1. 指令(CPU用于智慧功能部件完成某一指定动作的指令和命令):数据传输与交换类、算术运算类、逻辑运算及移位类、控制转移类

  2. 数据传送与交换类指令(31条):可实现RAM、SFR和ROM之间的数据传送和交换

    • 基本通式:<transfer> <dest>,<src>
      ;将元操作数(src)内容传送给目的操作数(dest),传送后源操作数的内容不变

    • 8种操作码助记符

      • MOV用于访问片内RAM
      • MOVX用于访问片外RAM
      • MOVC用于访问程序存储器
      • XCH和XCHD用于字节交换
      • SWAP用于A内半字节交换
      • PUSH和POP用于堆栈操作
    • 学习传送与交换类指令的关键在于掌握数据传送的目的和源

      • 立即数和ROM地址只能作为源操作数(单向箭头)
      • 内外ROM与A的数据传送只能用MOVC操作码助记符
      • 片外RAM与A的数据传送只能用MOVX操作码助记符
      • PUSH和POP只能对direct进行操作
      • 位数据传送只能在C(Cy标志位)与bit间进行
    • 寻址方式

      • 寄存器寻址:利用通用寄存器查找操作数的方法(通用寄存器:Rn、A、B、CY和DPTR)
      • 寄存器间接寻址:利用寄存器作为地址指针间接查找操作数的做法(间址寄存器:R0、R1和DPTR)
      • 变址寻址:利用两个寄存器内容之和进行间接查找操作数的做法(基址寄存器:DPTR、PC;变址寄存器:A)
  3. 算术运算类指令(24条):对程序状态字寄存器PSW中的CY、AC、OV和P有影响

    • 8种操作码助记符

      • ADD和ADDC用于加法运算

      • SUBB用于减法运算

      • MUL和DIV用于乘法和除法运算

      • INC和DEC用于增1和减1

      • DA用于十进制数加法调整

    • 7个节点表示算术运算指令共涉及7类操作数(@Ri、A、Rn、#data、B、direct和DPTR)

      • 除INC和DEC操作码外,算术运算都以A为目标操作数(A必须参与算术并存放运算结果)
    • 立即寻址:以指令中存在的立即数(#data或#data16)作为操作数的做法

  4. 逻辑运算及移位类指令(34条):可实现二进制逻辑操作

    • 逻辑运算指令中不以累加器A为目标寄存器的指令均不影响PSW中然和标志位,带进位的移位指令影响CY位

    • 10种操作码助记符

      • ANL、ORL和XRL分别用于逻辑与、逻辑或和逻辑异或运算
      • CPL用于求反运算
      • SETB和CLR用于置位和清零运算
      • RL、RLC、RR和RRC用于循环移位
    • 逻辑运算指令共涉及5种操作数(@Ri、A、Rn、#data、direct)

      • 除direct与#data的逻辑关系外,其余逻辑运算都与A有关,且几乎都以A为目的操作数
      • 位运算都以C为目的操作数
    • 循环移位指令可以实现A单独或C的闭环移位功能

    • 直接寻址:以指令中存在的片内RAM地址(direct)作为操作数地址的做法

  5. 控制转移类指令(22条):通过改变程序计数器PC的内容,进而实现程序转移功能

    • 18种操作码助记符

      • LJMP、AJMP、SJMP、JMP是无条件转移指令
      • JZ、JNZ、JC、JNC、JB、JNB、JBC、CJNE、DJNZ是条件转移指令
      • LCALL、ACALL、RET、RETI是子程序调用及返回指令
      • NOP是空操作指令
    • 条件转移指令快捷记忆法

      • direct和Rn都可实现“减一非零转移”
      • @Ri、A、Rn分别与#data、A与direct都可实现“比较不等转移”
      • A可实现为零或非零转移
      • 所有条件转移只能是在rel的范围内进行(-128~+127)
    • 相对寻址:利用偏移量rel修正转移目标地址的做法

    • 位寻址:利用位地址bit作为指令操作数的做法

  6. 寻址方法(CPU取的操作数的方法):寻址方式越多,计算机功能越强

    • 直接寻址:指令中包含direct形式操作数的寻址方式
    • 寄存器寻址:指令中包含通用寄存器形式操作数的寻址方式
    • 寄存器间接寻址:指令中包含“@间址寄存器”形式才作数的寻址方式
    • 立即寻址:指令中包含#data或#data16形式操作数的寻址方式
    • 变址寻址:指令中包含“@A+基址寄存器”形式的寻址方式(基址寄存器只能由DPTR或PC兼任)
    • 位寻址:指令中包含bit形式操作数的寻址方式
    • 相对寻址:指令中包含rel形式操作数的寻址方式
  7. 伪指令(汇编系统控制译码指令或指示性指令):一般不产生机器代码


程序设计步骤

  1. 分析问题,确定算法或解题思路

  2. 画流程图(程序框图):直观地表示出程序的执行过程或解题步骤和方法

  3. 编写程序:用汇编指令对流程图中的各部分加以具体实现

  4. 调试与修改


【学习笔记】汇编语言入门相关推荐

  1. javaSE学习笔记01 入门篇

    javaSE学习笔记01 入门篇 java语言概述 Java背景知识 java是 美国 sun 公司 在1995年推出的一门计算机高级编程语言. java早期称为Oak(橡树),后期改名为Java. ...

  2. mybatis学习笔记(3)-入门程序一

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(3)-入门程序一 标签: mybatis [TOC] 工程结构 在IDEA中新建了一个普通的java项 ...

  3. nginx学习笔记-01nginx入门,环境搭建,常见命令

    nginx学习笔记-01nginx入门,环境搭建,常见命令 文章目录 nginx学习笔记-01nginx入门,环境搭建,常见命令 1.nginx的基本概念 2.nginx的安装,常用命令和配置文件 3 ...

  4. React学习笔记:入门案例

    React学习笔记:入门案例 React 起源于 Facebook 内部项目,因为市场上所有 JavaScript MVC 框架都不令人满意,公司就决定自己写一套,用来架设 Instagram 的网站 ...

  5. Linux操作系统学习笔记【入门必备】

    Linux操作系统学习笔记[入门必备] 文章目录 Linux操作系统学习笔记[入门必备] 1.Linux入门 2.Linux目录结构 3.远程登录 3.1 远程登录Linux-Xshell5 3.2 ...

  6. JavaScript学习笔记之入门篇

    JavaScript学习笔记之入门篇 JavaScript引入 1. 页面级 js: 2. 外部js文件: JavaScript变量 1. 变量的作用: 2. 声明变量: 3. 变量赋值: 4. 单一 ...

  7. dubbo入门学习笔记之入门demo(基于普通maven项目)

    注:本笔记接dubbo入门学习笔记之环境准备继续记录; (四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务 需求:订单服务中初始化订单功能需要调用用户服务的获取用户信息的接口(订 ...

  8. Java学习笔记系列-入门篇-计算机基础

    Java学习笔记 Java学习笔记是一个持续更新的系列,工作多年,抽个空对自身知识做一个梳理和总结归纳,温故而知新,同时也希望能帮助到更多正在学习Java 的同学们. 本系列目录: 入门篇 计算机基础 ...

  9. Python学习笔记之入门基础

    课程链接:Python入门教程--基础阶段_哔哩哔哩_bilibili Python学习笔记 注释 单行注释: * 多行注释: 1.多行前面加# 2."""注释信息&qu ...

  10. Swi-Prolog学习笔记(入门篇)

    首先介绍一个学习swi-prolog 和amzi-prolog很靠谱的中文网站:http://hyry.dip.jp/tech/book/page/prolog/search_game_maxmin. ...

最新文章

  1. 对于tnsping的连接超时的功能补充(二)
  2. Spark Metrics配置详解
  3. 不确定规划及应用代码_性能测试划分之应用领域
  4. JQuery通过后台获取数据遍历到前台
  5. [转]Linux内核基础与常用命令总结
  6. markdown 本地链接_Markdown从入门到入坑
  7. webapi上传示例及调用方式(netframwork)
  8. Lanproxy任意文件读取漏洞复现(CVE-2021-3019)
  9. 如何下载全国行政边界线(国界、省界、县界、乡镇界)
  10. git冲突解决和放弃本地操作
  11. iApp裕v3语言认识us与ug
  12. 《实用回归分析》 何晓群 第五章
  13. Example 类的作用
  14. DHT网络 学习笔记
  15. HTML动画实现唱片封面,HTML5专辑封面创意设计
  16. Linux基础——磁盘配额
  17. PT2262/PT2272编解码集成电路介绍
  18. PHP implode()函数
  19. Qt 获取本地IP 和 本地主机名称
  20. C# 手机点菜带后台管理系统

热门文章

  1. Code3 将文件转换到byte数组中
  2. 2021-02-13L:1652 2.08---2.141576L
  3. 10008---光环效应
  4. 信息搜集工具:Maltego
  5. 什么是微服务?一看就会系列!
  6. 国内跨省游正式开放!旅行社要怎么抓住这个机会?
  7. java.util.zip.ZipException: only DEFLATED entries can have EXT descriptor
  8. 新版edge浏览器没有internet选项怎么办?
  9. 普加.大学生广告创意大赛公告
  10. 【FPGA】Vivado综合停滞、死机(PID Not Specified)解决方法