微机接口原理汇编语言程序设计_第1页
微机接口原理汇编语言程序设计_第2页
微机接口原理汇编语言程序设计_第3页
微机接口原理汇编语言程序设计_第4页
微机接口原理汇编语言程序设计_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

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

文档简介

1、本章教学重点和难点:本章教学重点和难点: 汇编语言语句的书写格式及运行环境与步骤汇编语言语句的书写格式及运行环境与步骤 汇编语言的数据定义伪指令、符号定义伪指汇编语言的数据定义伪指令、符号定义伪指 令、段定义伪指令等伪指令令、段定义伪指令等伪指令 顺序、分支、循环基本程序的设计。顺序、分支、循环基本程序的设计。 汇编语言程序与汇编语言程序与C C语言程序的调用方法语言程序的调用方法 中断服务程序、模块化程序设计中断服务程序、模块化程序设计 第第5章章 汇编语言程序设计汇编语言程序设计 本章教学内容:本章教学内容: 5.1 5.1 汇编语言简述汇编语言简述 5.2 5.2 汇编语言的伪指令汇编语

2、言的伪指令 5.3 5.3 汇编语言程序设计基础汇编语言程序设计基础 5.4 5.4 中断服务程序设计中断服务程序设计 5.5 5.5 模块化程序设计模块化程序设计 机器语言机器语言:计算机最终能识别并执行的是以二进制代:计算机最终能识别并执行的是以二进制代 码表示的。码表示的。 汇编语言汇编语言:用意义明确的助记符来表示指令的操作码、:用意义明确的助记符来表示指令的操作码、 操作数,对机器的依赖性很大。主要用于编写计算机操作数,对机器的依赖性很大。主要用于编写计算机 的系统程序、实时控制程序等。的系统程序、实时控制程序等。 汇编语言源程序汇编语言源程序(汇编语言程序):是用汇编语言编(汇编语

3、言程序):是用汇编语言编 写的程序。写的程序。 计算机必须将汇编语言程序翻译成由机器代码组成的计算机必须将汇编语言程序翻译成由机器代码组成的 目标程序才能执行。这个翻译过程称为目标程序才能执行。这个翻译过程称为汇编汇编,完成汇,完成汇 编过程的软件就是编过程的软件就是汇编程序汇编程序。 5.1 汇编语言简述汇编语言简述 面向机器面向机器 5.1.1 5.1.1 汇编语言源程序的格式汇编语言源程序的格式 例,在屏幕上显示例,在屏幕上显示“HELLO”HELLO”并让机器蜂鸣器响一声。并让机器蜂鸣器响一声。 DATA SEGMENT ;DATA SEGMENT ;数据段部分定义数据段部分定义 ms

4、g DB 0DHh,0DH,07H,Hello$msg DB 0DHh,0DH,07H,Hello$ DATA ENDSDATA ENDS SSEG SEGMENT STACK ;SSEG SEGMENT STACK ;堆栈段部分定义堆栈段部分定义 DB 256 DUP(?)DB 256 DUP(?) SSEG ENDSSSEG ENDS CODE SEGMENT CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:SSEGASSUME CS:CODE,DS:DATA,SS:SSEG MAIN PROC FARMAIN PROC FAR PUSH DS PUSH DS

5、 MOV AX,0MOV AX,0 PUSH AXPUSH AX MOV AX,DATA ;MOV AX,DATA ;设置数据段设置数据段 MOV DS,AXMOV DS,AX LEA DX,msg ;LEA DX,msg ;取字符串地址取字符串地址 MOV AH,09H ;MOV AH,09H ;显示字符串,显示字符串, INT 21HINT 21H RET ;RET ;程序结束,返回操作系统程序结束,返回操作系统 MAIN ENDPMAIN ENDP CODE ENDSCODE ENDS END MAIN ;END MAIN ; 源程序结束源程序结束 1 1汇编语言程序的一般组成汇编语言程

6、序的一般组成 (1 1)一个程序由)一个程序由SEGMENTSEGMENT和和ENDSENDS等定义成三类段:等定义成三类段: 数据段:用来定义变量和其他数据;数据段:用来定义变量和其他数据; 堆栈段:为程序堆栈操作提供空间;堆栈段:为程序堆栈操作提供空间; 代码段:存放代码,即程序指令。代码段:存放代码,即程序指令。 一个程序中一定有至少一个代码段;可以没有堆栈段,一个程序中一定有至少一个代码段;可以没有堆栈段, 若没有堆栈段在程序连接时会给出警告信息;也可以若没有堆栈段在程序连接时会给出警告信息;也可以 定义多个段。定义多个段。 (2 2)汇编语言源程序的基本结构是)汇编语言源程序的基本结

7、构是分段结构分段结构形式。形式。 每个逻辑段都有一个名字,叫段名,而且在每个逻辑段都有一个名字,叫段名,而且在SEGMENTSEGMENT 开始和开始和ENDSENDS结束时的名字必须一致。结束时的名字必须一致。 (3 3)每个逻辑段内由若干语句行组成,每个语句)每个逻辑段内由若干语句行组成,每个语句 行可以是指令性语句、指示性语句或者宏指令。行可以是指令性语句、指示性语句或者宏指令。 (4 4)代码段又是由若干个子程序组成。每个子程)代码段又是由若干个子程序组成。每个子程 序以序以PROCPROC语句开始定义,语句开始定义,ENDPENDP语句结束定义。每个语句结束定义。每个 子程序也有自己

