微机原理笔记分享
课程链接: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状态的方法有以下几种:
- 汇编程序设计基本步骤
-
- 与高级语言程序设计类似,用汇编语言进行程序设计同样按以下步骤进行:
- 汇编语言程序设计
-
- 顺序程序设计
- 循环程序设计
- 分支程序设计
- 子程序设计
- 宏汇编
-
- 独立程序段,定义后可被调用,与子程序相似
- 宏定义
- 宏调用
- 宏展开
- 例
- 宏与子程序的区别
-
- 宏执行速度快
- 宏使用灵活
- 宏占内存多
- 汇编指令
- 汇编语言特点
-
- 汇编语言
- 高级语言
- 汇编语言的结构
-
- 完整的汇编语言源程序由段(代码段、数据段、附加段或堆栈段)组成;一个汇编语言源程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点。
- 每个段由若干语句行组成。语句行是汇编的编程基础。所有的指令必须位于某个代码段内,伪指令可根据需要位于任一段内。
- 段以“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
- MOV AH,1
-
执行上述指令,系统将扫描键盘,一旦有键按下,就将键值(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进行处理,非常感谢!
-
-