微机原理教学内容及教案_第1页
微机原理教学内容及教案_第2页
微机原理教学内容及教案_第3页
微机原理教学内容及教案_第4页
微机原理教学内容及教案_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微机原理教学内容及教案 微机原理及应用课程教学安排总学时数48其中课堂授课40学时实验8学时微机原理及应用是一门专业基础课,主要从计算机硬件的角度介绍和描述计算机的组成结构、工作原理和应用基础。 一、本课程的学习重点和要求 1、学习并了解计算机中的常用数制及转换,微型计算机的基本组成结构和工作原理。 2、学习并了解16位微处理器的主要内部结构、功能部件、外部特性、主要引脚信号、最大寻址范围、运算字长、工作方式和主要操作功能。 3、学习并了解计算机中常用存储器的分类、特点、工作原理、外部特性和用途。 4、学习并熟练掌握8086CPU的指令系统、汇编语言的基本语法结构和汇编语言程序设计方法。 5、学习并了解计算机中输入/输出(I/O)接口的主要作用、功能、工作原理和常用的基本控制方式以及串、并行通信的特点。 6、学习并熟练掌握可编程并行I/O通信接口芯片8255的主要作用、功能、工作原理、内部主要结构和外部特性、初始化编程和应用技术。 掌握简单人机外设(按键和LED数码显示器)的工作原理、与CPU的连接和管理方法。 7、学习并熟练掌握可编程计数/定时控制器I/O接口芯片8253的主要作用、功能、工作原理、内部主要结构和外部特性、初始化编程和应用。 8、学习并了解计算机中其它常用I/O接口电路芯片的主要作用、功能、工作原理、编程和应用。 其中包括中断控制器8259的主要作用、功能、工作原理、编程和应用方法。 A/D和D/A转换接口电路的主要作用、功能、工作原理和应用方法等。 二、课堂授课内容、学习重点及安排第一章计算机概述及基础知识1.1计算机中常用数制及转换方法、补码及符号数的表示方法。 1.2计算机中常用集成电路(数字逻辑电路)简介。 1.3补充1计算机中常用半导体存储器的作用、分类、特点、外部特性及其与系统的连接方法。 1.4补充2微型计算机的基本组成结构及工作原理。 本章学习重点和要求 1、学习并掌握计算机中常用数制及转换方法、补码及符号数的表示方法。 2、学习并了解常用半导体存储器的作用、分类和特点。 3、学习并了解微型计算机的基本组成结构。 第二章16位微处理器2.1INTEL公司的16位CPU8086/8088的主要内部结构、功能部件和存储器组织结构(执行部件EU、总线接口部件BIU)。 2.28086/8088CPU的外部特性、引脚信号和工作模式(最大最小工作模式)。 2.38086CPU的主要操作功能(复位、启动和中断操作)。 本章学习重点和要求 1、学习并了解8086CPU内部主要功能部件EU和BIU的主要作用和组成结构,CPU内部主要工作寄存器及作用,8086CPU的外部特性和引脚信号分类及作用,最大寻址范围和运算字长。 2、学习并了解8086系统的存储器组织结构和管理模式(逻辑地址和物理地址的概念)。 3、学习并掌握8086CPU的工作模式和主要操作(复位、启动和中断操作)功能。 4、学习并了解8086CPU的中断分类、中断功能、中断向量和中断响应过程等。 第三章86系列微型计算机的指令系统3.186系列汇编语言及指令的格式与寻址方式(指令的语句格式和CPU的寻址方式)。 3.2常用传送类指令的语法格式详解及应用举例。 3.3常用数据操作类指令的语法格式详解及应用举例。 3.4常用控制类指令的语法格式详解及应用举例。 本章学习重点和要求学习并掌握8086CPU汇编语言指令的语法格式、寻址方式、指令功能和应用。 第四章微型计算机的程序设计4.1程序设计步骤。 4.2简单程序结构及设计举例。 4.3分支程序结构及设计举例。 4.4循环程序结构及设计举例。 4.5子程序结构及设计举例。 4.6查表程序及其应用举例。 本章重点学习并掌握常用各类程序结构、设计方法、步骤和应用。 第五章微型计算机汇编语言及汇编程序5.1宏汇编语言的基本语法(常用伪指令的语句格式、常数、变量、标号、运算符和表达式)。 5.2伪指令、宏指令及系统功能调用。 5.3汇编语言程序设计。 本章学习重点和要求学习并了解宏汇编语言的基本语法结构及掌握常用基本伪指令的使用方法。 第六章微型计算机的输入输出接口技术及其应用6.1微型计算机输入输出接口的功能、作用和常用控制方式。 6.2微型计算机基本输入输出方式、作用和特点(串、并行通信接口技术的作用、特点和应用,重点是并行接口技术)。 6.3可编程并行通信接口芯片5255A概述。 (8255A的主要作用、功能、工作方式和工作原理)。 6.48255主要内部结构、外部特性、引脚信号及其与系统的连接。 6.58255A的控制字及初始化编程。 6.6补充38255A在交通灯控制系统中的应用举例。 6.7补充4基本人机外设的结构、工作原理、接口技术和应用系统设计(主要介绍按键和LED数码显示器的工作原理、与计算机的连接、管理方式和检测及控制程序的设计方法等)。 本章学习重点和要求 1、学习并了解微型计算机输入输出接口的功能、作用和常用控制方式。 2、学习并了解计算机的串、并行通信的作用和特点。 3、学习并掌握8255A在计算机系统中的主要作用和用途、功能特点、工作原理、工作方式、主要内部结构、外部特性及其与系统的连接、控制字及初始化编程和应用。 4、学习并掌握按键和LED数码显示器的工作原理,与计算机的连接和管理程序的设计方法。 第七章微型计算机的计数/定时接口技术及其应用7.1可编程计数/定时控制器接口芯片8253概述。 (8253的主要作用、功能和工作原理)。 7.28253主要内部结构、外部特性、引脚信号及其与系统的连接。 7.38253的控制字、初始化编程及工作方式描述。 7.4补充58253应用系统设计举例。 7.5补充6计数/定时接口技术在车辆性能检测中的应用及应用系统设计举例。 本章学习重点和要求 1、学习并掌握8253在计算机系统中的主要作用和用途、功能特点、主要内部结构、工作原理、外部特性及其与系统的连接。 2、学习并掌握8253的工作方式和初始化编程。 3、学习并掌握8253的简单应用。 第八章中断控制器8259及其应用概述8.1可编程中断控制器接口芯片5259A概述。 (8259A的主要作用、功能、工作方式和工作原理)。 8.28259主要内部结构、外部特性、引脚信号及其与系统的连接。 8.38259A的控制字及初始化编程简介。 本章学习重点和要求 1、学习并了解8259A在系统中的作用、功能、工作方式和工作原理。 2、学习并了解8259主要内部结构。 3、学习并了解8259A的控制字及初始化编程。 第九章A/D及D/A转换技术9.1A/D及D/A转换技术应用概述。 9.2D/A转换的作用、工作原理和主要技术性能指标。 9.38位D/A芯片DAC0832概述及应用简介。 9.4A/D转换的作用、工作原理和主要技术性能指标。 9.58位A/D转换芯片ADC0809概述及应用简介。 本章学习重点和要求学习并了解A/D和D/A转换技术的主要作用和主要技术性能指标。 总复习第一章计算机概述及基础知识 一、计算机中常用的半导体存储器类型和缩写 1、只读存储器ROM(Read OnlyMemory) 2、一次性可编程只读存储器PROM(Programmable ROM) 3、随机存取存储器:RAM(Random AessMemory) 4、静态RAM:SRAM(Static RAM) 5、动态RAM:DRAM(Dyanmic RAM) 6、光可擦除电可编程只读存储器EPROM(Erasable Programmable ROM) 7、电擦除电可编程只读存储器EEPROM(Electrically ErasableProgrammableROM) 8、闪烁存储器Flash Memory 二、常用存储器容量单位及表示方法1字节=8位二进制数,1字=2字节=16位二进制数,双字=4字节=32位二进制数1KB=1024B(字节)1MB=1024KB1GB=1024MB1TB=1024GB1节=16字节1页=256字节1段=64KB(字节) 三、存储器中常用的术语、概念和含义 1、存储器的物理地址使用CPU全部地址线对存储器进行的编址,称为存储器的物理地址或绝对地址。 (使用CPU全部寻址范围内的地址码对存储单元进行的编址称为存储器的物理地址或绝对地址。 ) 2、存储器的逻辑地址由CPU内部段寄存器(即段基址)和偏移地址寄存器(例如SI、DI、BP、和SP等寄存器)的当前值所构成的地址称为逻辑地址。 3、一个存储单元的物理(绝对)地址是唯一的,但可以有多个逻辑地址!(或一个存储单元可以有多个逻辑地址,但仅有一个物理地址!)存储单元的物理地址可由段寄存器(即段基址)和偏移地址经运算或变换得到。 其算法为绝对地址=段基址X16(左移4位)+偏移地址例1段基址存放在段寄存器CS中,即CS=2000H,偏移地址在IP中,即IP=2200H,则:绝对地址=段基址X16+偏移地址=20000H+2200H=22200H例2已知CS=2200H IP=0200H,试计算其绝对地址。 绝对地址=段基址X16+偏移地址=22000H+0200H=22200H由上可知绝对地址为22200H的存储单元它的逻辑地址可以有多个。 四、关于计算机中断技术中的基本概念和技术术语 1、中断定义计算机在执行当前程序或任务时,由于随机或突发事件的产生而暂停当前的工作转去为其服务,服务完成后再返回到刚才的断点处继续在这之前的工作,此过程称之为中断。 2、断点CPU响应中断时程序中止处的CS和IP的值(即程序中止处的下一条指令的地址)。 3、中断源采用中断方式与CPU或系统进行信息交换的外设或部件。 4、中断向量中断服务子程序的入口地址被称之为中断向量。 5、中断向量表用来存放中断服务子程序的入口地址的存储区域被称之为中断向量表。 6、中断类型码在CPU响应外设中断请求时,由外设向CPU提供的用来查找中断向量表的索引码。 7、现场在中断服务子程序中所使用的那些与主程序中符号相同但定义或作用不同的全局变量、工作寄存器或工作单元等。 (即在执行中断服务子程序时需要保护的内容) 8、中断优先级外设产生中断请求时CPU或中断控制器对其进行响应或处理的先后顺序。 9、可屏蔽中断可使用中断开、关指令控制CPU对中断请求的响应。 这类中断称之为可屏蔽中断。 8086CPU的开中断指令为STI,可允许CPU响应外部中断请求。 关中断指令为CLI可禁止CPU响应外部中断请求。 10、非屏蔽中断CPU的中断响应不能使用中断开、关指令进行控制。 这类中断称为不可屏蔽中断或非屏蔽中断(不可使用中断开、关指令控制CPU对中断请求的响应。 这类中断称之为不可屏蔽中断或非屏蔽中断)。 非屏蔽中断的优先级要高于可屏蔽中断。 11、中断优先级多个中断源同时申请中断时CPU的响应策略或中断嵌套规则。 12、采用中断技术的优点CPU工作效率高、实时性好、便于处理随机和突发事件。 13、中断响应和处理的实质内容确定发出中断请求的中断源(即外设)或随机事件,找到并执行为该中断源服务的中断服务子程序。 也即其实质就是为了执行一段服务程序。 五、8086/8088CPU的中断系统 1、中断分类硬件中断、软件中断和内部操中断。 a.硬件中断由外设或外部信号所产生的中断请求称之为硬件中断。 其硬件中断又可分为非屏蔽中断和可屏蔽中断,其中,非屏蔽中断请求信号要连接到CPU的NMI引脚,而可屏蔽中断请求信号要连接到CPU的INTR引脚.b.软件中断由执行CPU中断指令INT n所产生的中断称为软件中断。 c.内部操中断由CPU内部的一些特定操作(例如除数为0时所引起的除数为0中断,符号数运算过程中产生溢出时所引起的溢出中断,为方便程序的调试,每执行完一条指令时都可产生一次中断的单步中断等)所引起的中断称之为内部操作中断。 2、中断响应条件a.非屏蔽中断将非屏蔽中断源的中断请求信号连接到CPU的NMI引脚,编写好中断服务子程序,并在主程序的系统初始化程序中建立好中断向量表(即将中断服务子程序的入口地址填写到中断向量表中,其向量表地址由分配给该外设的中断类型码确定)。 b.可屏蔽中断将可屏蔽中断源的中断请求信号连接到CPU的INTR引脚,编写好中断服务子程序,在主程序的系统初始化程序中建立好中断向量表,并在主程序中的适当位置处使用CPU的开中断指令STI打开CPU中断,允许CPU接收外部可屏蔽中断请求。 c.软件中断编写好中断服务子程序,在主程序的系统初始化程序中建立好中断向量表,在需要中断时的程序位置处放一条INT n指令。 d.内部操中断编写好中断服务子程序,在主程序的系统初始化程序中建立好中断向量表。 当系统中出现特定内部操作(即除数为 0、溢出和单步操作)时即可对其进行服务。 e. 3、中断向量表的建立即利用程序或指令将中断服务子程序的入口地址(逻辑地址)填写到中断向量表中。 中断向量表的地址由外设的中断类型码确定。 例如已知某外设的中断类型码为20H,其中断服务子程序的入口地址为1234H:5678H,为其建立中断向量表就是将中断服务子程序的入口地址1234H:5678H填写到自内存空间地址0段20HX4开始的连续4个字节的存储单元中,即0000H:20HX4+0-0000H:20HX4+3的连续4个单元中,其存放顺序为:低地址存放低字节,高地址存放高字节即自20HX4开始的连续4个字节的存储单元的内容分别如下(20H*4+3)=12H。 (20H*4+2)=34H,(20H*4+1)=56H,(20H*4+0)=78H, 4、可屏蔽中断的响应过程: (1).从数据总线D.B上读取外设提供的中断类型码并暂存. (2).将FR内容存入堆栈保护. (3).将标志位IF和TF清0,以便禁止INTR中断. (4).将当前的程序断点CS:IP存入堆栈保护. (5).利用外设提供的中断类型码计算中断向量表地址,并从中取出中断处理子程序的入口地址转去执行服务程序. (6).执行完中断服务子程序后恢复断点和FR的内容. (7).从中断返回。 (即执行一条中断返回指令IRET)第5章86系列微型计算机的指令系统 一、寻址方式如何获得操作数的方法称之为寻址方式,8086CPU的寻址方式有以下4类 1、立即寻址当操作数直接出现在指令中时称为立即(数)寻址 2、寄存器寻址当操作数在CPU内部寄存器中时称为寄存器寻址 3、直接寻址当操作数的地址出现在指令中时称为直接寻址 4、寄存器间接寻址当操作数的地址出现在寄存器中时称为寄存器寻址。 在该寻址方式中操作数一定在存储单元中,但存储单元的有效地址要求使用寄存器指定,这些寄存器可以使用BX、BP、SI和DI之一,即存储单元的有效地址要放在这其中的某个寄存器中。 有效地址寻址所需要的偏移地址称之为有效地址注意在以上寻址方式中若目标操作数是非CS的段寄存器时,只能采用寄存器寻址方式产生或获得操作数!例如将数据段寄存器DS的内容设置为2000H若直接使用指令MOV DS,2000H是错误的,可改为以下方式MOV AX,2000H MOV DS,AX例1将AX内容加1即AX+1-AX可以使用指令ADD AX,1;该指令的寻址方式为立即数寻址,具体操作和指令执行时间见P444第6栏中的第6行a,imm即ADD a,imm;其中a为累加器AX,imm表示立即数,该指令的时钟周期数为4,字节数为23。 而如果改用INC AX指令也可实现AX+1;但其指令的时钟周期数为2,字节数仅为1,见P447第25栏中第1行reg16(因AX为16位,如果使用INC AL时为8位操作,即为reg8)。 尽管以上2条指令的操作功能相同,但指令执行后对状态标志寄存器的影响是不一样的!ADD指令能影响除控制标志之外的所有的状态标志CF、PF、AF、ZF、SF、OF,但INC指令不影响CF标志!即若AL=0FFH时,执行INC AL后CF的状态不变!例2将AX内容清0可以使用指令MOV AX,0;该指令的寻址方式为立即数寻址,具体操作和指令执行时间见P450第40栏中第6行reg,imm,即MOV reg,imm,由表中可知该指令的时钟周期数为4,字节数为23。 但如果改用XOR AX,AX指令,同样也可实现对AX清0的目的,但其指令的时钟周期数为3,字节数为2,见P455第75栏中的第1行reg,reg,即XOR reg,reg.第6章微型计算机的程序设计例3编一段程序完成符号函数。 见P151习题6.5,答案见P471?X DB?;定义自变量DATA1Y DB0;定义函数值存放单元DATA2?MOV AL,X;取自变量送AL以便对其进行判断CMP AL,0;影响所有标志位ZF、SF、CF等标志位JNZ PNZ;X不为0转移MOV AL,0;X=0MOV Y,AL;将0送函数值存放单元中HLT PNZJS PS;测试符号标志位若X0MOV Y,AL;将1送函数值存放单元中HLT PSMOV AL,0FFH;X0,送-1的补码MOV Y,AL;将0送函数值存放单元中HLT P1386.2简单程序例6.1将自10050H起连续存放的两个16位数求和后存入其后。 低字节在低地址例6.1程序1MOV AX,1000H;建立数据段指针MOV DS,AX MOV SI,50H;建立被加数偏移地址指针MOV DI,52H;建立加数偏移地址指针MOV BX,54H;建立和偏移地址指针CLC;清进位位。 该指令可省,因下一条指令XOR AX,AX能够影响标志!XOR AX,AX;累加器清0MOV AX,SI;取出被加数送AX ADCAX,DI;两数相加MOVBX,AX;存结果HLT;暂停例6.1程序2MOV AX,1000H;建立数据段指针MOV DS,AX MOV SI,50H;建立被加数偏移地址指针MOV AX,SI;取出被加数送AX ADDAX,SI+2;两数相加,注仅2个数相加时可以不使用带进位加法指令!MOVSI+4,AX;存结果HLT;暂停例6.2将10050H单元的内容拆为两段,每段4位,存入其后MOV AX,1000H;建立数据段指针MOV DS,AX MOVSI,50H;建立被加数偏移地址指针MOV AL,SI;取出待拆分数据送AL ANDAL,0FH;屏蔽高4位,分离出低4位MOVSX+1,AL;存低4位MOV AL,SI;再次取出待拆分数据送AL MOV CL,4;建立逻辑右移次数计数器SHR AL,CL;逻辑右移4位分离出高4位MOVSI+2,AL;存高4位HLT P1406.3分支程序例6.3计算AX-BX的绝对值例6.3程序1P141程序有错CLC;该指令可省SUB AX,BX;应改用CMP比较指令JC AAMOV DI,2800H;建立数据指针MOVDI,AX;存结果HLT AA SUB BX,AX;由于前面执行SUB指令时操作数AX已被破坏。 或改;为NEG AX MOV DI,2800H;因此得不到正确结果MOVDI,BX;MOVDI,AX HLT例6.3程序2MOV DI,2800H;建立数据指针CMP AX,BX;两数比较JC AA;若AX小于BX则转AA SUB AX,BX;计算两数之差MOVDI,AX;存结果HLT AASUB BX,AX MOVDI,BX HLT例6.3程序3MOV DI,2800H;建立数据指针SUBAX,BX;两数相减JC AA;若AX小于BX则转AASUBAX,BX;计算两数之差MOVDI,AX;存结果HLT AANEG AX MOVDI,AX HLT例6.4从71H外设输入一个数据M,若M小于10则向73H外设输出00H,若M大于20则向73H外设输出0FFH,否则向73H外设输出88H。 STARTIN AL,71H;从71H外设读入数据CLC;该指令可省,因下一条指令CMP AL,10能够影响标志!CMP AL,10;判断是否小于10JC LP1;若小于10则转LP1CMP AL,20;判断是否小于20JC LP2;若小于20则转LP2MOV BL,0FFH;建立M大于20时的输出数据LP3OUT73H,BL;将数据输出到73H外设HLT LP1MOV BL,0H;建立M小于10时的输出数据JMP LP3LP2MOV BL,88H;建立中间输出数据JMP LP3P1436.4循环程序例6.5求两个8字节数之和,两数自10050H起连续存放,并将求和结果存入其后。 程序1见P144下面程序2按字(16位)求和STARTMOV AX,1000H;建立数据段指针MOV DS,AXMOVSI,50H;建立被加数偏移地址指针MOV CX,4;建立计数器CLC;清进位位NEXT MOV AX,SI;取出第一个数据的低字数据送AX ADCAX,SI+8;与第2个数据的低字相加MOVSI+16,AX;存结果INC SI;调整数据指针INC SI;调整数据指针DEC CX;计数器减1JNZ NEXT;未完继续下一个字的相加HLT说明如果使用CX做为计数器时可将上面的两条指令DEC CX和JNZ NEXT简化为一条指令LOOP NEXT见P133转移类指令表倒数第2栏“循环控制”指令中的LOOP目标标号程序3按字节(8位)求和STARTMOV AX,1000H;建立数据段指针MOV DS,AXMOVSI,50H;建立被加数偏移地址指针MOV CX,8;建立计数器CLC;清进位位NEXT MOV AL,SI;取出第一个数据的低字节数据送AX ADCAL,SI+8;与第2个数据的低字节相加MOVSI+16,AL;存结果INC SI;调整数据指针LOOP NEXT;未完继续下一个字节的相加HLT P145例6.6设计一个软件延时程序,延时时间约1mS左右分析当延时时间不长且计时精度要求不高时,可利用指令的执行时间实现延时,例如当CPU主频为8MHZ时,其时钟周期为0.125uS,如果知道了指令所需要的时钟周期数便可知道指令的执行时间。 于是可利用循环程序实现软件延时。 即循环次数X=所需延时时间/一次循环时间,若循环体中采用PUSHF和POPF进行延时,而循环控制指令采用LOOP时,从P443附录A的指令表中可查到PUSHF指令的时钟周期数是14个(见P452第51栏右数第2列),而POPF指令的时钟周期数是12个(见P451第49栏右数第2列),而LOOP指令的时钟周期数是17/5个(见P449第37栏右数第2列),即跳转时(CX-1不等于0)为17个时钟周期,后继时为5个时钟周期。 于是循环次数N=1000/(14+12+17)0.125186START:MOV CX,186;设置循环次数LP1PUSHF;循环体POPF;循环体LOOP LP1;未完继续HLT写成更为通用的一般的延时子程序形式如下DT MOVCX,N;设置循环次数,或者将CX作为入口参数DT1NOP;循环体NOP;循环体DEC CXJNZ DT1;未完继续RET循环体中也可使用其它指令,例如NOP(该指令为3个时钟周期,见P451右数第2栏)等,但循环次数要重新计算!如果需要再增加延时时间,则可采用双循环程序见P146,还可增加循环体中的指令条数,例如再增加几对PUSHF和POPF指令,或在循环体中使用周期数更多的指令,例如乘除法指令等,乘法指令MUL见P450中的42栏,周期数最少的8位数乘法MUL reg8也要70-77个时钟周期,而16位数乘法MUL reg16则要118-133个时钟周期,若使用MUL mem16则至少要128个时钟周期。 所有转移指令都在P44829栏中时钟周期都为16/4P1466.5子程序例6.8有2个数据块分别自2000H和2800H起存放,每个数据块的第1个单元分别为数据块长度,其后是数据内容(类型为字节),试编一个程序分别找出各数据块中的最大值,分别存入MAX1和MAX2.。 START:MOVSI,2000H;建立数据块1指针指向数据长度单元MOV CL,SI;取出数据长度MOV CH,0;构成16位计数器DEC CX;调整计数器INC SI;调整数据指针指向数据CALL F_MAX;调用找最大值子程序,入口参数为SI,CX MOVMAX1,AL;出口参数AL为最大值存入指定单元MOVSI,2800H;建立数据块2指针指向数据长度单元MOV CL,SI;取出数据长度MOV CH,0;构成16位计数器DEC CX;调整计数器INC SI;调整数据指针指向数据CALL F_MAX;调用找最大值子程序,入口参数为SI,CX MOVMAX2,AL;出口参数为AL中存放着最大值HLT;存入指定单元;找最大值子程序,人口参数为SI数据指针;CX计数器出口参数为AL用来存放找到的最大值F_MAX MOV AL,SINEXT INCSI CMPAL,SIJNC NEXT1MOV AL,SINEXT1LOOP NEXTRET练习题将自DATA起连续存放的2个单元的字节数据分离(高4位为0,低4位为数据)后送D_BUF开始的连续单元中。 习题P1074.14.14P1355.15.9P1516.16.7第七章微型计算机汇编语言及汇编程序关于汇编语言的基本概念和术语 1、汇编语言面向机器的利用助记符、符号地址、变量和标号等编写程序的语言称为汇编语言。 (或简称为面向机器的编程语言) 2、源程序用汇编语言编写的程序称为源程序。 3、汇编由于用汇编语言编写的程序机器(即CPU)不能够直接执行,必须翻译成机器代码(即二进制代码)组成的目标程序,这个翻译过程称为汇编。 (由于机器不能够直接执行用汇编语言编写的程序,只能执行由机器代码(即二进制代码)组成的目标程序,这个将汇编语言翻译成机器代码的过程称为汇编。 ) 4、汇编程序完成上述翻译过程的软件称为汇编程序。 例如而空操作指令NOP的机器码为90H(见P451第44栏),暂停指令HLT的机器码为0F4H(见P447第21栏),汇编程序在汇编时即将NOP和HLT指令分别翻译成机器码90H和0F4H后分别存入程序段存储器中后CPU才能执行。 5、反汇编将机器代码转换成汇编语言的过程称为反汇编。 6、机器码CPU可以直接执行的代码称为机器码或目标程序。 7.1宏汇编语言的基本语法 一、常数、变量和标号汇编语言程序语句=执行性语句+非执行性语句(即说明性语句)执行语句由CPU或处理器指令组成。 与CPU类型有关,执行后CPU都会产生相应的操作。 非执行语句或说明性语句由伪指令或宏指令组成。 与CPU类型无关,不产生CPU的任何操作,只与汇编程序有关,不同版本的汇编程序支持不同的伪指令伪指令语句格式(见P154图7-2)与执行指令的语句格式(见P109图5-1)基本相同,但其伪指令语句和执行指令语句的作用大不不同,在汇编时伪指令语句不产生机器码。 仅用来告诉汇编程序如何将指令语句或伪指令语句中的操作数转换成目标代码。 1、CPU或处理器指令中的操作数可以是立即数、寄存器和存储单元。 且立即数只能是整数。 2、执行性语句中的标号后要加冒号,而非执行性语句的标号后不能加冒号! 3、伪指令中的操作数可以是常数、字符串、常量名、变量名、标号、表达式和专用符号(例如BYTE、WORD、FAR、PARA)等,可以有多个,各参数之间用逗号分隔。 ?常数 二、 八、 十、十六进制数,实数、带引号的字符串(例如“AB”=41H、42H)等。 ?标号指令目标代码的符号地址。 常用作转移指令或子程序调用指令中的目的操作数。 ?变量存放在内存单元中的数据或称内存数据(即对内存数据起一个名,常被称作存储单元的符号地址)。 这些数据在程序运行期间可被随时访问或修改。 其属性有3个段属性SEG指出该变量所在的逻辑段。 偏移属性OFFSET指出该变量所在逻辑段中相对该段起始点的偏移量。 类型属性TYPE表示该变量所占用内存单元的字节数。 一般由数据定义伪指令进行定义,常用数据定义伪指令有DB定义字节。 见P160伪指令中的2.内存数据定义伪指令DW定义字。 DD定义双字。 变量在使用前必须要先进行定义即对其进行命名、定义类型和预置初值变量定义伪指令的语句格式为见P156变量名变量类型表达式1,表达式2,?其表达式形式如下 1、数值表达式数或简单算术表达式。 例如DATA1DB50H,50DATA2DB01,12,23,23+56DATA3DW1234H,2345H,3456H,56X78/ 282、?表达式不带引号的?表示该内存单元可为任意值DATA1DB?,?;自DATA1地址开始预留2个单元DATA2DB1,2,3,?,?;前3个字节单元置初值,后2个;字节单元随意DATA3DW?,?,3456H,56X78/28;前2个字单元随意,;后2个字单元预置初值 3、字符串表达式字符串必须用单引号括起来且不超过256个字符,存放时按字符串的书写顺序自左向右按地址递增顺序存放。 数据类型为DB时,每个字符分配一个字节单元。 数据类型为DW时,每2个字符为一组分配2个字节单元,前一字符在高地址字节,后一字符在低地址字节,每个数据项不能多于2个字符。 数据类型为DD时,每2个字符为一组分配4个字节单元,将字符存入低2个字节顺序同DW,高2个字节存入00H.例1STRING1DBABCDEF;即将41H-46H存入自STRING1开始的连续6个字节单元中例2STRING2DWAB,CD,EF;即将41H-46H存入自STRING1STRING2=42H;开始的连续3个字单元中STRING2+1=41H;STRING2+2=44HSTRING2+3=43HSTRING2+4=46HSTRING2+5=45H;见P157图7- 34、带DUP的表达式用于对多个内存单元进行重复设置。 也称重复数据操作符或重复数据操作伪指令。 语句格式为变量名变量类型表达式1DUP(表达式2);其中表达式1为重复次数,表达式2为重复内容。 例1DATA1DB20H DUP(?);自DATA1地址开始预留20H个;单元,内容随意。 例2DATA2DW20DUP (0);将自DATA1地址开始的连续20个;字单元(即40个字节)清0 二、常用表达式和运算符 1、算术运算符 2、逻辑运算符 3、关系运算符 4、分析运算符(见P158) (1)SEG求段基址;格式SEG例SEG DATA1;求变量DATA1的段基址 (2)OFFSET求偏移地址;格式OFFSET例OFFSET DATA1;求变量DATA1的偏移地址 (3)TYPE求符号名或变量的类型值;格式TYPE;其变量的类型值见P159表71例如TYPE DATA1;=1,TYPE DATA2;=2其中DATA 1、DATA2的类型定义见上面例 1、例 25、组合运算符 (1)定义符号名为新类型;格式PTR例1MOV AX,WORD PTRDATA1;将DATA1重新定义为字类型例2MOV AL,BYTE PTRDATA2;将DATA1重新定义为字节类型7.2常用伪指令见P 1601、符号定义伪指令作用对所用符号进行赋值格式EQU;定义后不能重新赋值=;定义后可以重新赋值 2、内存数据(即变量)定义伪指令即DB、DW、DD作用定义内存变量的类型属性变量名DB 3、段定义伪指令作用对段进行命名和定位格式SEGMENT定位方式连接方式类别名编程时一般使用默认值(即段边界方式)即可。 定位方式是指段的起始地址常用的定位方式(见P162)如下PAGA页边界,即段起始地址的低8位为0PARA段边界,即段起始地址的低4位为0.该方式为系统默认方式WORD;字边界,即段起始地址的最低位为0BYTE任意值 4、段寄存器说明伪指令格式ASSUME段寄存器名段定义名1? 5、过程定义伪指令格式PROCNEAR或FAR;括号内为过程属性?ENDP 6、模块开始伪指令格式NAME模块名作用对程序模块进行命名,模块名可以自行定义,但不能使用关键字!可以默认,其默认名为列表文件标题的前6个字符,若无标题时则默认名为该程序模块的源文件名。 7、模块结束伪指令格式END启动标号或过程名作用通知汇编程序源文件结束,并给出执行程序的入口地址。 启动地址只有在主程序模块才有意义。 8、定位伪指令格式ORG作用指定数据或程序在内存中的起始偏移地址,从表达式指定的起点开始连续存放直到遇到新的ORG指令为止。 表达式为无符号数。 9、列表伪指令 (1)建立标题格式TITLE标题作用为列表文件每页的第1行定义大标题 (2)建立小标题格式SUBTTL标题作用为列表文件每页定义小标题,输出在大标题之后。 (3)自动排版格式PAGE行数,每行字数(即列数)作用为列表文件定义每页行数(10255行)和每行字符数(60-132),默认值是66行80列。 伪指令或说明性语句的作用对变量、工作单元或符号等进行定义或说明,以增加程序的可读性等。 例如已知16位发动机转速测量值存放在2000H和xxH(高8位)单元中,8位温度测量值存放在xxH单元中,试编一个程序将转速测量值送AX寄存器中,温度测量值送DL寄存器中。 程序1MOV AX,2000H;将转速测量值送AX寄存器MOV DL,xxH;将温度测量值送DL寄存器分析尽管程序简单,但不知内存单元中存放的是何数据,缺乏可读性!程序2DATA SEGMENT;段定义伪指令ORG2000H;对存放数据的偏移地址进行定位伪指令ZS DW0;分配转速存放单元WD DB0;定义温度存放单元DATA ENDS?MOV AX,ZS;将转速测量值送AX寄存器MOV DL,WD;将温度测量值送DL寄存器由此可知利用伪指令对工作单元或变量进行了定义后,使得程序具有了可读性!7.3宏指令7.3.1宏指令概述为简化汇编语言程序的书写,将程序中重复出现的内容或代码定义为?宏指令?(即用一条宏指令代替),在其原位置处只需放一条宏调用语句即可,于是可大大简化源程序的书写,提高源程序的可读性。 宏指令类似于子程序或过程,但二者有明显的区别 1、执行方式不同宏调用语句属于说明性语句由汇编程序MASM-86中的宏处理程序代换进行处理,不会引起CPU的任何操作,而子程序调用或过程调用语句是由CPU执行。 2、对内存空间的占用方式不同宏指令在执行时是由汇编程序将宏指令出现的地方将其原内容或原程序段换回!只简化书写,不节省内存!而子程序或过程是将重复出现的内容或代码与主程序分开单独存放!其目标代码在内存中只保留一份!既简化书写又节省内存! 3、CPU工作时间开销不同由于宏指令在汇编时是将该宏指令所代替的原内容换回,因此CPU在执行程序时无需额外耗费任何时间,而产生子程序或过程调用时,CPU必须要进行断点甚至现场的保护和恢复,从而产生额外的时间开销,而降低程序的执行速度。 4、对工作参数的要求不同在进行宏调用时允许改变或修改其工作参数,使得同一条宏指令在各次不同的调用过程中可完成不同的操作,具有较好的灵活性,而子程序或过程一旦被定义,一般不允许修改参数,因此如何子程序或过程在各次调用中只能完成相同的功能。 其灵活性不如宏指令!由上归纳可知一般情况下当程序中重复性的内容或代码较长,且工作参数相对固定时可采用子程序或过程,当程序中重复性的内容较少或代码较短,且希望在各次调用时能够修改工作参数时,宜采用宏调用方式。 7.3.2宏指令的定义和使用方法 一、宏指令使用说明宏指令在使用前必须要先进行定义!其步骤如下 1、宏定义即对程序中所出现的重复性内容或代码进行定义,并起一个名。 2、宏调用在程序中出现重复性内容或代码位置处用一条宏调用语句进行替换。 (即将其重复性内容或代码位置处通过宏指令名来调用它) 3、宏扩展(宏展开)由宏汇编程序在宏调用语句(即宏调用指令)处,将原内容换回。 并在展开的指令语句左端加上标识符+ 二、宏代换和宏调用语句格式 1、宏代换语句格式宏名MACRO形式参数1,形式参数2,?;形式参数为可选项宏体;即需要进行宏代换的内容或代码ENDM 2、宏调用语句格式宏名实在参数1,实在参数2,?;实在参数必须与形式参数对应P167例宏定义AH MACRO Y,X;Y、X分别为形式参数MOV CL,X RO&Y CL;教材P167原题有错,该语句缺少源操作数!;当被宏代换的内容为指令助记符中的符号;时,要在符号前加宏代换符&ENDM AHMACROY,X;AH为宏名,Y、X为形式参数MOV CL,X RO&Y AL,CL;或为RO&Y CL,CL ENDM宏调用AH R,5;其中R为和形式参数表中的Y所对应的实在参数;5为和形式参数表中的X所对应的实在参数宏展开+MOVCL,5+ROR AL,CL补充宏指令和子程序应用举例已知两位LED数码显示器的I/O地址分别是个位为LED0,十位为LED1,试编一个程序将DATA单元的内容送LED进行显示。 即该单元的低4位送个位LED0,高4位送十位LED1。 ORG1000H;程序模块定位DATA SEGMENT;定义数据段LED_TBL DB3FH,06H,5BH,;建立09的7段LED数码显示器段码表DATA DB36H;预置待显数据DATA ENDS;数据段结束STAC SEGMENT PARA STACKDAT;定义堆栈段STA1DW10DUP(?)STAC ENDS;堆栈段结束CODE SEGMENTPARACODE;定义代码段ASSUME CSCODE,DSDAT,SSSTAC STAR PROC FAR;过程定义PUSH DS;保护操作系统当前的数据指针DS00(即现场)以便执行XOR AX,AX;完用户程序后恢复PUSH AXMOV AX,SEG LED_TBL;获取并建立用户数据区的段基址MOV DS,AX;建立用户段MOV AL,DATA;取出数据送AL ANDAL,0FH;分离出低4位MOV BX,OFFSET LED_TBL;获取用户数据区的偏移地址XLAT;查表将低4位数据转换为LED七段码CB LED0;宏调用OUT LED0,AL;将查表得到的LED七段码输出到LED外设MOV AL,DATA;再次取出数据送AL SHR AL,1;右移4位分离出高4位SHR AL,1;SHR AL,1;SHR AL,1;MOV BX,OFFSET LED_TBL;获取用户数据区的偏移地址XLAT;查表将低4位数据转换为LED七段码CB LED1;宏调用OUT LED1,AL;将查表得到的LED七段码输出到LED外设RET STAR ENDP;过程结束CODE ENDS;代码段结束END STAR;模块结束;宏定义;即宏代换语句CB MACROX;CB为宏名,X为形式参数MOV BX,OFFSET LED_TBL;获取用户数据区的偏移地址宏体XLAT;查表将低4位数据转换为LED七段码宏体OUT X,AL;将查表得到的LED七段码输出到LED外设宏体ENDM解法2采用宏指令方式ORG1000H DATASEGMENT;定义数据段LED_TBL DB3FH,06H,5BH,;建立7段LED数码显示器段码表0-9DATA DB36H;待显数据DATA ENDS;数据段结束;定位方式,连接方式,类别名(自定义符)STAC SEGMENTPARA STACKDAT;定义堆栈段STA1DW10DUP(?)STAC ENDS;堆栈段结束CB MACROX;宏定义(即

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论