8、的名字,叫过程名或子程序名,且子程序也有自己的名字,叫过程名或子程序名,且 在在PROCPROC开始和开始和ENDPENDP结束时的名字必须一致。结束时的名字必须一致。 (5 5)一个程序只有一个起始点。整个源程序以)一个程序只有一个起始点。整个源程序以ENDEND 结束。结束。 2 2汇编语言语句的类型汇编语言语句的类型 汇编语言源程序中的语句可分为五类:汇编语言源程序中的语句可分为五类: (1 1)指令语句,是能产生目标代码,)指令语句,是能产生目标代码,CPUCPU可执行的能可执行的能 完成特定功能的语句,主要由完成特定功能的语句,主要由CPUCPU指令组成。指令组成。 mov ax,d

9、ata ;mov ax,data ;设置数据段设置数据段 (2 2)指示性语句,是一种不产生目标代码的语句,仅)指示性语句,是一种不产生目标代码的语句,仅 仅在汇编过程中告诉汇编程序应如何汇编,也叫伪指仅在汇编过程中告诉汇编程序应如何汇编,也叫伪指 令语句或命令语句。令语句或命令语句。 data segment ;data segment ;数据段定义开始数据段定义开始 (3 3)宏指令语句,是一个指令序列,在汇编时凡有宏)宏指令语句,是一个指令序列,在汇编时凡有宏 指令语句的都将用相应的指令序列的目标代码插入。指令语句的都将用相应的指令序列的目标代码插入。 (4 4)注释语句,以分号)注释语

10、句,以分号“;” ” 。 (5 5)空语句。)空语句。 3.3.汇编语言的语句汇编语言的语句可由四部分组成:可由四部分组成: 名字名字 操作码项操作码项 操作数项操作数项 ;注释;注释 一般来说:一般来说: 名字名字是一个符号,表示本条语句的符号地址,可以为是一个符号,表示本条语句的符号地址,可以为 标号标号(Label)(Label)和变量和变量(Variable)(Variable),统称,统称标识符标识符。 操作码项操作码项可以是机器指令、伪指令和宏指令的助记符。可以是机器指令、伪指令和宏指令的助记符。 操作数项操作数项是操作码的操作对象。操作码在完成相应的是操作码的操作对象。操作码在完

11、成相应的 操作时要求有一系列的操作数。当有两个或两个以上的操作时要求有一系列的操作数。当有两个或两个以上的 操作数时,各操作数之间用逗号隔开。操作数时,各操作数之间用逗号隔开。 注释字段注释字段是以是以“;”开头的说明部分,可以用英文或开头的说明部分,可以用英文或 者中文书写。注释字段是语句的非执行部分者中文书写。注释字段是语句的非执行部分 。 5.1.2 5.1.2 汇编语言的编程环境汇编语言的编程环境 1.汇编语言的编程环境汇编语言的编程环境 硬件环境:具有基本配置的硬件环境:具有基本配置的PC机机 软件环境:指支持汇编程序运行和帮助建立汇软件环境:指支持汇编程序运行和帮助建立汇 编语言源

12、程序的一些软件,主要包括:编语言源程序的一些软件,主要包括: (1)编辑程序)编辑程序(记事本、记事本、EDIT.COM) (2)宏汇编程序)宏汇编程序(MASM.EXE) (3)连接程序)连接程序(LINK.EXE) (4)调试程序)调试程序(DEBUG.COM) 建立建立.ASM.ASM文件文件 产生产生.OBJ.OBJ文件文件 -R-R -D-D 产生产生.EXE.EXE文件文件 2.2.汇编语言程序上机的执行步骤汇编语言程序上机的执行步骤 第一步:用记事本编辑建立第一步:用记事本编辑建立.ASM.ASM汇编语言源程序文件。汇编语言源程序文件。 注意:程序的结构与书写格式。注意:程序的结

13、构与书写格式。 第二步:用第二步:用MASMMASM程序汇编成程序汇编成.OBJ.OBJ文件文件 调用调用DOSDOS系统进入系统进入MASM5.0MASM5.0,输入,输入MASMMASM命令和文件命令和文件 名回车后即可产生名回车后即可产生.OBJ.OBJ目标程序文件。目标程序文件。 输入输入MASMMASM命命 令和文件名令和文件名 汇编时输出汇编时输出.OBJ.OBJ,.LST.LST,.CRF.CRF三个文件并且显示汇三个文件并且显示汇 编源程序的正确或错误结果,若出现编源程序的正确或错误结果,若出现语法错误语法错误,则,则 根据错误提示,用编辑软件根据错误提示,用编辑软件重新调出源

14、程序重新调出源程序进行修进行修 改。改。 MASM5.0MASM5.0 版本介绍版本介绍 .OBJ.OBJ. LST.LST. CRFCRF 第三步:用第三步:用LINKLINK程序把程序把.OBJ.OBJ文件转化成文件转化成.EXE.EXE文件文件 输入输入LINKLINK命令和文件名回车后可输出命令和文件名回车后可输出.EXE.EXE等三个文件。等三个文件。 输入输入LINKLINK命命 令和文件名令和文件名 .EXE.EXE .MAP.MAP .LIB.LIB 没有堆栈段没有堆栈段 LINKLINK程序程序 版本介绍版本介绍 第四步:程序的运行,直接键入文件名。第四步:程序的运行,直接键

