第四章 微机原理与接口技术 课件 科大 周荷琴_第1页
第四章 微机原理与接口技术 课件 科大 周荷琴_第2页
第四章 微机原理与接口技术 课件 科大 周荷琴_第3页
第四章 微机原理与接口技术 课件 科大 周荷琴_第4页
第四章 微机原理与接口技术 课件 科大 周荷琴_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

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

文档简介

第四章汇编语言程序设计§4.1概述§4.2汇编语言源程序的格式§4.3MASM中的表达式§4.4伪指令§4.5常用的DOS和BIOS调用§4.6汇编程序设计及举例§4.1概述三层语言结构:用来编写计算机程序的语言,即程序设计语言,包括机器语言、汇编语言和高级语言,分别位于三个层次。(1)机器语言机器语言是位于最底层的程序设计语言,是使用二级制代码表示的指令系统,用机器语言编写的程序称为“目标程序”难辨认、难记忆、易出错(2)汇编语言汇编语言使用助记符来表示指令的操作码和操作数,使用标号和符号来代表地址、常量和变量,便于识别和记忆。汇编语言的一条语句对应一条机器语言指令。用汇编语言编写的程序,称为“汇编语言程序”,这种程序不能直接由计算机识别,需要通过一种起翻译作用的“汇编程序”将其翻译成机器语言,由计算机执行。缺点:使用汇编语言编写程序,必须要熟悉机器的指令系统、寻址方式、寄存器的设置和使用方法,它是一种面向机器的低级语言,不能被直接移植到其他类型的机器上。(3)高级语言高级语言是一种面向问题或过程的语言,它独立于机器,其编写的程序是可以移植的。高级语言的一个语句相当于许多条汇编语言指令或机器语言指令。高级语言编写的程序也必须翻译成机器语言后才能执行。实现这种翻译的程序叫做“编译程序”,不同的语言有不同的编译程序。用汇编语言或高级语言编写的程序称为“源程序”。汇编语言或高级语言的程序处理过程:汇编语言或高级语言的程序处理过程:1、编辑汇编语言源程序(即建立.ASM文件)2、汇编为目标程序(即汇编为.OBJ,.LST,.CRF文件)3、连接为可执行程序(即生成.EXE文件)4、运行语言源程序结构:§4.2汇编语言格式一、分段格式汇编语言程序按段编写,这样有利于用户按段组织程序和存放数据。用户所定义的不同段将被存放在内存的不同位置,有利于存储器管理。一个汇编语言源程序可以由若干个段组成,程序中的指令、数据以及堆栈都应当定义到具体的段中。汇编语言有两种类型语句,即指令和伪指令,前者属于指令性语句,后者属于指示性语句指令性语句:指令,由汇编程序翻译成机器指令,在汇编过程中产生对应的目标代码典型的汇编指令是:ADDAX,[SI]指示性语句:为汇编程序提供一些信息,让汇编程序在汇编过程执行某些特定的功能,不产生目标代码典型的伪指令是:COSTDW?;定义一个字空间,并将标识符COST指向该字空间二、汇编语言语句的类型和组成1、汇编指令格式[标号:]助记符[操作数,操作数][;注释]标号是指为该指令所在地址取的名字,后面必须跟冒号“:”。标号是可供选择的标识符8086/8088汇编语言中使用的标识符必须遵循下列规则:标识符由字母(a~z,A~Z)、数字(0~9)或下划线组成标识符必须以字母开头标识符有效长度为31个字符,若超过31个字符,则只保留前面的31个字符为有效字符[标号:]助记符[操作数,操作数][;注释]指令助记符是指令名称的代表符号,是指令语句中的关键字,不能省略,它表示本指令的操作类型,必要时可在助记符前加一个或多个“前缀”操作数是参加本指令运算的数据,有些指令不需要操作数,有些指令只需要一个操作数,有些指令需要两个操作数,需要用逗号隔开;有些操作数可以用表达式表示注释为可选项,需用分号开头,便于阅读程序,汇编程序不对其进行任何处理2、伪指令格式[名称]伪指令定义符[操作数][;注释]伪指令格式与指令格式有以下几点不同:名称相当于指令语句中的标号,但在名称后不允许带冒号伪指令定义符是由MASM规定的符号,又称汇编命令,不可缺省,如DB、DW、PROC等操作数个数随不同的伪指令不同,有的伪指令不允许带操作数,有的允许带多个操作数三、汇编语言的数据1、常数指令中出现的固定值二进制:最后加字母B例如:01000111B十进制:最后加字母D,D可以忽略例如:1996或1996D八进制:最后加字母Q(或O)例如:2560Q十六进制:最后加字母H,如果以字母“A~F”开头,前面加0例如:0AH,0A342H132、变量变量通常指存放在存储单元中的值,在程序运行中是可以修改的。(1)段值(SEGMENT)(2)段内偏移地址(OFFSET)(3)类型(TYPE):指变量中每个元素包含的字节数3、标号标号是可执行指令语句的地址的符号表示,它可以作为转移指令和调用指令的目标操作数,以确定程序转向的目标地址,它也具有三个属性:段值、段内偏移地址、类型(指在转移指令中标号可转移的距离)144、保留字保留字是汇编语言中预先保留下的具有特殊意义的符号,只能作为固定的用途指令、伪指令。寄存器名等都是保留字5、注释从分号(;)开始,到本行结束15§4.3MASM中的表达式表达式由操作数以及运算符组成,在汇编时由汇编程序对它进行运算,运算结果作为一个语句中的操作数去使用。运算结果可以是一个常数字,也可以是一个存储器的地址。一、操作数:代表一个数据或一个地址数据:常数或变量地址:标号二、运算符1、算术运算符2、逻辑运算符3、关系运算符4、分析运算符5、综合运算符6、其它运算符16171、算术运算符+-X/MODSHLSHR可以对数据进行运算,运算结果仍然为数据,但对地址不能进行乘除运算。例如:20A1H+1040H21HSHL2=84H182、逻辑运算符

