微机原理第四章 汇编语言程序设计

微机原理笔记分享
课程链接:https://www.bilibili.com/video/BV1qv411Y7AAare_source=copy_web

微机原理第四章

  • @[TOC](微机原理第四章)
  • 汇编语言程序设计
    • 汇编指令
    • 汇编语言特点
      • 汇编语言
      • 高级语言
    • 汇编语言的结构
      • 完整的汇编语言源程序由段(代码段、数据段、附加段或堆栈段)组成;一个汇编语言源程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点。
      • 每个段由若干语句行组成。语句行是汇编的编程基础。所有的指令必须位于某个代码段内,伪指令可根据需要位于任一段内。
      • 段以“SEGMENT”开始,以“ENDS”结束由用户定义。
      • 在这里插入图片描述
    • 指令性语句
      • 标 : 指令助记符 操作数; 注释
      • 指令助记符
      • 操作数
      • 注释
    • 伪指令语句(指示性语句)
      • 名字 伪指令助记符 操作数; 注释
      • 名字
      • 指令助记符
      • 操作数
      • 注释
    • MASM中的表达式和运算符
      • 算术运算符 : 十 , 一 , * , / , MOD,SHL,SHR
      • 逻辑运算符:AND,OR,XOR,NOT
      • 关系运算符:EQ、NE、LT、LE、GT、GE
      • 数值返回运算符:OFFSET,SEG,TYPE,LENGH,SIZE
    • 伪指令语句
      • 数据定义语句:DB,DW,DD,DUP()
      • 表达式赋值语句:EQU
      • 段定义语句
      • 段分配语句ASSUME
      • 过程(子程序)定义语句
    • 伪指令
      • 段定义指令
      • 数聒段
      • 包含多个段的程序
    • DOS系统与中断
      • DOS系统概述
    • 汇编语言程序的基本结构
      • 在这里插入图片描述
    • 基本结构说明
      • 一个汇编语言源程序一般具有代码段、数据段、堆栈段和附加段。8086允许同时使用四个段。在程序中,只有代码段是必需段,其他段都为可选段。在实地址模式下,每个段的大小为小于等于64KB;
      • ASSUME伪指令只说明各段寄存器和逻辑段的关系,开没有为段寄存器赋值。因此,在源程序中,除代码段CS和堆栈段SS(在组合类型中选择了STACK参数)外,其他定义的段寄存器由用户在代码段起始处进行段基址装入。
      • 源程序代码段中都必须含自及回DU上尔分时下础.止当前程序,使其正确返回DOS状态的方法有以下几种:
    • 汇编程序设计基本步骤
      • 与高级语言程序设计类似,用汇编语言进行程序设计同样按以下步骤进行:
    • 汇编语言程序设计
      • 顺序程序设计
      • 循环程序设计
      • 分支程序设计
      • 子程序设计
    • 宏汇编
      • 独立程序段,定义后可被调用,与子程序相似
      • 宏定义
      • 宏调用
      • 宏展开
    • 宏与子程序的区别
      • 宏执行速度快
      • 宏使用灵活
      • 宏占内存多

汇编语言程序设计

汇编指令

标 : 指令助记符 操作数; 注释

  • 表示指令的符 地址,常作为转移指令的操作数,后面必须加“ : ”
  • 特殊字符和标记字
  • 具有段基址、偏移量和类型三种属性

指令助记符

  • 必不可少,表示操作码

操作数

  • 操作数数目,操作数组成类型和数制表示

注释

  • 注释前必须加“ ; ”

  • BEGIN: MOV AX,BX

伪指令语句(指示性语句)

名字 伪指令助记符 操作数; 注释

名字

  • 用符 地址表示,可有可无,名字后面不能跟“ : ”

指令助记符

  • 必不可少
  • 常见的伪指令语句有段定义语句、段分配指令、过程(子程序)定义指令、变量定义语句和程序结束语句等

操作数

  • 数目视具体要求决定

注释

  • 前必须加“ ; ”

  • 段定义语句 SEGMENT和ENDS
  • 段分配语句 ASSUME
  • 定义变量语句 DB,DW,DD,DQ
  • 等程序结束语句 END
  • 过程定义语句 PROC,ENDP

MASM中的表达式和运算符

算术运算符 : 十 , 一 , * , / , MOD,SHL,SHR

    • DA EQU 300
    • MOV AX, DA一80
    • MOV BX,DA MOD 100
    • MOV CX,DA/100
    • MOV DH,01100100B SHR 2

