第6章汇编语言程序设计.ppt





《第6章汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《第6章汇编语言程序设计.ppt(107页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第6章汇编语言程序设计 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望6.1.2 COM 文件的编程格式COM文件的编程格式必须必须符合以下规定:(1)源程序只允许使用一个逻辑段,即代码段,不允许设置堆栈段;(2)程序使用的数据,可以集中设置在代码段的开始或末尾;(3)在代码段偏移地址(有效地址)为100H的单元,必须是程序的启动指令;(4)代码段目标小于64KB。6.1.3EXE文件和COM文件的内存映像 EXE文件包括两部分:一部分为装入模块,另一部分为“重定
2、位信息”。调入后生成PSP(程序段前缀)DOS自动给DS,ES,FS和GS赋值,使DS=ES=存放PSP的段基址,FS=GS=0,并使CS:IP用户程序的启动地址,SS:SP指向用户堆栈段的栈顶,在这以后,DOS才把控制权交给用户程序。COM文件没有重定位信息,因此比EXE文件的体积小的多。DOS装载COM文件时,也生成PSP,然后从偏移地址100H开 始 依 次 存 放 用 户 程 序。DOS自 动 赋 值 使CS=DS=ES=SS=PSP段基址,FS=GS=0,并使IP=100H,SP=FFFEH。6.1.4 程序段前缀6.1.5返回DOS的其他方法对于COM文件有三种方法:(1)直接执行
3、INT20H;(2)调用INT21H的0号功能。(3)执行RET指令对于EXE文件:(1)调用INT 21H的4CH功能(2)执行INT 20H,首先把执行过程包含在一个远过程中;其次在给DS赋值前,用3条指令把PSP首单元的物理地址压入栈顶,即:PUSH DS MOV AX,0 PUSH AX,最后程序在需要返回DOS的地方执行一条RET指令。6.1.6 源程序堆栈段的设置对8086系列机来说,MS-DOS操作系统是最主要的操作系统。MS-DOS操作系统除了具有较为完整的文件管理功能之外,同时还为各种应用程序、外围设备等提供软件接口。它由三部分组成:IO.SYS、MSDOS.SYS以及COM
4、MAND.COM。DOS系统功能调用的方法一般可分为以下几步:设置所要调用功能的入口参数。在AH寄存器中存入所要调用功能的功能号。INT 21H指令自动转入中断子程序入口。相应中断子程序运行完毕,可按规定取得出口参数。返回本节返回本节6.2 DOS系统功能调用6.2 常用的DOS系统功能调用1单字符输入(1号调用)2单字符显示(2号调用)3打印输出(5号调用)4结束调用(4CH号调用)5显示字符串(9号调用)6字符串输入(10号调用)1单字符输入(1号调用)格式:MOVAH,1INT21H功能:从键盘输入字符的ASCII码送入寄存器AL中,并送显示器显示。2单字符显示(2号调用)格式:MOV
5、DL,待显示字符的ASCII码MOV AH,2INT 21H功能:将DL寄存器中的字符送显示器显示,如果DL中为CTRL+BREAK的ASCII码,则退出。3打印输出(5号调用)格式:MOVDL,待打印字符的ASCII码MOVAH,5INT21H功能:将DL寄存器中的字符送打印机打印。4结束调用(4CH号调用)格式:MOVAH,4CH INT21H功能:终止当前程序并返回调用程序。5显示字符串(9号调用)格式:LEADX,待显示字符串首偏移地址MOVAH,9INT21H功能:将当前数据区中以结尾的字符串送显示器显示。6字符串输入(10号调用)格式:LEADX,缓冲区首偏移地址MOVAH,10I
6、NT 21H功能:从键盘上输入一字符串到用户定义的输入缓冲区中,并送显示器显示。DATASEGMENTSTRDB 0DH,0AH,Example of string display!DATAENDSSTACKSEGMENT STACKDB 100 DUP(0)STACKENDSCODESEGMENTASSUMEDS:DATA,CS:CODE,SS:STACK【例【例3.25】若要在屏幕上显示字符串】若要在屏幕上显示字符串“Example of string display!”,则程序如下:则程序如下:BEGIN:MOV AX,DATAMOV DS,AXLEA DX,STRMOV AH,9INT
7、21HMOV AH,4CH INT21HCODEENDSEND BEGIN返回本节返回本节 综合举例【例3.27】已知一数据段中的数据为:DATASEGMENTADW MBUFDB AB,0DH,0AHCEQU 500HBDW 0FFAAHDDD BUFMDB 2DUP(1),2DUP(2,B)DATAENDS请画出该数据段数据存储的形式。返回本章首页返回本章首页该数据段在主存中的存储形式如左图所示。DATASEGMENTNUMDB 01000101BBUFDB 0DH,0AH,(NUM)=STRDB 4 DUP(?)DATAENDSSTACKSEGMENT STACKDB200 DUP(0)
8、STACKENDSCODESEGMENTASSUME DS:DATA,SS:STACK,CS:CODE【例【例3.28】阅读下列程序,指出此程序所完成的功能以】阅读下列程序,指出此程序所完成的功能以及在显示器上显示的内容。及在显示器上显示的内容。START:MOV AX,DATA MOV DS,AX LEA DI,STRMOV AL,NUM MOV CL,4SHR AL,CLORAL,30HMOV DI,ALINCDIMOV AL,NUM AND AL,0FHORAL,30HMOV DI,ALINCDIMOV BYTEPTR DI,HINCDIMOV BYTEPTR DI,LEA DX,BUF
9、 MOV AH,9INT21HMOV AH,4CHINT21HCODEENDSEND STARTDATASEGMENTINFO1DB0DH,0AH,INPUT STRING:INFO2DB0DH,0AH,OUTPUT STRING:BUFADB81DB?【例【例3.29】从键盘上输入一串字符到输入缓冲区,然后】从键盘上输入一串字符到输入缓冲区,然后将输入的字符串在显示器上以相反的顺序显示。将输入的字符串在显示器上以相反的顺序显示。DB 80 DUP(0)BUFBDB81 DUP(0)DATAENDSSTACKSEGMENTDB200 DUP(0)STACKENDSCODESEGMENTASSU
10、MEDS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATAMOV DS,AXLEA DX,INFO1MOV AH,9;9号调用,显示输入提示信息INT21HLEADX,BUFAMOV AH,10;10号 调 用,键 盘 输 入 字 符 串 到 缓 冲区BUFAINT21HLEASI,BUFA+1 MOV CH,0;取字符长度CX MOV CL,SIADDSI,CX;SI 指向字符串尾部LEADI,BUFB;DI指向字符串变量BUFBNEXT:MOV AL,SIMOV DI,ALDEC SIINCDILOOPNEXTMOV BYTE PTR DI,LEADX,INFO
11、2MOV AH,9;9号调用,显示输出提示信息INT21HLEA DX,BUFBMOVAH,9 ;反向显示字符串INT 21HMOVAH,4CHINT 21HCODEENDSENDSTART返回本节返回本节6.3 BIOS键盘输入功能调用调用模式:MOV AH,功能号设置入口参数INT n分析出口参数BIOS键盘输入功能使用INT 16H1 功能号00H:读取键入的一个字符,无回显,响应CTRL_C,无键入则等待。入口参数:无出口参数:AL=输入字符的ASCII码2 功能号01H:查询键盘缓冲区入口参数:无出口参数:Z=0,表示有键入,否则无键入3 功能号02H:读取当前转换状态入口参数:无出
12、口参数:AL=键盘状态字(P94)4 功能号10H:读扩展键盘,无回显,响应CTRL_C。入口参数:无出口参数:同00H5 功能号11H:查询键盘缓冲区6 功能号12H:读取扩展键盘的转换状态。6.4 文本方式BIOS屏幕功能调用6.4.1 显示器6.4.2 文本方式BIOS屏幕调用调用指令 INT 10H1 功能号00H:设置屏幕显示方式2功能号01H:设置光标形状3功能号02H:预置光标位置4功能号03H:读取光标的当前位置5功能号05H:设置当前显示页6功能号06H:窗口上滚7功能号07H:窗口下滚8功能号08H:读取光标所在位置的字符及其属性9功能号09H:从光标所在位置开始,显示若干
13、个相同的字符10功能号0AH:从光标所在位置开始,显示若干个相同的字符11功能号0EH:显示一个字符12功能号13H:显示字符串6.5 程序设计方法程序设计方法1 概述2 顺序程序设计3 分支程序设计4 循环程序设计5 子程序设计6 模块化程序设计7 高级汇编语言技术开开 始始 1 概述(1)汇编语言程序设计的一般步骤(2)流程图返回本章首页返回本章首页程序设计方法程序设计方法 汇编语言程序设计的一般步骤汇编语言程序设计一般有以下几个步骤:1分析问题,确定算法2绘制流程图3根据流程图编制程序4调试程序返回本节返回本节流程图1流程图的概念流程图是由特定的几何图形、指向线、文字说明来表示数据处理的
14、步骤,形象描述逻辑控制结构以及数据流程的示意图。流程图具有简洁、明了、直观的特点。2流程图符号表示流程图符号表示(1)起止框:表示程序)起止框:表示程序的开始和结束。的开始和结束。起止框起止框(2)判断框(3)处理框)处理框(4)调用框)调用框(5)指向线(6)连接框)连接框 返回本节返回本节2 顺序程序设计下面举例说明顺序程序的设计。【例4.1】试编写一程序计算以下表达式的值。=(v-(*+-540)/x式中x、v均为有符号字数据。设、的值存放在字变量、V中,结果存放在双字变量之中,程序的流程图如图4.1所示。返回本章首页返回本章首页图图4 4.1 1 顺顺序序运运算算程程序序流流程程图图源
15、程序如下:DATASEGMENTXDW200YDW100ZDW3000VDW10000WDW2 DUP(?)DATAENDSSTACKSEGMENT STACK DB 200 DUP(0)STACKENDSCODESEGMENTASSUME DS:DATA,CS:CODE,SS:STACKSTART:MOVAX,DATAMOVDS,AX;DATAAXMOVAX,X IMULY;(X)*(Y)DX:AXMOVCX,AXMOVBX,DX;(DX:AX)(BX:CX)MOVAX,ZCWD;(Z)符号扩展ADDCX,AXADCBX,DX;(BX:CX)+(DX:AX)(BX:CX)SUBCX,540S
16、BBBX,0;(BX:CX)-540(BX:CX)MOVAX,V CWD;(V)符号扩展SUBAX,CXSBBDX,BX;(DX:AX)-(BX:CX)(DX:AX)IDIVX;(DX:AX)/XMOV W,AX;商WMOV W+2,DX;余数DXW+2MOV AH,4CHINT21HCODEENDS;退出DOS 状态ENDSTART【例4.2】【例4.2】已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在TAB表中,要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。编写程序如下:STACKSEGMENT STACKDB 200 DUP(0)STACKENDSDATA
17、SEGMENTTABDB 80,85,86,71,79,96 DB 83,56,32,66,78。84NO DB 10ENGLIST DB?DATAENDSCODESEGMENT ASSUME DS:DATA,SS:STACK,CS:CODEBEGIN:MOVAX,DATAMOVDS,AXLEABX,TAB MOVAL,NODELALXLATTABMOVENGLISH,ALMOVAH,4CHINT21HCODEENDSENDBEGIN6.5 分支程序设计(1)用条件转移指令实现程序分支(2)用跳转表实现多路分支返回本章首页返回本章首页(1)用条件转移指令实现程序分支【例4.3】编写计算下面函数
18、值的程序:1X0Y=0 X=0 -1 X设输入数据为X、输出数据Y,且皆为字节变量。程序流程图如图4.2所示。程序如下:DATASEGMENTX DB -10Y DB?DATAENDSSTACKSEGMENT STACK DB 200 DUP(0)STACKENDSCODESEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATA MOVDS,AX CMPX,0;与0进行比较 JGEA1;X0转A1 MOVY,-1;X 0时,-1Y JMPEXITA1:JG A2;X0转A2 MOVY,0;X=0时,0Y JMPEXITA2:MOVY,1;X
19、0,1Y EXIT:MOVAH,4CH INT21H CODE ENDS ENDSTART MOVDS,AX CMPX,0;与0进行比较 JGEA1;X0转A1 MOVY,-1;X 0时,-1Y JMPEXITA1:JGA2;X0转A2 MOVY,0;X=0时,0Y JMPEXITA2:MOVY,1;X0,1Y EXIT:MOVAH,4CH INT21H CODE ENDS ENDSTART图图4.2 分支运算分支运算程序流程图程序流程图【例4.4】【例4.4】试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。设三个带符号数分别在三个字变量X、Y、Z中存储。程序流程图如图
20、4.3所示 图图4.3例例4.4程序流程图程序流程图 程序如下:STACSEGMENT STACK DB 200 DUP(0)STACKENDSDATASEGMENTX DW 00ABHY DW 5Z DW 200MAXDW?DATAENDSCODESEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START:MOVAX,DATA MOVDS,AX MOVAX,X CMPAX,Y;XY?JGL1 MOVAX,Y;YZ?CMPAX,Z JGEXITL2:MOVAX,Z JMPEXIT L1:CMPAX,Z;XZ?JLEL2EXIT:MOV MAX,AX MOVAH,
21、4CH INT21HCODEENDS END START返回本节返回本节(2)用跳转表实现多路分支【例4.5】设某程序有8路分支,试根据给定的N值(18),将程序的执行转移到其中的一路分支。程序流程如图4.4所示。程序如下:DATASEGMENTTABDW P1,P2,P3,P4,P5,P6,P7,P8N DB 5DATAENDSSTACKSEGMENT DB 200 DUP(0)STACKENDSCODESEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START:MOV AX,DATAMOV DS,AXMOV AL,NDEL ALADD AL,ALMOV BM
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计

限制150内