ANDORNOTXOR只能对常数进行运算,得到的结果也是常数既可以作指令助记符,又可以作汇编语言的运算符指令助记符是在程序执行时运算的,运算符是在汇编过程进行的例如:ANDDX,PORTAND0FEH

如果PORT值为90H,则相当于ANDDX,90H

如果PORT值为81H,则相当于ANDDX,80H193、关系运算符EQNELTGTLEGE两个参加运算的数必须同是数值,或同是内存单元的地址,而结果总是一个数值。如果关系成立:其运算结果为0FFH或0FFFFH,否则,其结果为0例如:MOVDX,PORTLT5

如果PORT小于5,相当于MOVDX,0FFFFH

如果PORT不小于5,相当于MOVDX,020关系运算符一般不单独使用,而是和逻辑运算符结合起来使用例如:MOVBX,((PORTLT5)AND20)OR(PORTGE5)AND30)当PORT小于5时,相当于MOVBX,20当PORT大于或等于5时,相当于MOVBX,30214、分析运算符(数值返回运算符)OFFSETSEGTYPESIZELENGTH(1)OFFSET:取变量或标号的偏移地址值格式:OFFSET变量或标号(2)SEG:取变量或标号的段基址格式:SEG变量或标号(3)TYPE:返回变量的类型属性或标号的距离属性格式:TYPE变量或标号A1DB20H,30HA2DW0438HL1:MOVAH,TYPEA1MOVBH,TYPEA2MOVBL,TYPEL1(4)LENGTH:当变量中使用DUP时,LENGTH返回此变量所包含的单元数,对其它变量则返回1格式:LENGTH变量22M1DW100DUP(?)M2DW1,2,3M3DB‘ABCD’MOVCX,LENGTHM1MOVBL,LENGTHM2MOVAL,LENGTHM3(5)SIZE:返回变量包含的字节数格式:SIZE变量SIZE=LENGTH*TYPE2324例如:ABCDW100DUP(?)OFFSET:求偏移地址MOVDX,OFFSETABCSEG:求段基址

MOVAX,SEGABCMOVDS,AXTYPE:求标识符类型值LENGTH:求为标识符分配的项数SIZE:求为标识符分配的字节数

TYPEABC;等于2LENGTHABC;等于100SIZEABC;等于200255、综合运算符(修改属性运算符):段操作符、PTR、THIS、HIGH、LOW、SHORTPTR:定义某内存单元类型

格式:类型PTR变量/标号例如:MOVAX,WORDPTRD1;定义D1指向的内存单

