微机原理第四章

319 阅读8分钟

微机原理笔记分享 课程链接:www.bilibili.com/video/BV1qv…

微机原理第四章

汇编语言程序设计

汇编指令

image.png

汇编语言特点

汇编语言

  • 面向机器/硬件程序代码效率高
  • 执行速度快,占内存少
  • 应用:实时控制、仪器仪表、系统软件等

高级语言

  • 可移植性好
  • 程序易编/易读/易学
  • 应用:科学计算、信息管理等

汇编语言的结构

完整的汇编语言源程序由段(代码段、数据段、附加段或堆栈段)组成;一个汇编语言源程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点。

每个段由若干语句行组成。语句行是汇编的编程基础。所有的指令必须位于某个代码段内,伪指令可根据需要位于任一段内。

段以“SEGMENT”开始,以“ENDS”结束由用户定义。

image.png

指令性语句

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

标号

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

指令助记符

  • 必不可少,表示操作码

操作数

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

注释

  • 注释前必须加“ ; ”

  • 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

    • image.png

  • LENGTH返回值

  • SIZE返回值

伪指令语句

数据定义语句:DB,DW,DD,DUP()

image.png

表达式赋值语句:EQU

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

      image.png

段定义语句

  • 样式

image.png

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

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

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

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

段分配语句ASSUME

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

过程(子程序)定义语句

image.png

伪指令

段定义指令

image.png

image.png

  • 段分配指令assume

    • 关联某一段寄存器和程序中某一个定义的段
  • 程序结束指令end

    • 汇编程序结束标志
    • 运算2^3

      image.png

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

      image.png

数聒段

image.png

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

      image.png

      image.png

      image.png

包含多个段的程序

image.png

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,同时将字符显示在屏幕上。

      • image.png

    • 2号功能调用:显示一个字符

      • 功能

        • 功能:单字符输出。即将以DL寄存器内容为ASCII码值的ASCi字符输出到屏幕上。
      • 入口参数:DL=要显示字符的ASCII码值

      • 出口参数:无

      • 格式

        • MOV DL,要显示的字符 MOV AH,2 INT 21H
      • 说明

        • 掌握的回车符和换行符的使用
      • image.png

    • 9号功能调用

      • 显示字符串

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

      • image.png

        image.png

    • 5号功能调用

      • 将DL中字符→打印机

      • image.png

  • 设置日期与时间

    • 2BH功能调用:设置日期 入口:CX/DH/DL:年/月/日 出口:AL=0/OFFH:有效/无效

    • 2AH功能调用:取得日期 入口:无 出口:CX/DH/DL:年/月/日

    • 2DH功能调用:设置时间 入口:CH/CL/DH/DL:时/分/秒/秒% 出口:AL=0/0FFH:有效/无效

    • 2CH功能调用:取得时间 入口:无 出口:CH/CL/DH/DL:时/分/秒/秒%

    • image.png

汇编语言程序的基本结构

image.png

基本结构说明

一个汇编语言源程序一般具有代码段、数据段、堆栈段和附加段。8086允许同时使用四个段。在程序中,只有代码段是必需段,其他段都为可选段。在实地址模式下,每个段的大小为小于等于64KB;

ASSUME伪指令只说明各段寄存器和逻辑段的关系,开没有为段寄存器赋值。因此,在源程序中,除代码段CS和堆栈段SS(在组合类型中选择了STACK参数)外,其他定义的段寄存器由用户在代码段起始处进行段基址装入。

源程序代码段中都必须含自及回DU上尔分时下础.止当前程序,使其正确返回DOS状态的方法有以下几种:

  • 采用DOS功能调用中的4CH号功能调用。
  • 采用标准程序法,适用于定义为FAR的过程中
  • 利用DOS的0号功能
  • 利用20H号软中断调用

汇编程序设计基本步骤

与高级语言程序设计类似,用汇编语言进行程序设计同样按以下步骤进行:

  • 分析问题,建立数学模型。
  • 确定算法。
  • 编制程序流程图。
  • 编写程序。
  • 上机调试。

汇编语言程序设计

顺序程序设计

  • 完全按指令书写的前后顺序执行每一条指令,是最基本、最常见的程序结构。

  • 主要用到数据传送类指令、算术运算类指令、逻辑运算和移位类指令

  • image.png

    image.png

    • 两双字的二进制数加法。在内存的First和 Second开始的区域中分别存放着2F365H和5E024 H两个数,要求求其和,并存入Third中。

      image.png

      image.png

      image.png

循环程序设计

  • 两种结构

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

      image.png

      image.png

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

        image.png

分支程序设计

    • 例:将BX中的16进制数转换为ASCII,存放到BUF开始的单元中,并显示出来。(十六进制数一ASCH)

      image.png

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

      image.png

    • 比较两个字符串

      image.png

子程序设计

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

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

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

    • 参数传递:

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

    • 名称:BCD2BIN

    • 功能:将一个字节BCD码

    • 转换成二进制数

    • 使用寄存器:CX

    • 入口参数:AL存放两位BCD码

    • 出口参数:AL存放二进制数

    • 调用其它子程序:无

      image.png

  • 存储单元传递参数

    • 数据段定义两个数组,分别求两数组元素之和(不计溢出)

      image.png

      image.png

宏汇编

独立程序段,定义后可被调用,与子程序相似

宏定义

  • 格式:宏名 MACRO[形式参数1,形参2,...] 又称哑元,可有1个/多个/无

    image.png

宏调用

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

宏展开

  • 汇编时对每个宏展开

image.png

image.png

image.png

image.png

宏与子程序的区别

宏执行速度快

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

宏使用灵活

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

宏占内存多

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

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