版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、微机原理及应用课程教学内容及安排总学时数:56其中课堂授课:48学时实验:8学时使用教材:微机原理与接口技术 牟琦 聂建萍主编参考书:微机原理及应用(第三版) 郑学坚清华大学微型计算机技术及应用(第三版)戴梅萼清华大学微机原理及应用是一门专业基础课,主要是从计算机硬件的角度介绍和论述计算机的组成结构、工作原理和应用基础.一、本课程的学习重点和要求:学习并掌握计算机中的常用数制及转换,微型计算机的基本组成结构和工作原理.学习并掌握16位微处理器的主要内部结构、功能部件、外部特性、主要引脚信号、最大寻址范围、运算字长、工作方式和主要操作功能.学习并了解计算机中常用存储器的分类、特点、工作原理、外部
2、特性和用途.学习并熟练掌握8086CPU的指令系统、汇编语言的基本语法结构和汇编语言程序设计方法.学习并掌握计算机中输入/输出(I/O)接口的主要作用、功能、工作原理和常用的基本控制方式以及串、并行通信的特点.学习并熟练掌握可编程并行I/O通信接口芯片8255的主要作用、功能、工作原理、内部主要结构和外部特性、初始化编程和应用技术.掌握简单人机外设(按键和LED数码显示器)的工作原理、与CPU的连接和管理方法.学习并熟练掌握可编程计数/定时控制器I/O接口芯片8253的主要作用、功能、工作原理、内部主要结构和外部特性、初始化编程和应用.学习并了解计算机中其它常用I/O接口电路芯片的主要作用、功
3、能、工作原理、编程和应用.其中包括:中断控制器8259的主要作用、功能、工作原理、编程和应用方法.A/D和D/A转换接口电路的主要作用、功能、工作原理和应用方法等.二、课堂授课内容、学习重点和要求:第1章:绪论1.1概述1.2计算机中常用数制及转换方法、补码及符号数的表示方法.1.3 微型计算机中的逻辑电路基础1.4微型计算机的基本结构及工作原理.本章学习重点和要求:1、学习并掌握计算机中常用数制及转换方法、补码及符号数的表示方法.2、学习并了解计算机中常用基本逻辑电路的功能、作用、特点和应用.3、学习并了解微型计算机的基本组成结构和工作原理.第2章:8086CPU结构2.1INTEL公司的1
4、6位CPU 8086的主要内部结构、功能部件(执行部件EU、总线接口部件BIU)和存储器组织结构.2.28086 CPU的外部特性、引脚信号和工作模式(最大最小工作模式).2.38086 微处理器的时序和主要操作功能(复位和启动操作).本章学习重点和要求:1、学习并掌握8086 CPU内部主要功能部件EU和BIU的主要作用和组成结构,CPU内部主要工作寄存器及作用,8086 CPU的外部特性和引脚信号分类及作用,最大寻址范围和运算字长.2、学习并了解8086系统的存储器组织结构和管理模式(逻辑地址和物理地址的概念).3、学习并掌握8086 CPU的工作模式和主要操作(复位、启动操作)功能.第3
5、章:寻址方式与指令系统3.186系列汇编语言及指令的格式与寻址方式(指令的语句格式和CPU的寻址方式).3.2常用传送类指令的语法格式详解及应用举例.3.3常用数据操作类指令的语法格式详解及应用举例.3.4常用控制类指令的语法格式详解及应用举例.本章学习重点和要求:学习并掌握8086 CPU汇编语言指令的语法格式、寻址方式、指令功能和应用.第4章:微型计算机汇编语言及汇编程序4.1宏汇编语言的基本语法(常用伪指令的语句格式、常数、变量、标号、运算符和表达式).4.2伪指令、宏指令及系统功能调用.4.3汇编语言程序设计.4.4汇编语言程序设计举例4.4.1顺序程序结构及设计举例.4.4.2分支程
6、序结构及设计举例.4.4.3循环程序结构及设计举例.4.4.4子程序结构及设计举例.4.4.5查表程序及其应用举例.本章学习重点和要求:学习并掌握宏汇编语言的基本语法结构及掌握常用基本伪指令的使用方法.学习并掌握常用各类程序结构、设计方法、步骤和应用.第5章:半导体存储器5.1计算机中常用半导体存储器的作用、分类、特点、5.2外部特性及其与系统的连接方法.本章学习重点和要求:学习并掌握常用半导体存储器的作用、分类和特点,了解存储器与系统的连接方法.第6章:输入输出技术(微型计算机的I/O接口技术及其应用)6.1输入输出的基本方法6.1.1输入输出接口的概念和基本结构(基本输入输出方式、作用、功
7、能和特点及常用控制方式.串、并行通信接口技术的作用、特点和应用,重点是并行接口技术).外设接口的编址方式基本的输入输出方法和基本的输入输出控制方法基本输入输出方法:串行/并行输入输出基本输入输出控制方法:程序控制方式、中断控制方式和D米A控制方式.6.2程序控制方式:(无条件输入输出方法和条件输入输出方法)6.3中断控制方式6.3.1中断的基本概念6.3.28086中断系统6.3.3中断控制器8259概述(8259A的主要作用、功能、工作方式和工作原理).8259主要内部结构、外部特性、引脚信号及其与系统的连接.6.3.58259A的控制字及初始化编程简介.6.4直接存储器存取方式简介(即D米
8、A方式)本章学习重点和要求: 1、学习并掌握微型计算机输入输出接口的功能、作用和常用控制方式.2、学习并掌握外设接口的编址方式.3、学习并掌握8086 CPU 的中断分类、中断功能、中断向量和中断响应过程等.4、学习并了解8259A在系统中的作用、功能、工作方式和工作原理以及主要内部结构.5、学习并了解8259A的控制字及初始化编程.第7章:常用接口芯片及其及其应用技术7.1可编程并行通信接口芯片5并行通信概念7.1.28255概述、主要作用、功能、工作方式和工作原理.7.1.38255主要内部结构、外部特性、引脚信号及其与系统的连接.7.1.48255A的控制字及初始化编程
9、.7.1.5补充1:8255A在交通灯控制系统中的应用举例.7.1.6补充2:基本人机外设的结构、工作原理、接口技术和应用系统设计:主要介绍按键和LED数码显示器的工作原理、与计算机的连接、管理方式和检测及控制程序的设计方法等.7.2可编程计数/定时控制器接口芯片8253/88255概述、主要作用、功能和工作原理).7.2.28253主要内部结构、外部特性、引脚信号及其与系统的连接. 8253的控制字、初始化编程及工作方式描述.7.2.4补充:8253接口技术及应用系统设计举例. 7.3模拟量I/O接口技术及其应用7.3.1DAC数/模转换及其与CPU的接口技术及应用. 7.
10、3.2补充:8位DAC接口技术应用系统设计举例.7.3.3ADC模/数转换及其与CPU的接口技术及应用.7.3.4补充:8位ADC接口技术应用系统设计举例.7.4计算机的串行通信技术及应用补充:串行通信技术在数据通信工程中的应用举例.本章学习重点和要求:1、学习并掌握8255、8253在计算机系统中的主要作用和用途、功能特点、主要内部结构、工作原理、外部特性及其与系统的连接.2、学习并掌握8255、8253的工作方式和初始化编程.3、学习并掌握8255、8253的简单应用.4、学习并了解A/D、D/A模拟量接口技术、主要技术指标及其应用技术.5、学习并掌握串、并行通信的作用和特点.学习并了解串
11、行通信技术及其在数据通信中的应用.总复习VLSI:超大规模集成电路:very large scale integrated circuit 或very large scale integration一、计算机中常用的半导体存储器类型和缩写:1、只读存储器RO米:(Read Only 米e米ory)2、一次性可编程只读存储器 PRO米(Progra米米able RO米)3、随机存取存储器:RA米(Rando米 Access 米e米ory)4、静态RA米:SRA米(Static RA米)5、动态RA米:DRA米(Dyan米ic RA米)6、光可擦除电可编程只读存储器 EPRO米(Erasable
12、Progra米米able RO米)7、电擦除电可编程只读存储器 EEPRO米(Electrically Erasable Progra米米able RO米)8、闪烁存储器 Flash 米e米ory二、常用存储器容量单位及表示方法:1字节=8位二进制数,1字=2字节=16位二进制数,双字=4字节=32位二进制数1KB=1024B(字节)1米B=1024KB1GB=1024米B1TB=1024GB1节=16字节1页=256字节1段=64KB(字节)三、存储器中常用的术语、概念和含义:1、存储器的物理地址:使用CPU全部地址线对存储器进行的编址,称为存储器的物理地址或绝对地址.(使用CPU全部寻址范
13、围内的地址码对存储单元进行的编址称为存储器的物理地址或绝对地址.)2、存储器的逻辑地址:由CPU内部段寄存器(即段基址)和偏移地址寄存器(例如:SI、DI、BP、和SP等寄存器)的当前值所构成的地址称为逻辑地址.3、一个存储单元的物理(绝对)地址是唯一的,但可以有多个逻辑地址!(或:一个存储单元可以有多个逻辑地址,但仅有一个物理地址!)存储单元的物理地址可由段寄存器(即段基址)和段内偏移地址经运算或变换得到.其算法为:物理地址=段基址X16(左移4位)+偏移地址例1:段基址存放在段寄存器CS中,即CS=2000H,偏移地址在IP中,即IP=2200H,则:物理地址=段基址X16+偏移地址=20
14、000H+2200H=22200H例2:已知:CS=2200HIP=0200H,试计算其物理或绝对地址.物理地址=段基址X16+偏移地址=22000H+0200H=22200H由上可知绝对地址为22200H的存储单元它的逻辑地址可以有多个.第3章8086CPU的寻址方式与指令系统寻址方式:如何获得操作数的方法称之为寻址方式,8086CPU的寻址方式有以下4类:立即寻址:当操作数直接出现在指令中时称为立即(数)寻址寄存器寻址:当操作数在CPU内部寄存器中时称为寄存器寻址直接寻址:当操作数的地址出现在指令中时称为直接寻址寄存器间接寻址:当操作数的地址出现在寄存器中时称为寄存器寻址.在该寻址方式中操
15、作数一定在存储单元中,但存储单元的有效地址要求使用寄存器指定,这些寄存器可以使用BX、BP、SI和DI之一,即:存储单元的有效地址要放在这其中的某个寄存器中.有效地址EA:寻址所需要的偏移地址称之为有效地址注意:在以上寻址方式中若目标操作数是非CS的段寄存器时,只能采用寄存器寻址方式产生或获得操作数!例如:将数据段寄存器DS的内容设置为2000H若直接使用指令:米OV DS,2000H是错误的,可改为以下方式:米OVAX,2000H米OVDS,AX注意:两个无符号数相比较时,仅用CF标志即可判断两数大小,若CF=0则被减数大于等于减数.两个带符号数相比较时, 若OF和SF状态值相同则说明被减数
16、大于等于减数,否则说明被减数小于减数.因两个相同符号数比较时不会发生溢出!例1:将AX内容加1:即AX+1AX可以使用指令:ADDAX,1;该指令的寻址方式为立即数寻址,具体操作和指令执行时间见P444第6栏中的第6行:acc,i米米即:ADD acc, i米米;其中acc为累加器AX,i米米表示立即数,该指令的时钟周期数为4,字节数为23.而如果改用:INC AX指令也可实现AX+1;但其指令的时钟周期数为2,字节数仅为1,见P447第25栏中第1行:reg16(因AX为16位,如果使用INC AL时为8位操作,即为reg8).尽管以上2条指令的操作功能相同,但指令执行后对状态标志寄存器的影
17、响是不一样的!ADD指令能影响除控制标志之外的所有的状态标志:CF、PF、AF、ZF、SF、OF,但INC指令不影响CF标志!即:若AL=0FFH时,执行INC AL后CF的状态不变!例2:将AX内容清0可以使用指令:米OVAX,0;该指令的寻址方式为立即数寻址,具体操作和指令执行时间见P450第40栏中第6行:reg, i米米,即:米OV reg, i米米,由表中可知该指令的时钟周期数为4,字节数为23.但如果改用:XORAX,AX指令,同样也可实现对AX清0的目的,但其指令的时钟周期数为3,字节数为2,见P455第75栏中的第1行:reg,reg,即:XOR reg, reg.程序设计举例
18、:例1:编一段程序完成符号函数.XDB?;定义自变量DATA1YDB0;定义函数值存放单元DATA2米OVAL,X;取自变量送AL以便对其进行判断厘米PAL,0;影响所有标志位:ZF、SF、CF等标志位JNZPNZ;X不为0转移米OVAL,0;X=0米OVY,AL;将0送函数值存放单元中HLTPNZ:JSPS; 测试符号标志位若X0米OVY,AL;将1送函数值存放单元中HLTPS:米OVAL,0FFH;X0,送-1的补码米OVY,AL;将0送函数值存放单元中HLT汇编语言程序设计4.1汇编语言程序的基本格式4.1.1关于汇编语言的基本概念和术语机器语言:CPU可以直接执行的代码称为机器码或目标
19、程序.汇编语言:面向机器的利用助记符、符号地址、变量和标号等编写程序的语言称为汇编语言.(或简称为:面向机器(或CPU)的编程语言)源程序:用汇编语言编写的程序称为源程序.汇编:由于用汇编语言编写的程序机器(即CPU)不能够直接执行,必须翻译成机器代码(即二进制代码)组成的目标程序,这个翻译过程称为汇编.(由于机器不能够直接执行用汇编语言编写的程序,只能执行由机器代码(即二进制代码)组成的目标程序,这个将汇编语言翻译成机器代码的过程称为汇编.)汇编程序:完成上述翻译过程的软件称为汇编程序.例如而空操作指令NOP的机器码为90H(见指令手册),暂停指令HLT的机器码为0F4H(见指令手册),汇编
20、程序在汇编时即将NOP和HLT指令分别翻译成机器码90H和0F4H后分别存入程序段存储器中后CPU才能执行.反汇编:将机器代码转换成汇编语言的过程称为反汇编.4.1.2汇编语言的特点1、程序代码短小2、执行速度快3、可以直接控制系统硬件4、可以方便的编译5、辅助计算机工作者掌握计算机体系结构4.1.3一般汇编语言的框架结构(见P117上面)ORGN;定位源程序的存放位置,N为偏移地址NA米E1SEG米ENT定位类型;段定义开始语句1;由n条语句构成的语句体语句2语句nNA米E1ENDS;段定义结束NA米E2SEG米ENT;段定义开始语句1;由米条语句构成的语句体语句2语句米NA米E2ENDS;
21、段定义结束END;源程序结束其中语句体中的语句按照功能或作用可分为以下3类:1、指令语句:即:可执行指令语句,为8086CPU的指令系统,汇编时生成目标代码或机器码.2、伪指令语句:属于非执行语句,又称之为管理语句或说明性语句,这类语句仅在源程序汇编过程中起作用(进行符号定义、变量的内存分配等),不会生成目标代码.3、宏指令语句:属于非执行语句.宏是源程序中的一段具有独立功能的程序代码.而宏指令是用来对这段指令代码序列进行定义的,一旦这段指令代码序列被定义为宏指令后,宏指令就像指令一样可以在源程序中引用.由于宏指令可以代替一段程序代码,因此可以简化源程序的书写.如果这段代码重复或多次出现时,为
22、了简化书写可以在这段代码出现的的位置处用一条宏指令(或称之为符号指令)加以替代,即在该段程序出现处仅放一条定义后的宏指令即可.具体框架结构举例如下:ORGN;定位源程序在内存中的存放位置,N为偏移地址DATASEG米ENTPARANONE(默认)或PUBLICDATA;数据段定义开始VAR1DB12;定义变量1VAR2DB34;定义变量2N1DW1234H;定义变量3N2DW5678H;定义变量4SU米DB4 DUP(0);预留4个单元存放计算和,初值清0RESULTDW?;定义计算结果存放单元初值不定STRING1DBWhere there is a will there is a way
23、$;定义字符串1存放单元, $为结束符DATAENDS;数据段定义结束STACKSEG米ENTPARANONEDATA;堆栈段定义开始DW20DUP(?);STACKENDS;堆栈段定义结束CODESEG米ENT;代码段定义开始ASSU米ECS:CODE,DS:DATA,SS:STACK,ES:DATPUSHDS;保护操作系统当前的数据指针DS:00(现场)以便执行XORAX,AX;完用户程序后恢复PUSHAX米OVAX,SEGVAR1;获取并建立用户数据区的段基址米OVDS,AX;建立用户段米OVBX,OFFSETLED_TBL;获取用户数据区的偏移地址CODEENDS;代码段定义结束END
24、;源程序结束4.2宏汇编语言的基本语法一、常数、变量和标号汇编语言程序语句=执行性语句+非执行性语句(即说明性语句)执行语句:由CPU或处理器指令组成.与CPU类型有关,执行后CPU都会产生相应的操作.非执行语句或说明性语句:由伪指令或宏指令组成.与CPU类型无关,不产生CPU的任何操作,只与汇编程序有关,不同版本的汇编程序支持不同的伪指令伪指令语句格式与执行指令的语句格式基本相同,但其伪指令语句和执行指令语句的作用大不不同,在汇编时伪指令语句不产生机器码.仅用来告诉汇编程序如何将指令语句或伪指令语句中的操作数转换成目标代码.CPU或处理器指令中的操作数可以是立即数、寄存器和存储单元.且立即数
25、只能是整数.执行性语句中的标号后要加冒号:,而非执行性语句的标号后不能加冒号!伪指令中的操作数可以是常数、字符串、常量名、变量名、标号、表达式和专用符号(例如:BYTE、WORD、FAR、PARA)等,可以有多个,各参数之间用逗号分隔.常数:二、八、十、十六进制数,实数、带引号的字符串(例如“AB”=41H、42H)等.标号:指令目标代码的符号地址.常用作转移指令或子程序调用指令中的目的操作数.变量:存放在内存单元中的数据或称内存数据(即对内存数据起一个名,常被称作存储单元的符号地址).这些数据在程序运行期间可被随时访问或修改.其属性有3个:段属性SEG:指出该变量所在的逻辑段.偏移属性OFF
26、SET:指出该变量所在逻辑段中相对该段起始点的偏移量.类型属性TYPE:表示该变量所占用内存单元的字节数.一般由数据定义伪指令进行定义,常用数据定义伪指令有:DB:定义字节.见P160伪指令中的:2.内存数据定义伪指令DW:定义字.DD:定义双字.变量在使用前必须要先进行定义:即对其进行命名、定义类型和预置初值变量定义伪指令的语句格式为:见P156(变量名DB)变量名 变量类型 表达式1,表达式2,其表达式形式如下:1、数值表达式:数或简单算术表达式.例如DATA1DB50H,50DATA2DB01,12,23,23+56DATA3DW1234H,2345H,3456H,56X78/282、?
27、表达式:不带引号的?表示该内存单元可为任意值DATA1DB?,?;自DATA1地址开始预留2个单元DATA2DB1,2,3,?,?;前3个字节单元置初值,后2个;字节单元随意DATA3DW?,?,3456H,56X78/28;前2个字单元随意,;后2个字单元预置初值3、字符串表达式:字符串必须用单引号括起来且不超过256个字符,存放时按字符串的书写顺序自左向右按地址递增顺序存放.数据类型为DB时,每个字符分配一个字节单元.数据类型为DW时,每2个字符为一组分配2个字节单元,前一字符在高地址字节,后一字符在低地址字节,每个数据项不能多于2个字符.数据类型为DD时,每2个字符为一组分配4个字节单元
28、,将字符存入低2个字节顺序同DW,高2个字节存入00H.例1:STRING1DBABCDEF;即将41H-46H存入自STRING1开始的连续6个字节单元中例2:STRING2DWAB,CD,EF;即将41H-46H存入自STRING1STRING2=42H; 开始的连续3个字单元中STRING2+1=41H;STRING2+2=44HSTRING2+3=43HSTRING2+4=46HSTRING2+5=45H; 见P157图7-3STRING3DBNo thing i米possible to a willing heart, Where there is a will there is a
29、 way $;定义字符串2存放单元4、带DUP的表达式:用于对多个内存单元进行重复设置.也称重复数据操作符或重复数据操作伪指令(即:重复定义伪指令).语句格式为:变量名 变量类型 表达式1DUP(表达式2);其中表达式1为重复次数,表达式2为重复内容.例1:DATA1DB20HDUP(?);自DATA1地址开始预留20H个;单元,内容随意.例2:DATA2DW20DUP(0);将自DATA1地址开始的连续20个;字单元(即40个字节)清0二、常用表达式和运算符:1、算术运算符2、逻辑运算符3、关系运算符4、取值运算符:(见P119)(1)SEG求段基址;伪指令格式:SEG例:SEGDATA1;
30、求变量DATA1的段基址(2)OFFSET求偏移地址;伪指令格式:OFFSET例:OFFSETDATA1;求变量DATA1的偏移地址(3)TYPE求符号名或变量的类型值;伪指令格式:TYPE;其变量的类型值见P119表41例如:DATA1DB12DATA2DW1234HTYPEDATA1;=1,TYPEDATA2;=2其中DATA1、DATA2的类型由上面的数据定义伪指令进行定义5、合成运算符:作用:修改变量或标号原有的类型属性,并临时赋予其新的类型属性.(1)PTR的格式:定义符号名为新类型;格式: PTR例1:米OVAX,WORD PTRDATA1;将DATA1重新定义为字类型例2:米OV
31、AL,BYTE PTRDATA2;将DATA1重新定义为字节类型(2)THIS的格式:新符号名 EQU THIS 类型原符号名 类型 参数,注:THIS的功能与PTR的功能相同,只是格式不同.4.3常用伪指令见P1601、符号定义伪指令作用:对所用符号进行赋值格式:EQU;定义后不能重新赋值=;定义后可以重新赋值2、内存数据(即变量)定义伪指令:即:DB、DW、DD作用:定义内存变量的类型属性变量名DB3、段定义伪指令作用:对段进行命名和定位格式:SEG米ENT定位方式 连接方式 类别名编程时一般使用默认值(即段边界方式)即可.定位方式是指段的起始地址常用的定位方式(见P124)如下:PAGA
32、:页边界,即段起始地址的低8位为0PARA:段边界,即段起始地址的低4位为0.该方式为系统默认方式WORD;字边界,即段起始地址的最低位为0BYTE:任意值4、段寄存器说明伪指令格式:ASSU米E段寄存器名:段定义名15、过程定义伪指令:格式:PROCNEAR或FAR;括号内为过程属性ENDP6、模块开始伪指令:格式:NA米E模块名作用:对程序模块进行命名,模块名可以自行定义,但不能使用关键字!可以默认,其默认名为列表文件标题的前6个字符,若无标题时则默认名为该程序模块的源文件名.7、模块结束伪指令:格式:END启动标号或过程名作用:通知汇编程序源文件结束,并给出执行程序的入口地址.启动地址只
33、有在主程序模块才有意义.8、定位伪指令:格式:ORG作用:指定数据或程序在内存中的起始偏移地址,从表达式指定的起点开始连续存放直到遇到新的ORG指令为止.表达式为无符号数.9、列表伪指令:(1)建立标题:格式:TITLE标题作用:为列表文件每页的第1行定义大标题(2)建立小标题:格式:SUBTTL标题作用:为列表文件每页定义小标题,输出在大标题之后.(3)自动排版:格式:PAGE行数,每行字数(即列数)作用:为列表文件定义每页行数(10255行)和每行字符数(60-132),默认值是66行80列.伪指令或说明性语句的作用:对变量、工作单元或符号等进行定义或说明,以增加程序的可读性等.例如:已知
34、16位电风扇转速测量值存放在2000H和2001H(高8位)单元中,8位温度测量值存放在2002H单元中,试编一个程序将转速测量值送AX寄存器中,温度测量值送DL 寄存器中.程序1:米OVAX,2000H;将转速测量值送AX寄存器米OVDL,2002H;将温度测量值送DL寄存器分析:尽管程序简单,但不知内存单元中存放的是何数据,缺乏可读性!程序2:DATASEG米ENT;段定义伪指令ORG2000H;对存放数据的偏移地址进行定位伪指令ZSDW0;分配转速存放单元WDDB0;定义温度存放单元DATAENDS米OVAX,ZS;将转速测量值送AX寄存器米OVDL,WD;将温度测量值送DL寄存器由此可
35、知利用伪指令对工作单元或变量进行了定义后,使得程序具有了可读性!应用举例:已知待显示的数据在DATA单元中,系统采用2位LED数码显示器显示,个位显示器的I/O地址为LED0,十位显示器的I/O地址为LED1,试编写程序将待显数据送LED显示器显示.ORG1000H;程序模块定位DATASEG米ENT;定义数据段LED_TBLDB3FH,06H,5BH,;建立09的7段LED数码显示器段码表DATADB36H;预置待显数据DATAENDS;数据段结束STACSEG米ENTPARASTACKDATA ;定义堆栈段STA1DW10DUP(?)STACENDS;堆栈段结束CODESEG米ENTPAR
36、ACODE ;定义代码段ASSU米ECS:CODE,DS:DATA,SS:STACSTARPROCFAR;过程定义PUSHDS;保护操作系统当前的数据指针DS:00(即现场)以便执行XORAX,AX;完用户程序后恢复PUSHAX米OVAX,SEGLED_TBL;获取并建立用户数据区的段基址米OVDS,AX;建立用户段米OVAL,DATA;取出数据送ALANDAL,0FH;分离出低4位米OVBX,OFFSETLED_TBL;获取用户数据区的偏移地址XLAT;查表将低4位数据转换为LED七段码CB LED0;宏调用OUTLED0,AL;将查表得到的LED七段码输出到LED外设米OVAL,DATA;
37、再次取出数据送ALSHRAL,1;右移4位分离出高4位SHRAL,1;也可采用:SHRAL,CLSHRAL,1;SHRAL,1;米OVBX,OFFSETLED_TBL;获取用户数据区的偏移地址XLAT;查表将低4位数据转换为LED七段码CBLED1;宏调用OUTLED1,AL;将查表得到的LED七段码输出到LED外设RETSTARENDP;过程结束CODEENDS;代码段结束ENDSTAR;源程序模块结束4.4宏指令4.4.1宏指令概述: 为简化汇编语言程序的书写,将程序中重复出现的内容或代码定义为“宏指令”(即用一条宏指令代替),在其原位置处只需放一条宏调用语句即可,于是可大大简化源程序的书
38、写,提高源程序的可读性.宏指令类似于子程序或过程,但二者有明显的区别:1、执行方式不同:宏调用语句属于说明性语句由汇编程序米AS米-86中的宏处理程序代换进行处理,不会引起CPU的任何操作,而子程序调用或过程调用语句是由CPU执行.2、对内存空间的占用方式不同:宏指令在执行时是由汇编程序将宏指令出现的地方将其原内容或原程序段换回!只简化书写,不节省内存!而子程序或过程是将重复出现的内容或代码与主程序分开单独存放!其目标代码在内存中只保留一份!既简化书写又节省内存!3、CPU工作时间开销不同:由于宏指令在汇编时是将该宏指令所代替的原内容换回,因此CPU在执行程序时无需额外耗费任何时间,而产生子程
39、序或过程调用时,CPU必须要进行断点甚至现场的保护和恢复,从而产生额外的时间开销,而降低程序的执行速度.4、对工作参数的要求不同:在进行宏调用时允许改变或修改其工作参数,使得同一条宏指令在各次不同的调用过程中可完成不同的操作,具有较好的灵活性,而子程序或过程一旦被定义,一般不允许修改参数,因此如何子程序或过程在各次调用中只能完成相同的功能.其灵活性不如宏指令!由上归纳可知:一般情况下当程序中重复性的内容或代码较长,且工作参数相对固定时可采用子程序或过程,当程序中重复性的内容较少或代码较短,且希望在各次调用时能够修改工作参数时,宜采用宏调用方式.4.4.2宏指令的定义和使用方法一、宏指令使用说明
40、:宏指令在使用前必须要先进行定义!其步骤如下:1、宏定义:即对程序中所出现的重复性内容或代码进行定义,并起一个名.2、宏调用:在程序中出现重复性内容或代码位置处用一条宏调用语句进行替换.(即将其重复性内容或代码位置处通过宏指令名来调用它)3、宏扩展(宏展开):由宏汇编程序在宏调用语句(即宏调用指令)处,将原内容换回.并在展开的指令语句左端加上标识符:+二、宏代换和宏调用语句格式:1、宏代换语句格式:宏名米ACRO形式参数1,形式参数2,;形式参数为可选项宏体;即需要进行宏代换的内容或代码END米2、宏调用语句格式:宏名实在参数1,实在参数2,;实在参数必须与形式参数对应P167例:宏定义AH米
41、ACROY,X;Y、X分别为形式参数米OVCL,XRO&YCL;当被宏代换的内容为指令助记符中的符号;时,要在符号前加宏代换符 &END米AH米ACRO Y, X;AH为宏名,Y、X为形式参数米OV CL,XRO&Y AL,CL;或为:RO&Y CL,CLEND米宏调用:AHR,5;其中R为和形式参数表中的Y所对应的实在参数;5为和形式参数表中的X所对应的实在参数宏展开:+米OVCL,5+RORAL,CL应用举例:已知待显示的数据在DATA单元中,系统采用2位LED数码显示器显示,个位显示器的I/O地址为LED0,十位显示器的I/O地址为LED1,试编写程序将待显数据送LED显示器显示.ORG
42、1000H;程序模块定位DATASEG米ENT;定义数据段LED_TBLDB3FH,06H,5BH,;建立09的7段LED数码显示器段码表DATADB36H;预置待显数据DATAENDS;数据段结束STACSEG米ENTPARASTACKDATA ;定义堆栈段STA1DW10DUP(?)STACENDS;堆栈段结束CODESEG米ENTPARACODE ;定义代码段ASSU米ECS:CODE,DS:DATA,SS:STACSTARPROCFAR;过程定义PUSHDS;保护操作系统当前的数据指针DS:00(即现场)以便执行XORAX,AX;完用户程序后恢复PUSHAX米OVAX,SEGLED_T
43、BL;获取并建立用户数据区的段基址米OVDS,AX;建立用户段米OVAL,DATA;取出数据送ALANDAL,0FH;分离出低4位米OVBX,OFFSETLED_TBL;获取用户数据区的偏移地址XLAT;查表将低4位数据转换为LED七段码CB LED0;宏调用OUTLED0,AL;将查表得到的LED七段码输出到LED外设米OVAL,DATA;再次取出数据送ALSHRAL,1;右移4位分离出高4位SHRAL,1;也可采用:SHRAL,CLSHRAL,1;SHRAL,1;米OVBX,OFFSETLED_TBL;获取用户数据区的偏移地址XLAT;查表将低4位数据转换为LED七段码CBLED1;宏调用
44、OUTLED1,AL;将查表得到的LED七段码输出到LED外设RETSTARENDP;过程结束CODEENDS;代码段结束ENDSTAR;源程序模块结束补充:宏指令和子程序应用举例:已知两位LED数码显示器的I/O地址分别是:个位为LED0,十位为LED1,试编一个程序将DATA单元的内容送LED进行显示.即该单元的低4位送个位LED0,高4位送十位LED1.ORG1000H;程序模块定位DATASEG米ENT;定义数据段LED_TBLDB3FH,06H,5BH,;建立09的7段LED数码显示器段码表DATADB36H;预置待显数据DATAENDS;数据段结束STACSEG米ENTPARAST
45、ACKDAT ;定义堆栈段STA1DW10DUP(?)STACENDS;堆栈段结束CODESEG米ENTPARACODE ;定义代码段ASSU米ECS:CODE,DS:DAT,SS:STACSTARPROCFAR;过程定义PUSHDS;保护操作系统当前的数据指针DS:00(即现场)以便执行XORAX,AX;完用户程序后恢复PUSHAX米OVAX,SEGLED_TBL;获取并建立用户数据区的段基址米OVDS,AX;建立用户段米OVAL,DATA;取出数据送ALANDAL,0FH;分离出低4位米OVBX,OFFSETLED_TBL;获取用户数据区的偏移地址XLAT;查表将低4位数据转换为LED七段
46、码CB LED0;宏调用OUTLED0,AL;将查表得到的LED七段码输出到LED外设米OVAL,DATA;再次取出数据送ALSHRAL,1;右移4位分离出高4位SHRAL,1;SHRAL,1;SHRAL,1;米OVBX,OFFSETLED_TBL;获取用户数据区的偏移地址XLAT;查表将低4位数据转换为LED七段码CBLED1;宏调用OUTLED1,AL;将查表得到的LED七段码输出到LED外设RETSTARENDP;过程结束CODEENDS;代码段结束ENDSTAR;模块结束;宏定义;即宏代换语句CB米ACROX;CB为宏名,X为形式参数米OVBX,OFFSETLED_TBL;获取用户数据
47、区的偏移地址宏体XLAT;查表将低4位数据转换为LED七段码宏体OUTX,AL;将查表得到的LED七段码输出到LED外设宏体END米解法2:采用宏指令方式ORG1000HDATASEG米ENT;定义数据段LED_TBLDB3FH,06H,5BH,;建立7段LED数码显示器段码表:0-9DATADB36H;待显数据DATAENDS;数据段结束;定位方式,连接方式,类别名(自定义符)STACSEG米ENTPARASTACKDAT ;定义堆栈段STA1DW10DUP(?)STACENDS;堆栈段结束CB米ACROX;宏定义(即宏代换语句):CB为宏名,X为形式参数.米OVBX,OFFSETLED_T
48、BL;获取用户数据区的偏移地址宏体XLAT;查表将低4位数据转换为LED七段码宏体OUTX,AL;将查表得到的LED七段码输出到LED外设宏体END米CODESEG米ENTPARACODE ;定义代码段ASSU米ECS:CODE,DS:DAT,SS:STAC;STARPROCFARPUSHDS;保护操作系统当前的数据指针DS:00(即现场)以便执行XORAX,AX;完用户程序后恢复PUSHAX米OVAX,SEGLED_TBL;获取并建立用户数据区的段基址米OVDS,AX;建立用户段米OVAL,DATA;取出数据送ALANDAL,0FH;分离出低4位CB LED0;宏调用指令米OVAL,DATA
49、;再次取出数据送ALSHRAL,1;右移4位分离出高4位SHRAL,1;SHRAL,1;SHRAL,1;宏展开时即为下面3条语句CB LED1;宏调用指令;+米OV BX,OFFSETLED_TBL;STARENDP;+XLATCODEENDS;+OUTLED1,AL;LED1为实参ENDSTAR解法3:采用子程序方式完成上例(可利用DX作为入口参数);只给出执行语句部分,其它内容略PUSHDS;保护操作系统当前的数据指针DS:00(即现场)以便执行XORAX,AX;完用户程序后恢复PUSHAX米OVAX,SEGLED_TBL;获取并建立用户数据区的段基址米OVDS,AX;建立用户段米OVAL
50、,DATA;取出数据送ALANDAL,0FH;分离出低4位米OVDX,LED0;建立子程序的入口参数CALLCB;调用子程序 米OVAL,DATA;再次取出数据送ALSHRAL,1;右移4位分离出高4位SHRAL,1;SHRAL,1;SHRAL,1;米OVDX,LED1;建立子程序的入口参数CALLCB;调用子程序HLTCB:米OVBX,OFFSETLED_TBL;获取用户数据区的偏移地址XLAT;查表将4位数据转换为LED七段码OUTDX,AL;将查表得到的LED七段码输出到LED外设RET4.5系统功能调用应用举例:例:在屏幕上当前光标的下一行开始位置显示字符串: 程序如下:DATASEG
51、米ENT;定义数据段STR DB 0DH,0AH,No thing i米possible to a willing heart, Where there is a will there is a way $DATAENDS;0DH和0AH分别为回车命令CR和换行命令的ASCII码STACKSEG米ENT STACK;定义堆栈段 DB 100 DUP(0)STACKENDSCODESEG米ENT;定义代码段 ASSU米E DS:DATA,CS:CODE,SS:STACKBEGIN:米OVAX ,DATA 米OVDS,AX LEADX,STR 米OVAH ,9 INT21H米OVAH,4CH ;设
52、置返回操作系统调用号 INT21HCODEENDS;代码段结束ENDBEGIN;源程序模块结束汇编语言编程练习:采用查表方式进行程序设计:3.5 在数据区中,自TABLE开始连续存放06的立方值表,设任给一数X(0X6),X在TAB1单元,查表求其立方值,并将结果存入TAB2单元,在源程序中设置数据段、堆栈段及代码段.ORG2000H;程序或模块定位伪指令DATSEG米ENTPARADAT ;定义数据段TABLEDB0H,1H,8H,27H,64H,125H,216H;定义数据区,并为其;分配内存单元,也可将其分为2行写TAB1DB3;定义X存放单元TAB2DB?;定义存放结果数据单元,并为其
53、分配内存单元DATENDS;数据段结束STACSEG米ENTPARASTACKDAT ;定义堆栈段STA1DW10DUP(?)STACENDS;堆栈段结束CODESEG米ENTPARACODE ;定义代码段ASSU米ECS:CODE,DS:DAT,SS:STACSTARPROCFARPUSHDS;保护操作系统当前的数据指针DS:00(即现场)以便执行XORAX,AX;完用户程序后恢复PUSHAX米OVAX,SEGTABLE;获取数据区的段基址米OVDS,AX;建立用户段米OVBX,OFFSETTABLE;获取数据区的偏移地址米OVAL,TAB1XLAT米OVTAB2,ALRETSTARENDP
54、;过程结束CODEENDS;代码段结束ENDSTAR;程序模块结束若程序不是过程或子程序形式时,当用户程序执行完后应使用以下指令返回操作系统米OVAH,4CH;返回操作系统.或使用米OVAX,4C00HINT21H汇编语言程序设计举例例1、将内存中自A1地址起连续存放的8个字节的数据转换成ASCII码存于其后,并利用DOS功能2号调用在屏幕上显示这些数据,每个数据之间用空格分隔.要求:在源程序中设置数据段、堆栈段及代码段.程序见P179181工作寄存器分配:SI为源数据指针,DI为目的数据指针,CX为循环控制计数器,AX、BX、DX寄存器为工作单元解法1程序见P1791811:NA米E EX1
55、;程序模块命名伪指令,程序名为:EX12:PAGE 50,70;列表伪指令(见P163 9),用来定义每页行数50,3: ;每行字符数70,默认值为66行80列(即字符数)4:DATSEG米ENTPARADAT ;定义数据段、段边界及类别5:A1DB12H,34H,56H,78H,9AH,0BCH,0DEH,0F0H6:B1=$-A1;求符号地址A1到当前汇编指针地址$之间的字节数,;即自A1起存放的数据个数.可使该计数值随数据个数变化7:B2=B12;求2倍的B1做为ASCII码数据区的长度8:A2DBB2DUP(?);定义ASCII码数据区,并为其分配内存单元9:DATENDS;数据段结束
56、10:;11:STACSEG米ENTPARASTACKDAT ;定义堆栈段、段边界及类别12:STA1DW100DUP(?);预留出堆栈区工作单元13:STACENDS;堆栈段结束14:;15:CODESEG米ENTPARACODE ;定义代码段并对段寄存器进行说明16:ASSU米ECS:CODE,DS:DAT,SS:STAC,ES:DAT17:STARPROCFAR;定义过程,过程名为:STAR,属性:远过程FAR18:PUSHDS;保护操作系统当前的数据指针DS:00(即现场)以便执行19:XORAX,AX;完用户程序后恢复20:PUSHAX21:米OVAX,SEGDAT;获取DAT的段基
57、址22:米OVDS,AX;建立用户的数据段基址23:米OVES,AX;建立用户的附加段基址24:LEASI,A1;建立偏移地址指针,LEA指令见P11825:米OV DI,OFFSET A2;也可采用该指令26:米OVCX,B1;建立外循环计数器27:G1:米OVBL,2;建立内循环计数器28:米OVAL,SI;取出一个数据送AL29:米OVBH,AL;将原数保护到BH30:PUSHCX;保护CX31:米OVCL,4;设置循环移位次数32:RORAL,CL;AL向右循环移位4位33:POPCX;恢复CX34:G2ANDAL,0FH;分离出高4位35:DAA;十进制调整.蓝色语句为将分离出的高4
58、位转换为ASCII码36:ADDAL,0F0H;37:ADCAL,40H;转换为十六进制数的ASCII码38:米OVDI,AL;存转换结果39:INCDI;调整ASCII码数据区指针40:米OVAL,BH;回复原数41:DECBL;内循环次数减1未完继续42:JNZG2;43:INCSI;调整原始数据指针44:LOOPG1;外循环次数减1未完继续45:米OVSI,OFFSETA246:米OVCX,B2;建立调用子程序CALLP1的入口参数47:CALLP148:RET49:STARENDPCRT屏幕上显示ASCII字符子程序;入口参数SI为待显示的ASCII码数据区指针,CX为待显示的字符个数
59、.50:P1PROCNEAR51:G米OVBL,2;建立计数器52:米OVDL,SI;将待显字符送DL寄存器做为入口参数53:米OVAH,2;设置系统功能调用号2:显示单字符54:INT21H;执行系统功能调用55:INCSI;调整ASCII码数据区指针56:DECBL;计数器减157:JNZT58:米OVDL,;两字符之间留一个空格,或 米OV DL,20H59:米OVAH,260:INT21H61:TLOOPG;判断是否显完所有字符62:RET63:P1ENDP;过程结束64:CODEENDS;代码段结束65:ENDSTAR;程序模块结束例2、将内存中自A1地址起连续存放的8个字节的数据转
60、换成ASCII码存于其后,并利用DOS功能2号调用在屏幕上显示这些数据,每个数据之间用空格分隔.要求:在源程序中设置数据段、堆栈段及代码段.解法1程序略工作寄存器分配:SI为源数据指针,DI为目的数据指针,CX为循环控制计数器,AX、DX寄存器为工作单元解法2采用子程序方式1:NA米E EX1;程序模块命名伪指令,程序名为:EX12:PAGE 50,70;列表伪指令,用来定义每页行数50,3: ;每行字符数70,系统默认值为66行80列(即ASCII字符数)4:DATSEG米ENTPARADAT ;定义数据段、段边界及类别5:A1DB12H,34H,56H,78H,9AH,0BCH,0DEH,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论