元为字单元MOVBYTEPTR[1000H],0MOVWORDPTR[1000H],0PTR通常和伪指令BYTE、WORD等合用26THIS:指定新类型

格式:变量/标号EQUTHIS类型/距离将EQUTHIS右边的类型/距离属性,赋给左边的变量/标号,该变量或标号的段地址和偏移地址与下一个存储单元的地址相同例如:LABCEQUTHISBYTELABDDW4321H,2255HMOVAL,LABC;AL=21HMOVAX,LABD;AX=4321HLABC和LABD具有相同的段地址和偏移量,但LABC是字节类型,LABD是字类型。27SHORT标号

SHORT用来说明转移类指令中转向地址的属性,指出转向的目标地址与本指令之间的距离在-128~+127之间,即限制在短转移范围内LOW变量或标号

;取低字节HIGH变量或标号

;取高字节MOVAL,LOW3080H;AL=80HMOVAX,HIGH3A4BH;AH=3AH6、其他运算符其它运算符有(),[],<>,●,MASK和WIDTH等六种圆括号():用来改变运算符的优先级别,()中的运算符具有最高优先权方括号[]:主要用来表示地址表达式或多重变量的下标值尖括号<>及原点:在结构中专用MASK和WIDTH:在记录中专用2829数据定义伪指令:DBDWDDDQDT存储单元类型定义伪指令:BYTEWORDDWORD符号定义伪指令:EQU=段定义伪指令:SEGMENTENDSASSUMEORG过程定义伪指令:PROCENDPNEARFAR程序结束伪指令:END简化段定义伪指令:MODELCODEDATASTACK§4.4伪指令301、数据定义伪指令:DBDWDDDQDT用来定义存储单元的符号名,并初始化该单元或该单元开始的若干连续单元,初始化可以采用确定值,也可以采用不确定值DB(DefineByte)格式:[符号名]DB<表达式或数据项表>表达式中的值或项表中的每一项定义为一个字节数,它们从符号名地址开始按字节连续存放,直到表中数据项结束(地址递增方向),表达式的值或项对应小于8位2进制数表示的最大值例如:FIRSTDB3,18,25H,’ABC’SECONDDB?THIRDDB9DUP(?)31DW(DefineWord)格式:[符号名]DW<表达式或数据项表>表达式的值或项表中的每一项都是两个字节数,应小于16位二进制数表示的最大值例如:DONDW10DUP(?);在内存中留出10个空单

元,其中每项都是2个字节32DD:定义双字DQ:定义4个字DT:定义10个字例如:N1DD2.5,3.2E+2DD可以用来定义有小数点的十进制数或用科学计数法表示的数据,小数在汇编时被译成四字节浮点数,尾数在低地址一端,阶码在高地址一端DQ和DT也允许浮点数形式

COUNTDT?;在内存中留出1个空单元,其中每项都是10个字33举例:S1DB‘ABCDEF’S1DB‘A’,’B’,’C’,’D’,’E’,’F’

S2DW‘AB’,’CD’,’EF’S3DD‘AB’,’CD’34带DUP的表达式,DUP是定义重复数据操作符例:DB1DB10HDUP(?)DB2DB10HDUP(‘ABCD’)DB3DB2HDUP(0,2,?)第一个语句表示保留10H个字节,第二个语句表示重复10H个字符串“ABCD”,共占40H个字节,第三个语句是重复2H个数字串和空单元

35注意数据定义与引用时,要保证数据类型的正确性举例:数据定义:D1DB3DUP(12H)

引用:MOVAX,D1;引用错误MOVAX,WORDPTRD12、符号定义伪指令EQUEQU伪指令用来对标号赋值,使标号等于数值或标号等于标号格式:<标号>EQU<表达式><新标号>EQU<旧标号>例如:ABCEQU220XYZEQUABCCOUNTEQUCX同一个标号不能被两次赋值,除非先清除标号的原值,与EQU相对应的清除指令:PURGEPURGEABC;清除对ABC的赋值362、符号定义伪指令=用来对标号赋值,使标号等于数值格式:<标号>=<表达式>例如:ABC=10ABC=ABC-1373、段定义伪指令SEGMENTENDSAEEUMEORGSEGMENTENDS成对出现,定义段格式:段名SEGMENT