15、入文件名。 直接输入文件名直接输入文件名 需要时使用需要时使用DEBUGDEBUG调试并查看寄存器或存储器单元调试并查看寄存器或存储器单元 5.2 5.2 汇编语言的伪指令汇编语言的伪指令 伪指令伪指令:控制汇编过程的命令,又称为汇编控制命令。:控制汇编过程的命令,又称为汇编控制命令。 具有数据定义、存储区分配、指示程序的开始与结束具有数据定义、存储区分配、指示程序的开始与结束 等功能,但是没有对应的机器码。将汇编语言源程序等功能,但是没有对应的机器码。将汇编语言源程序 翻译为目标程序后,其作用消失。翻译为目标程序后,其作用消失。 80868086汇编语言中用到的伪指令有:汇编语言中用到的伪指

16、令有: 数据定义伪指令、符号定义伪指令、段定义伪指令、数据定义伪指令、符号定义伪指令、段定义伪指令、 过程定义伪指令、宏处理伪指令、模块定义与连接伪过程定义伪指令、宏处理伪指令、模块定义与连接伪 指令、处理器方式伪指令、条件伪指令、列表伪指令指令、处理器方式伪指令、条件伪指令、列表伪指令 和其它伪指令等类别。和其它伪指令等类别。 5.2.1 5.2.1 符号定义伪指令符号定义伪指令 包括变量名、标号名、过程名、寄存器名以及指令助包括变量名、标号名、过程名、寄存器名以及指令助 记符。常用的有记符。常用的有EQUEQU(等值命令)、(等值命令)、= =(赋值命令)和(赋值命令)和 PURGEPUR

17、GE(解除定义命令)。(解除定义命令)。 1 1基本概念基本概念 (1 1)标识符:用来对程序中的常量、变量、记录、)标识符:用来对程序中的常量、变量、记录、 结构、段、过程、模块等进行命名结构、段、过程、模块等进行命名。 (2 2)保留字:)保留字:80X8680X86中的寄存器名、指令助记符、伪中的寄存器名、指令助记符、伪 操作命令、表达式运算符、属性操作符等都是系统专操作命令、表达式运算符、属性操作符等都是系统专 用的保留字。用的保留字。 (3 3)符号:用符号等代替存储单元、端口地址、数)符号:用符号等代替存储单元、端口地址、数 据表达式等。常用的有:寄存器、变量、标号、数等。据表达式

18、等。常用的有:寄存器、变量、标号、数等。 (4 4)常量:是固定值(即程序运行期间不变化)就)常量:是固定值(即程序运行期间不变化)就 称为常量。包括称为常量。包括数字常量和字符常量数字常量和字符常量。在汇编语言中。在汇编语言中 值相对固定不变化的数据一般以符号的形式出现,也值相对固定不变化的数据一般以符号的形式出现,也 叫符号常数。叫符号常数。字符常量字符常量必须用单引号括起来。必须用单引号括起来。 (5 5)变量:存放在存储单元中的操作数就是变量,)变量:存放在存储单元中的操作数就是变量, 因为其值是可改变的。但程序中出现的一般是存储单因为其值是可改变的。但程序中出现的一般是存储单 元地址

19、的符号,或者说是符号地址。具体在后面再讲。元地址的符号,或者说是符号地址。具体在后面再讲。 (6 6)标号:是某条指令所存放单元的符号地址,是)标号:是某条指令所存放单元的符号地址,是 转移控制类指令的目标操作数。转移控制类指令的目标操作数。 (7 7)过程名:是某个子程序中首条指令所存放单元)过程名:是某个子程序中首条指令所存放单元 的符号地址,是调用子程序指令的目标操作数。的符号地址,是调用子程序指令的目标操作数。 2 2EQUEQU(等值命令)(等值命令) 格式:格式: NAME EQU EXP ;NAME EQU EXP ;用符号名用符号名NAMENAME替代替代EXPEXP 3 3=

20、 =(赋值语句)(赋值语句) 同一源程序中同一符号名不能同时用同一源程序中同一符号名不能同时用EQUEQU和和= =来定义。来定义。 格式:格式: NAME=EXPNAME=EXP 4 4PURGRPURGR(解除定义语句)(解除定义语句) 解除语句,可以解除原来用解除语句,可以解除原来用EQUEQU语句定义的符号语句定义的符号 格式:格式: PURGE PURGE 符号符号11,符号,符号NN 表达式常出现在语句格式的操作数域。表达式常出现在语句格式的操作数域。 (1 1)算术运算符)算术运算符 + +、- -、* *、/ /和和MODMOD(求余,两数必须为正整数)。(求余,两数必须为正整

21、数)。 (2 2)逻辑运算符)逻辑运算符 ANDAND、OROR、NOTNOT、XORXOR等。逻辑运算符是等。逻辑运算符是按位按位操作的,操作的, 只能用于数值表达式中,不能用于存储器地址操作数只能用于数值表达式中,不能用于存储器地址操作数 的表达式中。的表达式中。 (3 3)关系运算符)关系运算符 EQEQ、NENE、LTLT、GTGT、LELE和和GEGE等六项。计算结果应该是逻等六项。计算结果应该是逻 辑值:结果为真,表示辑值:结果为真,表示FFFFHFFFFH(-1-1); ;结果为假,表示结果为假,表示 0000H0000H(0 0)。 (4 4)分析运算符)分析运算符(数值返回运

22、算符)(数值返回运算符) 把特征或存储器操作数地址分解为它的组成部分,如把特征或存储器操作数地址分解为它的组成部分,如 偏移量、段基址和类型等。偏移量、段基址和类型等。 有有TYPETYPE、LENGTHLENGTH、SIZESIZE、OFFSETOFFSET和和SEGSEG等五项。等五项。 格式:格式: SEG VARSEG VAR或者或者LABLAB 返回指定变量或者标号的偏移地址值。返回指定变量或者标号的偏移地址值。 格式:格式: OFFSET VAROFFSET VAR或者或者LABLAB 注意:该运算符实际与注意:该运算符实际与LEALEA指令等效。指令等效。 TYPETYPE类型返