逻辑运算符:AND,OR,XOR,NOT

    • MOV AL,NOT OFFH
    • MOV BL,8CH AND 73H
    • MOV AH,8CH OR 73H
    • MOV CH,8CH XOR 73H

关系运算符:EQ、NE、LT、LE、GT、GE

    • MOV AX,10 H GT 16
    • ADD BL,6 EQ 0110B

数值返回运算符:OFFSET,SEG,TYPE,LENGH,SIZE

    • MOV BX,OFFSET DA1
    • MOV AX,SEG M1
    • MOV DS,AX
  • TYPE返回值

    • 变量:DB/DW/DD/DQ: 1/2/ 4/8

    • 标 :NEAR/FAR:一1/ 一2

      表达式赋值语句:EQU

        • COUNT EQU 100
          DATA EQU COUNT+2
          B1 EQU OFFSET A1
          C1 EQU ADD

        • 定位类型:表示该段的起始边界要求

          • 有PAGE/PARA/WORD/BYTE四种,分别以页/节/字/字节为边界。
        • 组合类型:告诉链接程序,本段与其它段的组合关系共6种:

          • NONE,PUBLIC, COMMON,STACK,MEMORY,AT
        • ‘类别’:使所有类别相同的段组成一个段组

          • 典型类别:‘STACK’、‘CODE’、‘DATA’

        段分配语句ASSUME

        • 告诉汇编程序各段与段寄存器的关系,保证生成正确的目标程序.
        • CS:指向代码段自动将段基址→CS
        • DS:数据段名
        • SS:堆栈段名
        • ES:附加段名

        过程(子程序)定义语句

      • 实现求1+2+…+4之和。

          • 考虑一个程序,编程计算以下8个数据的和,结果存放在AH寄存器:O1h,02h,05h,07h,10h,16h,17h,18h

            DOS系统与中断

            DOS系统概述

            • 中断处理程序

              • 中断的概念
              • 中断类型分类:256类中断
              • DOS中断:20H~2EH (DOS提供功能程序)
              • DOS系统功能调用:INT21H
            • DOS系统功能调用

              • DOS规定用中断指令INT21H进入各功能调用总入口,再为每个功能调用规定一个功能 ,以便进入相应子程序入口。
            • DOS功能调用的步骤

              • 系统功能 →AH

              • 调用参数→指定寄存器

              • INT 21H

              • 按规定取的出口参数

                • 返回参数:或在寄存器中
                  或直接显示等
            • 键盘功能调用

              • 1 功能调用:从键盘输入单字符并显示

                • 入口参数:无

                • 出口参数:AL寄存器存放输入字符的ASCI码值

                  • MOV AH,1
                    INT 21H
                • 执行上述指令,系统将扫描键盘,一旦有键按下,就将键值(ASCII)读入,先检查是否为Ctrl-Break,若是,则退出;否则,将键值→ AL,同时将字符显示在屏幕上。

              • 9 功能调用

                • 显示字符串

                • 入口:字符串首址→DS:DX‘$’作结束符

            • 5 功能调用

              • 将DL中字符→打印机

            汇编语言程序的基本结构

        循环程序设计

        • 两种结构

          • 至少执行一次循环体用于次数固定的程序

            • 例:下列程序执行后,AL、BL、CX和DX寄存器内容分别是多少p>

            • 例:AX寄存器中有一个16位二进制数,统计其中1的个数,并存入CL中。

          子程序设计

          • 子程序(过程)调用应处理好三个问题:

            • 保护断点:CS, IP入栈及出栈(CPU自动完成)

            • 保护现场:子程序中用到的寄存器/存储单元需保护

            • 参数传递:

              • 寄存器传递:速度快,参数少
              • 存储器传递
              • 堆栈传递
          • 寄存器传递参数

            • 名称:BCD2BIN
            • 功能:将一个字节BCD码
            • 转换成二进制数
            • 使用寄存器:CX
            • 入口参数:AL存放两位BCD码
            • 出口参数:AL存放二进制数
            • 调用其它子程序:无

          宏调用

          • 格式:宏名[实际参数1,实参2,…]
            又称实元,个数、顺序、类型与哑元一 一对应

          宏展开

          • 汇编时对每个宏展开

          宏与子程序的区别

          宏执行速度快

          • 子程序CALL/RET需入栈/出栈操作

          宏使用灵活

          • 子程序仅入口参数可变,而宏的哑元形式多样

          宏占内存多

          • 子程序只占一段空间;宏调用多少次,就插入/展开多少次

          声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年6月2日
下一篇 2022年6月2日

相关推荐