段的内容…

段名ENDS段名为用户自定义的标号,可以为任何有效的标识符例如:DATA-SEGSEGMENT…DATA-SEGENDSCODE-SEGSEGMENT…CODE-SEGENDS383、段定义伪指令ASSUME:用于指定用户定义的哪一个段为数据段、代码段和堆栈段。对DS、SS只知道段基址,而实际值要在程序中使用传送命令来具体赋值。例如:ASSUMECS:CODE-SEG,DS:DATA-SEG该指令指出CODE-SEG的段地址在CS中,DATA-SEG的段地址在DS中,但并没有把段地址装入相应的段寄存器,因此除了CS以外(CS通过在启动代码段时由段间转移装入),将段地址装入相应寄存器的工作必须通过MOV传送指令完成。39举例例如:CODE-SEGSEGMENTASSUMECS:CODE-SEG,DS:DATA-SEG,SS:STACK-SEGSTART:MOVAX,DATA-SEGMOVDS,AXMOVAX,STACK-SEGMOVSS,AX…CODE-SEGENDS说明:段名可以是任意的自定义标识符DS、SS的段地址值需要传送指令获得40实现两个16位二进制数的相乘41424、过程定义伪指令PROC、ENDP、NEAR、FARPROC、ENDP成对出现,用于定义过程,即子程序格式:过程名PROC[NEAR](或[FAR]

过程的内容……

过程名ENDP过程名为用户自定义的标号,定义过程是为实现子程序调用而设的调用格式为:CALL过程名过程由RET指令返回,它可以不是最后一条指令,在过程中可以设置多点返回。434、过程定义伪指令过程调用可分为段内调用和段间调用:段内调用和段间调用由被调用子程序头部的FAR或NEAR伪指令指出,NEAR可以省略段内调用和段间调用的返回指令助记符都是RET,但执行的操作不同,段内调用时汇编程序对RET产生指令编码C3H,实现段内返回;段间调用时汇编程序对RET产生指令编码CBH,实现段间返回44例子:多字节的BCD码相加45465、源程序结束伪指令END格式:END标号476、简化段定义伪指令(1)存储模式定义伪指令.MODEL格式:.MODEL<存储模式>TINY:微型,其代码和数据位于一个段内(<=64KB),一般用于编写.COM程序SMALL:小型,代码在一个段内(<=64KB),数据在另一个段内,在这种存储模式下,数据段寄存器可保持不变,所有转移都可以认为是段内转移COMPACT:紧凑型,代码在一个段内,有任意个数据段,没有大于64KB的数组LARGE:大型,代码与数据均占用任意个段,没有大于64KB的数组48(2)段定义伪指令.CODE,.DATA和.STACK简化段定义伪指令说明一个段的开始,同时也表示上一个段的结束。伪指令END则说明最后一个段地结束和程序的结束49例:简化段定义的源程序示例,用于显示字符串“HELLO”50§4.5

DOS的软件中断和系统功能调用MC-DOS是IBMPC系列计算机上最普遍的操作系统,它采用层次化模块结构,由一个引导程序BOOT和3个层次模块组成。这3个模块分别是:输入输出模块IO.SYS、文件管理模块MSDOS.SYS和命令处理模块COMMAND.COMMS-DOS从两个层次上为用户提供了访问接口。一般用户可以通过键盘命令在命令处理模块层次上进行访问;高级用户则可以通过软件中断和系统功能调用在文件管理模块层次上进行访问。511、MS-DOS常用软件中断52MS-DOS的主要系统功能都使用中端处理程序的形式来提供这些软中断隐蔽了设备的物理特性和接口方式,调用时首先设置好入口参数,即可转去执行相应的子程序系统功能调用专指类型为21H的软中断,包含多个功能程序,每个子程序对应一个功能号。531、MS-DOS常用软件中断5455INT10H;显示器设置INT13H;磁盘驱动INT16H;键盘驱动INT17H;打印机驱动INT14H;异步通讯设备驱动INT1AH;系统时间设置和读取MS-DOS的主要系统功能都是使用中断处理程序的形式来提供的。这些软中断隐蔽了设备的物理特性和接口方式,调用时首先设置好入口参数,即可转去执行相应的子程序。

温馨提示

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

评论

0/150

提交评论