23、回运算符类型返回运算符 返回的运算结果是一个数值与存储器操作数类型或者返回的运算结果是一个数值与存储器操作数类型或者 标号类型有固定的对应关系,如表标号类型有固定的对应关系,如表5-15-1所示。所示。 【例例5-145-14】 V1 DB 1V1 DB 1,2 2,3 3 V2 DW 1020HV2 DW 1020H,3040H3040H V3 DD 12345678HV3 DD 12345678H PF LABEL FARPF LABEL FAR PNPN:MOV AHMOV AH,TYPE V1 ;AH=1TYPE V1 ;AH=1 MOV ALMOV AL,TYPE V2 ;AL=2T

24、YPE V2 ;AL=2 MOV DLMOV DL,TYPE V3 ;DL=4TYPE V3 ;DL=4 MOV DHMOV DH,TYPE PF ;DH=-2TYPE PF ;DH=-2 【例例5-155-15】 FEES DW 100 DUPFEES DW 100 DUP(0 0) MOV CXMOV CX,LENGTH FEESLENGTH FEES 则则CXCX值为值为100100 (5 5)合成运算符(修改属性运算符)合成运算符(修改属性运算符) 用来建立或临时改变变量或标号的类型或者存储器操用来建立或临时改变变量或标号的类型或者存储器操 作数的存储单元类型。作数的存储单元类型。 有

25、有PTRPTR、THISTHIS、SHORTSHORT、段超越操作符等几项。、段超越操作符等几项。 基本格式:基本格式: 段寄存器名:符号地址段寄存器名:符号地址 格式:格式: type PTR EXP ;TYPEtype PTR EXP ;TYPE是要建立或改变的标号或者是要建立或改变的标号或者 存储的新的类型。存储的新的类型。 (6 6)其他操作符)其他操作符 当前偏移地址运算符。返回该操作符所在标号或者存当前偏移地址运算符。返回该操作符所在标号或者存 储单元的有效地址。储单元的有效地址。 格式:格式: 【例例5-205-20】 10001000:3124H MOV BX 3124H MO

26、V BX , 则(则(BXBX)=3124H=3124H LOWLOW和和HIGHHIGH。字节分离运算符。分别得到一个数。字节分离运算符。分别得到一个数 值(值(1616位)或地址表达式(位)或地址表达式(1616位)的低位和高位字节。位)的低位和高位字节。 格式:格式: LOW/HIGH VARLOW/HIGH VAR LOW/HIGH EXPLOW/HIGH EXP 各类运算符的优先级别为:各类运算符的优先级别为: 1 1、() LENGTH SIZE WIDTH MASK() LENGTH SIZE WIDTH MASK 2 2、: : 3 3、PTR OFFSET SEG TPYE

27、THISPTR OFFSET SEG TPYE THIS及段操作符及段操作符 4 4、HIGE LOWHIGE LOW 5 5、* * / MOD SHL SHR/ MOD SHL SHR 6 6、+ -+ - 7 7、EQ NE GT LT GE LEEQ NE GT LT GE LE 8 8、NOTNOT 9 9、AND AND 1010、OR XOR OR XOR 1111、SHORTSHORT 5.2.3 5.2.3 段定义伪指令段定义伪指令 1 1基本概念基本概念 在汇编语言源程序中定义逻辑段,常用的有:在汇编语言源程序中定义逻辑段,常用的有: SEGMENT SEGMENT 、EN

28、DS ENDS 、ASSUME ASSUME 、ORG ORG 。 2 2SEGMENT/ENDSSEGMENT/ENDS命令命令 格式:格式: 段名段名 SEGMENT SEGMENT 定位定位组合组合段字段字类别类别 ; ;其它语句其它语句 段名段名 ENDS ENDS 5.2.4 5.2.4 过程定义伪指令过程定义伪指令 过程定义的一般格式如下:过程定义的一般格式如下: 过程名过程名 PROC NEAR/FAR PROC NEAR/FAR ; ; RET ;RET ;至少有一条返回主程序的指令;至少有一条返回主程序的指令; 过程名过程名 ENDP ENDP 5.3 5.3 汇编语言程序设

29、计基础汇编语言程序设计基础 5.3.1 5.3.1 程序设计的一般步骤程序设计的一般步骤 1 1基本步骤基本步骤 1) 1) 分析问题,抽象出描述问题的数学模型分析问题,抽象出描述问题的数学模型 2) 2) 确定解决问题的算法或解题思想确定解决问题的算法或解题思想 3) 3) 绘制流程图和结构图绘制流程图和结构图 4) 4) 分配存储空间和工作单元分配存储空间和工作单元 5) 5) 编制程序编制程序 6) 6) 程序静态检查程序静态检查 7) 7) 上机调试上机调试 2 2流程图流程图 3 3基本控制结构基本控制结构 程序结构可分为三个基本结构:即顺序结构、分支结程序结构可分为三个基本结构:即

