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

下载本文档

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

文档简介

§4.

1

概述§4.2

汇编语言源程序的格式§4.3MASM中的表达式§4.4

伪指令§4.5常用的DOS和BIOS调用§4.6

汇编程序设计及举例第四章

汇编语言程序设计三层语言结构:用来编写计算机程序的语言,即程序设计语言,包括机器语言、汇编语言和高级语言,分别位于三个层次。(1)机器语言机器语言是位于最底层的程序设计语言,是使用二级制代码表示的指令系统,用机器语言编写的程序称为“目标程序”难辨认、难记忆、易出错§4.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,0A342H三

、汇编语言的数据例如132、变量变量通常指存放在存储单元中的值,在程序运行中是可以修改的。(1)段值(SEGMENT)(2)段内偏移地址(OFFSET)(3)类型(TYPE):指变量中每个元素包含的字节数3、标号标号是可执行指令语句的地址的符号表示,它可以作为转移指令和调用指令的目标操作数,以确定程序转向的目标地址,它也具有三个属性:段值、段内偏移地址、类型(指在转移指令中标号可转移的距离)144、保留字保留字是汇编语言中预先保留下的具有特殊意义的符号,只能作为固定的用途指令、伪指令。寄存器名等都是保留字5、注释从分号(;)开始,到本行结束15表达式由操作数以及运算符组成,在汇编时由汇编程序对它进行运算,运算结果作为一个语句中的操作数去使用。运算结果可以是一个常数字,也可以是一个存储器的地址。一、操作数:代表一个数据或一个地址数据:常数或变量地址:标号二、运算符1、算术运算符2、逻辑运算符3、关系运算符4、分析运算符5、综合运算符6、其它运算符§4.3MASM中的表达式161、算术运算符+-X/MODSHLSHR可以对数据进行运算,运算结果仍然为数据,但对地址不能进行乘除20A1H+1040H21H

SHL

2

=