30、顺序结构、分支结 构和循环结构。构和循环结构。 (1 1)顺序结构:指按语句出现的先后次序执行,没)顺序结构:指按语句出现的先后次序执行,没 有判断和转移、重复等,顺序结构也叫简单结构。有判断和转移、重复等,顺序结构也叫简单结构。 (2 2)分支结构:指根据不同情况作出判断和选择,)分支结构:指根据不同情况作出判断和选择, 以便执行不同的程序段。以便执行不同的程序段。 (3 3)循环结构:是指重复做某些操作,直到出现某)循环结构:是指重复做某些操作,直到出现某 个条件为止。可以看出这实际上是顺序结构和分支结个条件为止。可以看出这实际上是顺序结构和分支结 构的组合。构的组合。 (4 4)过程:实

31、际上它是三种基本结构的组合。在汇)过程:实际上它是三种基本结构的组合。在汇 编语言里经常把它当做第四种基本控制结构来看待。编语言里经常把它当做第四种基本控制结构来看待。 (5 5)程序设计时,应采用)程序设计时,应采用“自顶向下,逐步求精自顶向下,逐步求精” ” 。 4 4程序的结束方法程序的结束方法 常用的在常用的在DOSDOS下返回的方法主要有以下三种:下返回的方法主要有以下三种: (1 1)利用)利用INT 20HINT 20H结束程序结束程序 (2 2)利用标准序结束程序)利用标准序结束程序 (3 3)用)用DOSDOS功能调用结束程序功能调用结束程序 5.3.2 5.3.2 程序设计

32、的基本方法程序设计的基本方法 1 1顺序结构设计顺序结构设计 【例【例5-275-27】试编制一程序,求出】试编制一程序,求出 下列公式中下列公式中Z Z值,并存放在值,并存放在 RESULTRESULT单元中。单元中。 RESULTRESULT(X+YX+Y)8-X 8-X 2 2 参考代码:参考代码: DATA SEGMENTDATA SEGMENT X DW 6X DW 6 Y DW 7 ;Y DW 7 ;数据段数据段 RESULT DW RESULT DW ? DATA ENDSDATA ENDS STACK1 SEGMENT PARA STACKSTACK1 SEGMENT PARA

33、 STACK DW 20H DUP(0) ;DW 20H DUP(0) ;堆栈段堆栈段 STACK1 ENDSSTACK1 ENDS COSEG SEGMENTCOSEG SEGMENT PROC1 PROC FARPROC1 PROC FAR ASSUME CS:COSEG,SS:STACK1ASSUME CS:COSEG,SS:STACK1 ASSUME DS:DATAASSUME DS:DATA START: PUSH DSSTART: PUSH DS MOV AX,0MOV AX,0 PUSH AX PUSH AX MOV AX,DATA MOV AX,DATA MOV DS,AXMO

34、V DS,AX MOV DX,X MOV DX,X ADD DX,Y ADD DX,Y MOV CL,3MOV CL,3 SAL DX,CL SAL DX,CL SUB DX,X SUB DX,X SAR DX,1 SAR DX,1 MOV RESULT,DX MOV RESULT,DX RETRET PROC1 ENDPPROC1 ENDP COSEG ENDSCOSEG ENDS END STARTEND START 2 2分支结构设计分支结构设计 分支结构主要是通过条件转移指令来实现的。分支结构主要是通过条件转移指令来实现的。 可分为三种:单分支结构、双分支结构和多分支结构。可分为三种:

35、单分支结构、双分支结构和多分支结构。 (1 1)单分支结构)单分支结构 分支一般由产生条件、测试、定向和标号四部分组成。分支一般由产生条件、测试、定向和标号四部分组成。 【例例5-285-28】设内存中有设内存中有 三个互不相等的无符号三个互不相等的无符号 字数据,分别存放在字数据,分别存放在 VAR1VAR1开始的字单元,试开始的字单元,试 求其中最大值并存入求其中最大值并存入 MAXMAX单元。单元。 解题思路:求三个无符解题思路:求三个无符 号数中的最大值,只要号数中的最大值,只要 将三个数两两比较,用将三个数两两比较,用 无符号数的比较转移指无符号数的比较转移指 令令 JA/JB/JA

36、E/JBE/JE/JCJA/JB/JAE/JBE/JE/JC 等指令就可判断两数的等指令就可判断两数的 大小,从而选出其中的大小,从而选出其中的 最大值。最大值。 DATA SEGMENT DATA SEGMENT VAR1 DW 1238H,1047H,19E1HVAR1 DW 1238H,1047H,19E1H MAX DW MAX DW ? DATA ENDSDATA ENDS SSEG SEGMENT PARA STACKSSEG SEGMENT PARA STACK DB 100 DUP(0) DB 100 DUP(0) SSEG ENDSSSEG ENDS CODE SEGMENT

37、CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:SSEG ASSUME CS:CODE,DS:DATA,SS:SSEG STARTSTART: MOV AX,DATAMOV AX,DATA MOV DS,AX MOV DS,AX LEA SI,VAR1 ; LEA SI,VAR1 ;设置指针,设置指针, MOV AX,SI ; MOV AX,SI ;取第一个元素取第一个元素 MOV BX,SI+2;MOV BX,SI+2;取第二个元素取第二个元素 CMP AX,BX ;CMP AX,BX ;比较比较 JAE BIGE1 ;JAE BIGE1 ;大于等于时转大于等于

38、时转 MOV AX,BX ;MOV AX,BX ;小于时小于时 BIGE1BIGE1: CMP AX,SI+4 ;CMP AX,SI+4 ;和第三个元素比较和第三个元素比较 JAE BIGE2 ;JAE BIGE2 ;大于等于时转大于等于时转 MOV AX,SI+4 ;MOV AX,SI+4 ;取第三个元素取第三个元素 BIGE2BIGE2: MOV MAX,AX ;MOV MAX,AX ;将找的最大值送将找的最大值送MAXMAX MOV AH,4CH ; MOV AH,4CH ;准备结束程序准备结束程序 INT 21HINT 21H CODE ENDS CODE ENDS END START

39、 END START (2)2)双分支结构双分支结构 (3)3)多分支程序设计多分支程序设计 多分支结构的设计有三种主要形式:转移表法、地址多分支结构的设计有三种主要形式:转移表法、地址 表法和逻辑分解法。而且实现分支转移还得使用条件表法和逻辑分解法。而且实现分支转移还得使用条件 转移指令。转移指令。 转移表法转移表法 地址表法地址表法 逻辑分解法。逻辑分解法。 (3 3)循环程序的设计步骤:)循环程序的设计步骤: 1 1)分析问题,确定循环结构:选用当型还是直到型;)分析问题,确定循环结构:选用当型还是直到型; 2 2)根据循环变化的规律,确定循环体部分;)根据循环变化的规律,确定循环体部分

40、; 3 3)考虑循环参数的修改,确定参数修改方法;)考虑循环参数的修改,确定参数修改方法; 4 4)设置循环控制部分,注意循环结束条件的完备;)设置循环控制部分,注意循环结束条件的完备; 5 5)设置循环参数和控制条件的初值设定部分;)设置循环参数和控制条件的初值设定部分; 6 6)最后编码实现。)最后编码实现。 (4 4)循环程序的控制方法)循环程序的控制方法 计数控制法计数控制法,CXCX计数器加计数器加1 1,常用指令是,常用指令是LOOPLOOP。 条件控制法。条件控制法。 开关控制法。一般只有两个不同动作需要交替执行,开关控制法。一般只有两个不同动作需要交替执行, 可以用一个二进制编

41、码串来表示其执行序列,这个二可以用一个二进制编码串来表示其执行序列,这个二 进制编码串就是逻辑尺,也叫进制编码串就是逻辑尺,也叫逻辑比例尺逻辑比例尺。 【例例5-325-32】求求1 1至至100100数字之和,结果保存到数字之和,结果保存到SUMSUM中。中。 5.3.3 5.3.3 子程序设计与调用技术子程序设计与调用技术 一个完整的子程序结构,应该包括以下几方面的内容:一个完整的子程序结构,应该包括以下几方面的内容: 1 1子程序的说明部分子程序的说明部分,一般有:一般有: 子程序名(被调用名)子程序名(被调用名);作者(包括后来参与的作作者(包括后来参与的作 者)者);版本(一般含历次

42、修正的内容、原因等)版本(一般含历次修正的内容、原因等);开开 发日期(一般含历次修正日期)发日期(一般含历次修正日期);功能说明(说明子功能说明(说明子 程序具体完成的任务)程序具体完成的任务);占用的资源说明,包括软、占用的资源说明,包括软、 硬各方面硬各方面;输入参数,包括名称、类型、存放位置、输入参数,包括名称、类型、存放位置、 作用等;输出参数,包括名称、类型、存放位置、作作用等;输出参数,包括名称、类型、存放位置、作 用等用等;子程序的使用格式;子程序的使用格式;子程序的使用范例。子程序的使用范例。 2 2子程序的现场保护和恢复子程序的现场保护和恢复 现场保护和恢复常用的方法有:现

43、场保护和恢复常用的方法有: (1 1)利用堆栈进行保护。可以用进栈指令将要保护)利用堆栈进行保护。可以用进栈指令将要保护 的信息压栈,用出栈指令将要恢复的信息出栈,这是的信息压栈,用出栈指令将要恢复的信息出栈,这是 最常用的方法。最常用的方法。 (2 2)利用特定的内存区域。可以在内存中专门划出)利用特定的内存区域。可以在内存中专门划出 一片区域用于现场信息的保护和恢复。此时主要用数一片区域用于现场信息的保护和恢复。此时主要用数 据传送指令即可完成任务。据传送指令即可完成任务。 (3 3)在信息很少时,也可用暂时闲置不用的寄存器。)在信息很少时,也可用暂时闲置不用的寄存器。 3 3子程序的参数