84H运算。例如:172、逻辑运算符ANDORNOTXOR只能对常数进行运算,得到的结果也是常数既可以作指令助记符,又可以作汇编语言的运算符指令助记符是在程序执行时运算的,运算符是在汇编过程进行的例如:ANDDX,PORTAND0FEH如果PORT值为90H,则相当于ANDDX,90H如果PORT值为81H,则相当于ANDDX,80H183、关系运算符EQNELTGTLEGE两个参加运算的数必须同是数值,或同是内存单元的地址,而结果总是一个数值。如果关系成立:其运算结果为0FFH或0FFFFH,否则,其结果为0例如:MOVDX,PORTLT5如果PORT小于5,相当于MOVDX,0FFFFH如果PORT不小于5,相当于MOVDX,019关系运算符一般不单独使用,而是和逻辑运算符结合起来使用例如:MOVBX,((PORTLT5)AND20)OR(PORTGE5)AND30)当PORT小于5时,相当于MOVBX,20当PORT大于或等于5时,相当于MOVBX,30D204、分析运算符(数值返回运算符)OFFSETSEGTYPESIZELENGTH(1)OFFSET:取变量或标号的偏移地址值格式:OFFSET变量或标号(2)SEG:取变量或标号的段基址格式:SEG变量或标号D21(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*TYPED23例如:ABCDW100DUP(?)•OFFSET:求偏移地址MOVDX,OFFSETABC•SEG:求段基址MOVAX,SEGABCMOVDS,AX•TYPE:求标识符类型值•LENGTH:求为标识符分配的项数•SIZE:求为标识符分配的字节数TYPEABC;等于2LENGTHABC;等于100SIZEABC;等于200D245、综合运算符(修改属性运算符):段操作符、PTR、THIS、HIGH、LOW、SHORT➢PTR:定义某内存单元类型格式:类型PTR变量/标号例如:MOVAX,WORDPTRD1;定义D1指向的内存单元为字单元MOVBYTEPTR[1000H],0MOVWORDPTR[1000H],0PTR通常和伪指令BYTE、WORD等合用25➢THIS:指定新类型格式:变量/标号EQUTHIS类型/距离将EQUTHIS右边的类型/距离属性,赋给左边的变量/标号,该变量或标号的段地址和偏移地址与下一个存储单元的地址相同例如:LABCEQUTHISBYTELABDDW4321H,2255HMOVAL,LABC;AL=21HMOVAX,LABD;AX=4321HLABC和LABD具有相同的段地址和偏移量,但LABC是字节类型,LABD是字类型。26➢SHORT标号SHORT用来说明转移类指令中转向地址的属性,指出转向的目标地址与本指令之间的距离在-128~+127之间,即限制在短转移范围内➢LOW变量或标号;取低字节➢HIGH变量或标号;取高字节MOVAL,LOW3080H;AL=80HMOVAX,HIGH3A4BH;AH=3AH276、其他运算符其它运算符有(),[],<>,●,MASK和WIDTH等六种➢圆括号():用来改变运算符的优先级别,()中的运算符具有最高优先权➢方括号[]:主要用来表示地址表达式或多重变量的下标值➢尖括号<>及原点:在结构中专用➢MASK和WIDTH:在记录中专用28数据定义伪指令:DBDWDDDQDT存储单元类型定义伪指令:BYTEWORDDWORD符号定义伪指令:EQU=段定义伪指令:SEGMENTENDSASSUMEORG过程定义伪指令:PROCENDPNEARFAR程序结束伪指令:END简化段定义伪指令:MODELCODEDATASTACKD29§4.4

伪指令1、数据定义伪指令:DBDWDDDQDT用来定义存储单元的符号名,并初始化该单元或该单元开始的若干连续单元,初始化可以采用确定值,也可以采用不确定值DB(DefineByte)格式:[符号名]DB<表达式或数据项表>表达式中的值或项表中的每一项定义为一个字节数,它们从符号名地址开始按字节连续存放,直到表中数据项结束(地址递增方向),表达式的值或项对应小于8位2进制数表示的最大值例如:FIRSTDB3,18,25H,’ABC’SECONDDB?THIRDDB9DUP(?)30DW(DefineWord)格式:[符号名]DW<表达式或数据项表>表达式的值或项表中的每一项都是两个字节数,应小于16位二进制数表示的最大值例如:DONDW10DUP(?);在内存中留出10个空单元,其中每项都是2个字节31DD:定义双字DQ:定义4个字DT:定义10个字例如:N1DD2.5,3.2E+2DD可以用来定义有小数点的十进制数或用科学计数法表示的数据,小数在汇编时被译成四字节浮点数,尾数在低地址一端,阶码在高地址一端DQ和DT也允许浮点数形式COUNTDT?;在内存中留出1个空单元,其中每项都是10个字32举例:S1DB‘ABCDEF’S1DB‘A’,’B’,’C’,’D’,’E’,’F’S2DW‘AB’,’CD’,’EF’S3DD‘AB’,’CD’D33例:例:例:例:例:第一个语句表示保留10H个字节,第二个语句表示重复10H个字符串“ABCD”,共占40H个字节,第三个语句是重复2H个数字串和空单元带DUP的表达式,DUP是定义重复数据操作符34要保证数据类型的正确性DB3DUP(12H)AX,D1;

引用错误AX,WORD

PTRD1注意数据定义与引用时,举例:数据定义:D1引用:MOVMOVD35EQU伪指令用来对标号赋值,使标号等于数值或标号等于标号格式:<标号>EQU<表达式><新标号>EQU<旧标号>例如:ABCEQU220XYZEQUABCCOUNTEQUCX同一个标号不能被两次赋值,除非先清除标号的原值,与EQU相对应的清除指令:PURGEPURGEABC;清除对ABC的赋值2

、符号定义伪指令EQU36用来对标号赋值,使标号等于数值格式:<标号>=<表达式>例如:ABC=10ABC=ABC-1D372

、符号定义伪指令=SEGMENTENDS成对出现,定义段格式:段名SEGMENT段的内容…段名ENDS段名为用户自定义的标号,可以为任何有效的标识符例如:DATA-SEGSEGMENT…D38DATA-SEGENDSCODE-SEGSEGMENT…CODE-SEGENDS3

、段定义伪指令SEGMENT

ENDSAEEUMEORGASSUME:用于指定用户定义的哪一个段为数据段、代码段和堆栈段。对DS、SS只知道段基址,而实际值要在程序中使用传送命令来具体赋值。例如:ASSUMECS:CODE-SEG,DS:DATA-SEG该指令指出CODE-SEG的段地址在CS中,DATA-SEG的段地址在DS中,但并没有把段地址装入相应的段寄存器,因此除了CS以外(CS通过在启动代码段时由段间转移装入),将段地址装入相应寄存器的工作必须通过MOV传送指令完成。393

、段定义伪指令例如:CODE-SEGSEGMENTASSUMECS:CODE-SEG,DS:DATA-SEG,SS:STACK-SEGSTART:MOVAX,DATA-SEGMOVDS,AXMOVAX,STACK-SEGMOVSS,AX…CODE-SEGENDS说明:。段名可以是任意的自定义标识符。DS、SS的段地址值需要传送指令获得D40举例D41实现两个16位二进制数的相乘42PROC、ENDP成对出现,用于定义过程,即子程序格式:过程名PROC[NEAR](或[FAR]过程的内容……过程名ENDP过程名为用户自定义的标号,定义过程是为实现子程序调用而设的调用格式为:CALL过程名过程由RET指令返回,它可以不是最后一条指令,在过程中可以设置多点返回。434

、过程定义伪指令PROC

、ENDP

、NEAR

、FAR过程调用可分为段内调用和段间调用:段内调用和段间调用由被调用子程序头部的FAR或NEAR伪指令指出,NEAR可以省略段内调用和段间调用的返回指令助记符都是RET,但执行的操作不同,段内调用时汇编程序对RET产生指令编码C3H,实现段内返回;段间调用时汇编程序对RET产生指令编码CBH,实现段间返回4

、过程定义伪指令44例子:多字节的BCD码相加45D46D475

、源程序结束伪指令

END格式:END标号(1)存储模式定义伪指令.MODEL格式:.MODEL<存储模式>◆TINY:微型,其代码和数据位于一个段内(<=64KB),一般用于编写.COM程序◆SMALL:小型,代码在一个段内(<=64KB),数据在另一个段内,在这种存储模式下,数据段寄存器可保持不变,所有转移都可以认为是段内转移◆COMPACT:紧凑型,代码在一个段内,有任意个数据段,没有大于64KB的数组◆LARGE:大型,代码与数据均占用任意个段,没有大于64KB的数组486

简化段定义伪指令(2)段定义伪指令.CODE,.DATA和.STACK简化段定义伪指令说明一个段的开始,同时也表示上一个段的结束。伪指令END则说明最后一个段地结束和程序的结束4950例:简化段定义的源程序示例,用于显示字符串“HELLO”MC-DOS是IBMPC系列计算机上最普遍的操作系统,它采用层次化模块结构,由一个引导程序BOOT和3个层次模块组成。这3个模块分别是:输入输出模块IO.SYS、文件管理模块MSDOS.SYS和命令处理模块COMMAND.COMMS-DOS从两个层次上为用户提供了访问接口。一般用户可以通过键盘命令在命令处理模块层次上进行访问;高级用户则可以通过软件中断和系统功能调用在文件管理模块层次上进行访问。51§4

.5

DOS的软件中断和系统功能调用1

、MS-DOS常用软件中断52MS-DOS的主要系统功能都使用中端处理程序的形式来提供这些软中断隐蔽了设备的物理特性和接口方式,调用时首先设置好入口参数,即可转去执行相应的子程序系统功能调用专指类型为21H的软中断,包含多个功能程序,每个子程序对应一个功能号。531

、MS-DOS常用软件中断54MS-DOS的主要系统功能都是使用中断处理程序的形式来提供的。这些软中断隐蔽了设备的物理特性和接口方式,调用时首先设置好入口参数,即可转去执行相应的子程序。55INT

10H;

显示器设置INT

13H;

磁盘驱动INT

16H;

键盘驱动INT

17H;

打印机驱动INT

14H;

异步通讯设备驱动INT

1AH;

系统时间设置和读取系统功能调用专指类型为21H的软中断,包含多个功能程序,每个子程序对应一个功能号。INT21H为系统功能调用,其功能号在AH中AH=01;键盘输入AH=02;键盘输出AH=03;串口输入AH=04;串口输出AH=05;打印机输出AH=08;键盘输入(无回显)AH=09;显示字符串AH=0A;输入字符串AH=4C;返回操作系统系统功能调用:561号功能调用:从键盘输入字符并显示格式:MOVAH,1INT21H执行上述命令后,系统扫描键盘等待有键按下,若有键按下,就将键值(ASCII码)读入,先检查是否为Ctrl-Break键,若是就自动调用中断INT23H,执行退出命令,否则将键值送AL寄存器并在屏幕上显示此字符(

1)

1号功能调用(键盘输入并显示单字符)57D58KEY:

MOVINTCMP

JE

CMP

JEJMPYES:

……NO

:

……AH,

121HAL,YESAL,NOKEY‘Y

’‘N

’例题调用INT21H的A号功能,其功能是将键盘输入的字符串写入到内存缓冲区,因此事先必须要定义一个缓冲区。DX为缓冲区的首地址,缓冲区的第一个字节指出能容纳的最大字符个数,由用户给出;第二个字节存放实际输入的字符个数,由系统最后填入;从第三个字节开始存放从键盘接收的字符,直到回车键结束若实际键入的字符数大于给定的最大字符数,则后面输入的字符丢失;若输入的字符数小于给定的最大字符数,缓冲区其余部分填0,0AH功能调用时,要求将DS:DX指向缓冲区第一个字节59(2)、0AH功能调用:输入字符串MAXLEN

DB

32ACTLEN

DB

?STRINGDB32DUP(?)LEADX,

MAXLENMOV

AH,0AHINT21HD60格式:MOVDL,<字符>MOVAH,2INT21H将置入DL寄存器中的字符从屏幕上显示输出在屏幕上显示“3”D61(3)、2号功能调用:单字符输出DL,

33HAH,

221HMOVMOV

INT将指定的内存缓冲区中的字符串从屏幕显示输出(或从打印机打印输出),缓冲区的字符串以“$”结束,DS:DX为串的首地址。MESSAGEDB‘Howareyou!$’MOVDX,

SEG

MESSAGEMOVDS,

DXMOVDX,

OFFSET

MESSAGEMOVAH,

9INT21H(4)、9号功能调用:字符串输出62如果DL=0FFH,表示从键盘输入单字符送AL寄存器;如果DL≠0FFH,将指定的内存缓冲区中的字符串从屏幕上显示输出(或从打印机打印输出),缓冲区的字符串以‘$’结束。DS:DX为串的首地址。MOVDL,0FFHMOVAH,

6INT21HMOVDL,

‘A

’MOVAH,

6(

5)

控制输入/输出单字符INT

21H63进行汇编语言程序设计可以参考下述过程:(1)分析问题,建立基于问题的数学模型(2)设计算法(3)绘制流程图或结构图(4)编写程序(5)上机调试D644

.6汇编程序设计及举例汇编语言程序设计采用结构化程序设计方法,其基本结构包括:◆顺序结构◆分支结构◆循环结构65顺序结构是最简单的一种程序结构,程序将按语句顺序执行。例如:将输入的大写字符转换成小写字符输出.MODEL.STACK200H.DATAS-INPUTDB‘PLEASEINPUTA~Z:$’S-OUTDB0DH,0AH,‘CONVERTRESULT:$’.CODED661

、顺序结构D67MOVDS,

AXMOVAH,

9LEADX,

S-INPUTINT21HMOVAH,

1INT21HLEADX,

S-OUTINT21HPOPAXMOVDL,

ALADDDL,

20HMOVAH,

2INT

21HMOV

AX,

4C00HINT

21HEND

STARTPUSH

AXMOV

AH,9START:

MOV

AX,

@DATA682、分支程序要求计算机作出判断,根据判断结果作出不同处理DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,SOURCE;X1送ALCMPAL,SOURCE+1;X1-X2JNCBRANCH;若X1>X2,转BRANCHMOVAL,SOURCE+1;否则,X2送ALBRANCH:MOVMAX,ALCODEENDS例:比较两个无符号数的大小,把大数存入MAX单元DATASEGMENTSOURCEDB0AAH,0B2H;定义两个无符号数MAXDB?END

START69循环程序一般由初始化、循环体、循环控制和循环结束处理几部分组成。例:编写程序完成DATASEGMENTBUFDWa1,a2,…,a10SUMDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX70MOVAX,03

、循环程序D71DI,

OFFSET

SUMBX,

OFFSET

BUFCX,

10AX,

[BX]BXBXCXLOP[DI],

AXAX,

4C00H21HMOVMOVMOVADDINCINCDECJNZMOVMOVINTENDSENDSTARTLOP:CODE(1)子程序调用和返回子程序调用:CALL子程序名分为段内调用和段间调用,直接调用和间接调用子程序返回:RET或RETn执行CALL指令时自动压栈返回地址,执行RET指令把压栈的返回地址弹出送IP或CS:IP(段间返回)(2)现场的保护与恢复如果需要则可以保存标志寄存器和其他寄存器的值724

、子程序(3)参数的传递:指主程序和子程序之间相关信息或数据的传递传递的方式有:寄存器、内存单元和堆栈三种(4)子程序的嵌套和递归调用子程序调用子程序的过程称为嵌套调用;子程序调用自身的过程称为递归调用。

温馨提示

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

评论

0/150

提交评论