44、传递子程序的参数传递 传递过程主要有以下传递过程主要有以下四种四种方法:方法: (1 1)使用堆栈。)使用堆栈。 (2 2)使用指定的存储区域。)使用指定的存储区域。 (3 3)使用寄存器。在数据量较少时常采用这种方式。)使用寄存器。在数据量较少时常采用这种方式。 (4 4)使用端口。)使用端口。 【例例5-355-35】写出满足以下过程的代码部分:写出满足以下过程的代码部分: 使用寄存器传递参数,将使用寄存器传递参数,将ASCIIASCII码转换为码转换为1616进制数进制数 入口条件:(入口条件:(ALAL)存放)存放ASCIIASCII码码; ; 出口条件:(出口条件:(ALAL)161

45、6进制数;进制数; 由题意:由题意: 数码数码0 09 9对应的对应的ASCIIASCII码是码是30H30H39H39H, 字符字符A AF F对应的对应的ASCIIASCII码是码是41H41H46H46H, 其转换过程,如果是从其转换过程,如果是从30H30H转换为转换为0 0,则应该是对应,则应该是对应 ASCIIASCII码减去码减去30H30H即可。而从字符即可。而从字符AA转换为转换为1616进制进制 数码数码A A,则应该是对应,则应该是对应ASCIIASCII码减去码减去37H37H才可。才可。 ASCTOHEX PROC ;ASCTOHEX PROC ;过程体定义开始过程体

46、定义开始 PUSHF ;PUSHF ;通过堆栈保护现场信息通过堆栈保护现场信息 SUB AL,30H ;SUB AL,30H ;做第一步转换做第一步转换 CMP AL,10 ;CMP AL,10 ;如果是数码如果是数码0 0到到9 9,则结果是小于,则结果是小于1010的的 JL EXIT1JL EXIT1 SUB AL,7 ;SUB AL,7 ;否则就是数码否则就是数码A A到到F F,应该再减去,应该再减去7 7 EXIT1: POPF ;EXIT1: POPF ;恢复现场恢复现场 RET ; RET ;子程序执行结束,返回主程序子程序执行结束,返回主程序 ASCTOHEX ENDP ;A

47、SCTOHEX ENDP ;过程定义结束。过程定义结束。 【例例5-365-36】设设ARRAYARRAY是是1010个元素的单字节无符号数组。个元素的单字节无符号数组。 试用子程序计算数组元素的校验和(即不计进位的累试用子程序计算数组元素的校验和(即不计进位的累 加),并将结果存入变量加),并将结果存入变量RESULTRESULT中。中。 设用变量来传递参数,即主程序和被调用子程序通过设用变量来传递参数,即主程序和被调用子程序通过 同一变量名的访问来传递参数。同一变量名的访问来传递参数。 则:则:STACK SEGMENT STACKSTACK SEGMENT STACK DW 50 DUP

48、(0) DW 50 DUP(0) STACK ENDSSTACK ENDS DATA SEGMENTDATA SEGMENT ARRAY DB 34H,9AH,0F1H,87H,06HARRAY DB 34H,9AH,0F1H,87H,06H DB 1FH,0CDH,5EH,0A1H,49H DB 1FH,0CDH,5EH,0A1H,49H COUNT EQU $-ARRAYCOUNT EQU $-ARRAY RESULT DB RESULT DB ? DATA ENDSDATA ENDS CODE SEGMENTCODE SEGMENT ASSUME CS:CODE,DS:DATA ASSU

49、ME CS:CODE,DS:DATA ASSUME SS:STACKASSUME SS:STACK MAIN PROC FAR MAIN PROC FAR STARTSTART: PUSH DSPUSH DS XOR AX,AX XOR AX,AX PUSH AXPUSH AX MOV AX,DATAMOV AX,DATA MOV DS,AX MOV DS,AX CALL CHECKSUB CALL CHECKSUB RET ;RET ;结束主程序,返回操作系统结束主程序,返回操作系统 MAIN ENDPMAIN ENDP CHECKSUB PROC NEAR ;CHECKSUB PROC N

50、EAR ;段内调用的子程序段内调用的子程序 PUSH AX ;PUSH AX ;保存现场保存现场 PUSH BXPUSH BX PUSH CX PUSH CX XOR AL,AL XOR AL,AL MOV BX,OFFSET ARRAY ;MOV BX,OFFSET ARRAY ; 即第即第0 0号元素号元素34H34H的位置的位置 MOV CX,COUNT ;CXMOV CX,COUNT ;CX取数组的元素个数取数组的元素个数 AGAINAGAIN: ADD AL,BX ;ADD AL,BX ;求和求和 INC BX ;INC BX ;指针偏移,指向下一个元素指针偏移,指向下一个元素 LO

51、OP AGAIN ;LOOP AGAIN ;计数递减,不为计数递减,不为0 0时循环时循环 MOV RESULT,AL ;MOV RESULT,AL ;传递校验和传递校验和 POP CX ;POP CX ;恢复现场恢复现场 POP BXPOP BX POP AX POP AX RET ; RET ; 返回主程序返回主程序 CHECKSUB ENDP CHECKSUB ENDP CODE ENDSCODE ENDS END START END START 4 4子程序的调用与返回子程序的调用与返回 5.3.4 DOS5.3.4 DOS功能子程序的调用功能子程序的调用 1 1概述概述 基本输入输出

52、系统基本输入输出系统BIOSBIOS和和DOSDOS层功能模块:层功能模块: 设置了两设置了两 层内部子程序供用户使用。层内部子程序供用户使用。 BIOSBIOS在系统主板上的在系统主板上的ROMROM区,又称区,又称ROM-BIOSROM-BIOS。即系统。即系统 加电自检、引导装入及对键盘、磁盘、磁带、显示器、加电自检、引导装入及对键盘、磁盘、磁带、显示器、 打印机、异步串行通信口等控制。用户可用打印机、异步串行通信口等控制。用户可用INT INT 10H10HINT 1AHINT 1AH 某些设备的操作,既能使用某些设备的操作,既能使用DOSDOS又能使用又能使用BIOSBIOS中断,中

53、断, 一般情况下尽可能使用一般情况下尽可能使用DOSDOS中断,必要时再使用中断,必要时再使用BIOSBIOS 中断,中断,BIOSBIOS更接近硬件。更接近硬件。 2 2系统功能调用方法系统功能调用方法 一般需要经过以下三个步骤:一般需要经过以下三个步骤: 1 1)子程序的入口参数送相应的寄存器。)子程序的入口参数送相应的寄存器。 2 2)子程序的标号送)子程序的标号送AHAH寄存器。寄存器。 3 3)发出中断请求,即执行软中断指令:)发出中断请求,即执行软中断指令: INT 21HINT 21H。 如果是如果是BIOSBIOS中断,应该换成其中断类型号。中断,应该换成其中断类型号。 4 4

54、)程序执行完毕后,如果有出口参数,则按规定取)程序执行完毕后,如果有出口参数,则按规定取 得出口参数。得出口参数。 【例例5-385-38】在屏幕上显示信息在屏幕上显示信息WELCOME TO BEIJINGWELCOME TO BEIJING! CODE SEGMENTCODE SEGMENT ASSUME CS:CODE,DS:CODE ASSUME CS:CODE,DS:CODE ORG 100H ORG 100H START START: JMP BEGINJMP BEGIN MSG DB WELCOME TO BEIJING MSG DB WELCOME TO BEIJING! BE

55、GINBEGIN: MOV AX,CODE ;MOV AX,CODE ;设置设置DSDS MOV DS,AX MOV DS,AX LEA DX,MSG ;LEA DX,MSG ;取字符串首地址取字符串首地址 MOV AH,09H ;MOV AH,09H ;显示字符串功能调用编号显示字符串功能调用编号 INT 21H ;DOSINT 21H ;DOS功能调用功能调用 INT 20H ;INT 20H ;结束程序结束程序 CODE ENDSCODE ENDS END START END START 3 3系统功能调用分组概况系统功能调用分组概况 (1 1)传统的字符)传统的字符I/OI/O管理。管

56、理。 (2 2)传统的文件管理。)传统的文件管理。 (3 3)扩充的文件管理。)扩充的文件管理。 (4 4)内存管理。)内存管理。 (5 5)作业管理。)作业管理。 (6 6)其他资源管理。)其他资源管理。 另外,还有一些另外,还有一些DOSDOS中断,可供程序员使用:中断功中断,可供程序员使用:中断功 能号:能号:20H20H,22H22H,23H23H,24H24H,25H25H,26H26H,27H27H。 4 4部分常用的基本部分常用的基本I/OI/O功能调用举例功能调用举例 (1 1)1 1 号系统功能调用:键盘输入并回显号系统功能调用:键盘输入并回显 有键按下时,先检查是否是有键按

57、下时,先检查是否是 Ctrl+Break Ctrl+Break键,若是则键,若是则 退出;否则将字符的键值(退出;否则将字符的键值(ASCIIASCII码)送入寄存器码)送入寄存器ALAL 中,并在屏幕上显示该字符。中,并在屏幕上显示该字符。 此调用没有入口参数。此调用没有入口参数。 MOV AH,1 ;lMOV AH,1 ;l为功能号为功能号 INT 21HINT 21H (2 2)2 2 号系统功能调用:显示输出号系统功能调用:显示输出 此调用的功能是向输出设备输出一个字符码。此调用的功能是向输出设备输出一个字符码。 此调用的入口参数是输出字符的此调用的入口参数是输出字符的ASCllASC

58、ll码,入口参数码,入口参数 需送入寄存器需送入寄存器DLDL。没有出口参数。没有出口参数。 MOV DL , A ; AMOV DL , A ; A为要求输出字符的为要求输出字符的ASCIIASCII码码 MOV AH, 2 ; 2MOV AH, 2 ; 2为功能号为功能号 INT 21H INT 21H 调用结果是将调用结果是将DLDL寄存器中字符寄存器中字符AA通过屏幕显示或通过屏幕显示或 打印机输出。打印机输出。 5.4 5.4 中断服务程序设计中断服务程序设计 1 1概述概述 当中断发生当中断发生CPUCPU的操作体现为以下的操作体现为以下5 5个步骤:个步骤: 1 1)取中断类型号

59、。)取中断类型号。 2 2)计算中断向量地址。)计算中断向量地址。 3 3)取中断向量,按低前高后原则,先取的偏移地址)取中断向量,按低前高后原则,先取的偏移地址 送送IPIP,后取的段基址送,后取的段基址送CSCS 4 4)转入中断处理程序。)转入中断处理程序。 5 5)中断返回到中断时断点位置,软中断时是)中断返回到中断时断点位置,软中断时是INTINT指令指令 的下一条指令。的下一条指令。 概括来讲,中断程序的设计包括以下两个方面:概括来讲,中断程序的设计包括以下两个方面: (1 1)主程序部分。)主程序部分。 包括:设置好堆栈,设置中断向量;如是外部中断,包括:设置好堆栈,设置中断向量

60、;如是外部中断, 设置外设的工作方式,开放中断响应设置外设的工作方式,开放中断响应;初始化中断控;初始化中断控 制器(制器(8259A8259A);); 在执行上述操作前,必须是关中断。当初始化过程结在执行上述操作前,必须是关中断。当初始化过程结 束后,必须开中断,才可以接受中断请求并予以响应。束后,必须开中断,才可以接受中断请求并予以响应。 (2 2)中断服务程序设计部分。)中断服务程序设计部分。 包括:保护现场包括:保护现场,用户中断处理程序,若在执行期间,用户中断处理程序,若在执行期间 允许中断嵌套,则应该事先开中断,并在中断服务程允许中断嵌套,则应该事先开中断,并在中断服务程 序执行完

温馨提示

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

评论

0/150

提交评论