《南邮微机原理课件第6章.ppt》由会员分享,可在线阅读,更多相关《南邮微机原理课件第6章.ppt(99页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、6.1 6.1 汇编源程序的编程格式汇编源程序的编程格式6.2 6.2 系统功能调用系统功能调用6.3 6.3 程序设计举例程序设计举例6.4 Windows 6.4 Windows 汇编语言编程初步汇编语言编程初步第第6 6章章 汇编语言程序设计汇编语言程序设计汇编源程序有两种编程格式汇编源程序有两种编程格式:EXEEXEEXEEXE文件的编程格式:文件的编程格式:文件的编程格式:文件的编程格式:只能生成扩展为只能生成扩展为EXEEXE 的可执行文件;的可执行文件;COMCOMCOMCOM文件的编程格式:文件的编程格式:文件的编程格式:文件的编程格式:可以生成扩展为可以生成扩展为COMCOM
2、 的可执行文件。的可执行文件。COMCOM文件的执行级别高于文件的执行级别高于EXEEXE文件文件,同名的同名的BAT(BAT(批处理批处理)文件文件执行级别最低。执行级别最低。6.1源程序的编程格式源程序的编程格式EXEEXE文件的编程格式文件的编程格式 此格式允许源程序使用多个逻辑段(包括据段、堆栈段、此格式允许源程序使用多个逻辑段(包括据段、堆栈段、代码段及其它逻辑段);代码段及其它逻辑段);在实模式下在实模式下,每个逻辑段的目标块不超过每个逻辑段的目标块不超过64K64K;适合编写大型程序。适合编写大型程序。.486.486 DATA SEGMENT USE16 DATA SEGMEN
3、T USE16 ;定义数据段;定义数据段 MESG DB MESG DB I AM A STUDENT!I AM A STUDENT!,$DATA ENDS DATA ENDS CODE SEGMENT USE16 CODE SEGMENT USE16 ;定义代码段定义代码段 ASSUME CS:CODE,DS:DATAASSUME CS:CODE,DS:DATA BEG:MOV AX,DATABEG:MOV AX,DATA MOV DS,AX MOV DS,AX LAST:MOV AH,9 LAST:MOV AH,9 MOV DX,OFFSET MESG MOV DX,OFFSET MESG
4、 INT 21H INT 21H MOV MOV AH,4CH AH,4CH INT INT 21H 21H ;返回返回DOSDOS CODE ENDSCODE ENDS END END BEG BEGEXEEXE文件的内存映象文件的内存映象文件的内存映象文件的内存映象磁盘上的磁盘上的EXE文件包括两部分:文件包括两部分:装入模块和重定位信息装入模块和重定位信息DOS装载装载EXE文件时,根据重定位信息完成装入模块的重定文件时,根据重定位信息完成装入模块的重定位。同时,重定位信息被丢弃。位。同时,重定位信息被丢弃。DOS在同一内存块的用户程序上方(低地址处)偏移地址为在同一内存块的用户程序上方
5、(低地址处)偏移地址为00HFFH的单元处自动生成一个的单元处自动生成一个256字节的数据块,称为程字节的数据块,称为程序段前缀(序段前缀(PSP)。)。DOS自动使自动使DS=ES=存放存放PSP的段基址,使的段基址,使CS:IP指向用户程指向用户程序的启动地址序的启动地址INT 20H数据段数据段代码段代码段堆栈段堆栈段DS,ESCS:IPSSSP注注:DOSDOS把把EXEEXE文件调入文件调入内存后内存后,自动给自动给SSSS、SPSP赋初值赋初值,程序中给程序中给SSSS、SPSP赋初值的指令可省略。赋初值的指令可省略。PSP(256字节)字节)用户程用户程序序COMCOM文件的编程
6、格式文件的编程格式 汇编语言要求此格式必须符合以下规定汇编语言要求此格式必须符合以下规定汇编语言要求此格式必须符合以下规定汇编语言要求此格式必须符合以下规定:源程序只允许使用一个逻辑段源程序只允许使用一个逻辑段,即代码段即代码段,不允许设置堆栈不允许设置堆栈段段;程序使用的数据程序使用的数据,可以集中设置在代码段的开始或未尾可以集中设置在代码段的开始或未尾;在代码段偏移地址在代码段偏移地址(有效地址有效地址)为为100H100H的单元的单元,必须是程序必须是程序的启动指令的启动指令;代码段目标块小于代码段目标块小于64K64K。COMCOM文件的编程格式适合于编写中小型程序。文件的编程格式适合
7、于编写中小型程序。.486.486 CODE CODE SEGMENTSEGMENT USE16 USE16 ASSUMEASSUME CS:CODE CS:CODE ORGORG 100H 100H BEG:BEG:JMPJMP STARTSTART MESG DB MESG DB HELLOHELLO,0DH,0AH,0DH,0AH,$;用户程序数据区用户程序数据区 START:START:MOV CX,10 ;MOV CX,10 ;设置循环次数设置循环次数 LAST:MOV AH,9LAST:MOV AH,9 MOV DX,OFFSET MESG MOV DX,OFFSET MESG I
8、NT 21H ;INT 21H ;显示一行显示一行HELLOHELLO LOOP LAST ;LOOP LAST ;循环计数循环计数 MOV AH,4CHMOV AH,4CH INT 21H ;INT 21H ;返回返回DOSDOS CODE ENDSCODE ENDS END BEG END BEG COM文件的内存映象文件的内存映象 磁盘上的磁盘上的COM文件没有重定位信息,体积比文件没有重定位信息,体积比EXE文件小。文件小。DOS装载装载COM文件时,在同一内存块的用户程序上方(低地址文件时,在同一内存块的用户程序上方(低地址处)偏移地址为处)偏移地址为00HFFH的单元处自动生成一个
9、的单元处自动生成一个PSP;然后从偏移地址然后从偏移地址100H处开始存放用户程序;处开始存放用户程序;DOS自动使自动使CS=DS=ES=SS=存放存放PSP的段基址,使的段基址,使IP=100H,SP=FFFEH。INT20H代码段代码段堆栈段堆栈段CS,DSES,SSIP(FFFEH)SPPSP(256字节)字节)用户程序用户程序(64K-256)返回返回DOS的其它方法的其它方法EXE格式文件可以借用格式文件可以借用PSP首单元的首单元的INT20H返回返回DOS执行完用户程序后,使执行完用户程序后,使CS:IP指向指向PSP的首单元。的首单元。DOS在装载在装载EXE文件时将文件时将
10、DS指向该单元,故可采取措施:指向该单元,故可采取措施:把执行程序放在一个远过程中;把执行程序放在一个远过程中;用户程序在给用户程序在给SS、SP赋初值后,赋初值后,DS赋值前,用三条指令把赋值前,用三条指令把PSP的首单元的物理地址(的首单元的物理地址(DS:0000H)压入堆栈,即:压入堆栈,即:PUSHDSMOVAX,0PUSHAX返回返回DOS时,执行时,执行RET指令,栈顶四个字节弹出分别送指令,栈顶四个字节弹出分别送CS和和IP,即可执行即可执行INT20H指令。指令。COM格式文件可直接执行格式文件可直接执行INT20H指令指令 .486 .486 ;方式定义;方式定义 DATA
11、 SEGMENT USE16 DATA SEGMENT USE16 ;定义数据段定义数据段 MESG DB MESG DB HELLOHELLO,0DH,0AH,0DH,0AH,$DATA ENDS DATA ENDS CODE SEGMENT USE16 CODE SEGMENT USE16 ;定义代码段定义代码段 ASSUME CS:CODE,DS:DATA,SS:STACK ASSUME CS:CODE,DS:DATA,SS:STACK;说明段约定说明段约定 MAIN PROCMAIN PROC FAR FAR ;为什么定义成远过程?为什么定义成远过程?BEG:BEG:PUSHPUSH
12、DS DS MOV MOV AX AX,0 0 PUSH PUSH AX AX MOV AX,DATA MOV AX,DATA MOV DS,AX MOV DS,AX LAST:MOV AH,9 LAST:MOV AH,9 MOV DX,OFFSET MESG MOV DX,OFFSET MESG INT 21H INT 21H ;显示显示一行显示显示一行HELLOHELLO RET RET ;返回返回DOSDOS MAIN ENDPMAIN ENDP CODE ENDSCODE ENDS END END BEG BEG ;汇编结束汇编结束源程序清单:源程序清单:6.2系统功能调用系统功能调用
13、 DOSDOS的的4 4个组成部分中个组成部分中IBMBIO.COMIBMBIO.COM和和IBMDOS.COMIBMDOS.COM是是DOSDOS系统系统的核心模块的核心模块 IBMBIO.COMIBMBIO.COM为基本为基本I/OI/O设备处理程序设备处理程序,与与BIOSBIOS一起完成数据一起完成数据输入和数据输出的基本操作输入和数据输出的基本操作 IBMDOS.COMIBMDOS.COM是磁盘文件管理程序;是磁盘文件管理程序;一片大容量的一片大容量的EPROM或或FLASH存储器存储器这两个模块均有若干子功能可以被用户程序调用,称为这两个模块均有若干子功能可以被用户程序调用,称为“
14、DOS功能调用功能调用”和和“BIOS功能调用功能调用”(系统功能调用系统功能调用系统功能调用系统功能调用)PC-DOS的模块结构的模块结构DOSShellDOSKernelDOSBIOS1.命令处理程序命令处理程序命令解释,外部命令装入等。命令解释,外部命令装入等。2.DOS内核程序内核程序MSDOS.SYS包括文件管理、磁盘管理、包括文件管理、磁盘管理、DOS功能调用等。功能调用等。该模块以系统功能调用的方式供用户使用,该模块以系统功能调用的方式供用户使用,INT21H3.DOS基本输入输出程序模块基本输入输出程序模块IO.SYS管理输入输出设备管理输入输出设备(显示器、键盘、打印机、串行
15、通信设备等)(显示器、键盘、打印机、串行通信设备等)的驱动,并转换为的驱动,并转换为ROMBIOS固件的设备固件的设备控制程序的请求。控制程序的请求。DOSShellDOSKernelDOSBIOSDOS命令命令ROMBIOS显显示示器器卡卡盘盘控控制制卡卡串串行行口口卡卡键键盘盘接接口口打打印印机机卡卡应用层应用层DOS服务层服务层ROMBIOS服务层服务层硬件控制层硬件控制层应用程序应用程序INT10HINT10HINT13HINT13HINT14HINT14HINT16HINT16HINT17HINT17HINT21HINT21H高端高端中断向量表中断向量表系统数据区系统数据区IBMBI
16、O.COMIBMDOS.COMCOMMAND.COM低端低端实地实地址模址模式式1MB空间空间键盘缓冲区键盘缓冲区显示缓冲区等显示缓冲区等 用户程序通过用户程序通过INT 21HINT 21H软中断指令调用软中断指令调用DOSDOS系统功能系统功能,调用模式调用模式如下如下:MOV MOV AH,AH,功能号功能号 设置入口参数设置入口参数 INTINT 21H 21H 分析出口参数分析出口参数 功能号:功能号:代表一个不同功能的子程序代表一个不同功能的子程序DOSDOS功能调用功能调用调用模式:调用模式:MOVAH,功能号功能号 设置入口参数设置入口参数 INT21H 分析出口参数分析出口参
17、数DOSDOS功能调用功能调用AH=?执行执行1#子程序子程序执行执行2#子程序子程序IRET21H型中断服务程序型中断服务程序=1=2【功能号功能号01H01H】等待键入一个字符等待键入一个字符,有回显有回显,响应响应Ctrl_CCtrl_C。入口参数入口参数:无。无。出口参数出口参数:ALAL按键的按键的ASCIIASCII码。若码。若ALAL0,0,表明按键是功能键表明按键是功能键,光标键光标键,需再次调用本功能需再次调用本功能,才能返回按键的扩展码。才能返回按键的扩展码。调用方式:调用方式:MOVAH,1INT 21HDOSDOS功能调用功能调用【功能号功能号02H02H】显示一个字符
18、显示一个字符,响应响应Ctrl_CCtrl_C。入口参数入口参数:DLDL待显字符的待显字符的ASCIIASCII码。码。出口参数出口参数:无。无。本功能在屏幕的当前位置显示一个字符本功能在屏幕的当前位置显示一个字符,光标光标 右移一格右移一格,如果是在一行末尾显示字符如果是在一行末尾显示字符,则光标则光标 返回下一行的开始格。如果是在屏幕的右下角返回下一行的开始格。如果是在屏幕的右下角 显示字符显示字符,光标返回时屏幕要上滚一行。光标返回时屏幕要上滚一行。注意:注意:该功能要破坏该功能要破坏ALAL寄存器的内容寄存器的内容。DOSDOS功能调用功能调用 Eg:MOVDL,AMOVAH,2IN
19、T21H屏幕上显示一个字符屏幕上显示一个字符A【功能号功能号07H07H】等待键入一个字符等待键入一个字符,无回显无回显,不响应不响应Ctrl_CCtrl_C。入口参数入口参数:无。无。出口参数出口参数:ALAL按键的按键的ASCIIASCII码码,若若ALAL0,0,需再次调用该项功需再次调用该项功能才能在能才能在ALAL中得到按键的扩展码。中得到按键的扩展码。【功能号功能号08H08H】等待键入一个字符等待键入一个字符,无回显无回显,响应响应Ctrl_CCtrl_C。入口参数入口参数:无。无。出口参数出口参数:ALAL按键的按键的ASCIIASCII码码,若若ALAL0,0,需再次调用该项
20、功需再次调用该项功能才能在能才能在ALAL中得到按键的扩展码。中得到按键的扩展码。【功能号功能号09H】显示字符串显示字符串,响应响应Ctrl_C。入口参数入口参数:DS:DX字符串首地址字符串首地址,字符串必须以字符串必须以$(即即ASCII码码24H)为结束标志为结束标志出口参数出口参数:无。无。该项功能从屏幕当前位置开始该项功能从屏幕当前位置开始,显示字符串显示字符串,遇到结束标志遇到结束标志$时停止时停止,$字符并不显示字符并不显示注意:注意:9号功能破坏号功能破坏AL寄存器的内容寄存器的内容DOSDOS功能调用功能调用Eg:在屏幕上显示在屏幕上显示IAMASTUDENT!分析:分析:
21、将将IAMASTUDENT!定义在数据段,并在定义在数据段,并在!后加一个字符后加一个字符$,利用,利用9号号DOS功能调用,即可完成显功能调用,即可完成显示示IAMASTUDENT!DOSDOS功能调用功能调用 .486.486 DATA SEGMENT USE16 DATA SEGMENT USE16 ;定义数据段;定义数据段 MESG DB MESG DB I AM A STUDENT!I AM A STUDENT!,$DATA ENDS DATA ENDS CODE SEGMENT USE16 CODE SEGMENT USE16 ;定义代码段定义代码段 ASSUME CS:CODE,
22、DS:DATAASSUME CS:CODE,DS:DATA BEG:MOV AX,DATABEG:MOV AX,DATA MOV DS,AX MOV DS,AX LAST:MOV AH,9 LAST:MOV AH,9 MOV DX,OFFSET MESG MOV DX,OFFSET MESG INT 21H INT 21H MOV MOV AH,4CH AH,4CH INT INT 21H 21H ;返回返回DOSDOS CODE ENDSCODE ENDS END END BEG BEG源程序清单:源程序清单:【功能号功能号0AH0AH】等待键入一串字符送用户程序数据缓冲区。等待键入一串字符
23、送用户程序数据缓冲区。入口参数:入口参数:DS:DXDS:DX指向放键入字符的缓冲区指向放键入字符的缓冲区 缓冲区定义形式规定为:缓冲区定义形式规定为:缓冲区能容纳的字符个数缓冲区能容纳的字符个数实际接收的字符个数实际接收的字符个数接收的字符接收的字符1DOSDOS功能调用功能调用程序员预置可容纳的字符个数程序员预置可容纳的字符个数(包括回车键包括回车键)0AH功能写入功能写入实际接收实际接收的字符个数的字符个数(不包括回车键不包括回车键)数数据据缓缓冲冲区区BUF+0+1+2.+n键入字符串的键入字符串的实际存储区域实际存储区域100EG:BUF DB100 DB?DB100DUP(?)DO
24、SDOS功能调用功能调用 出口参数:出口参数:存放于缓冲区的字符串,以回车键结尾存放于缓冲区的字符串,以回车键结尾调用方式调用方式:MOVAH,0AHINT21H注意:注意:缓冲区定义的第二个字节由系统设置,其余缓冲区定义的第二个字节由系统设置,其余由用户定义;由用户定义;若输入的字节数少于定义的字节数,缓冲区若输入的字节数少于定义的字节数,缓冲区其余字节补零;其余字节补零;若输入的字节数大于定义的字节数,后来输入若输入的字节数大于定义的字节数,后来输入的字符丢弃且响铃警告。的字符丢弃且响铃警告。DOSDOS功能调用功能调用 例例:人机会话程序人机会话程序Limei?(Y/N)Whatisyo
25、urname?1.会话内容及设计思路会话内容及设计思路Linei;前者是程序给出的询问信息前者是程序给出的询问信息,后者是用户键入的回答后者是用户键入的回答N;程序复制的姓名和回答提示程序复制的姓名和回答提示Limei;再次问答再次问答Linei?(Y/N)Whatisyourname?Y问题提出问题提出:如何设置程序运行所需的数据?方法如下:如何设置程序运行所需的数据?方法如下:数据设置在程序的数据段数据设置在程序的数据段程序运行时通过人机会话临时键入程序运行时通过人机会话临时键入程序装入时通过命令行参数给出程序装入时通过命令行参数给出 本例学习前两种方法本例学习前两种方法,并以此学习并以此
26、学习DOS功能调用功能调用DOSDOS功能调用功能调用2.框图框图:显示询问信息显示询问信息等待键入姓名串等待键入姓名串复制姓名串复制姓名串等待用户认可等待用户认可Y/NY返回返回DOS9#功能功能0AH#功能功能9#1#NDOSDOS功能调用功能调用DATASEGMENTUSE16MESG1DB0DH,0AHDBWhatisyourname?$MESG2DB?(Y/N)$BUFDB30DB?DB30DUP(?)DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DA:DATABEG:MOVAX,DATAMOVDS,AXAGAIN:MOVAH,9MOVDX,OFFSET
27、MESG1INT21H;询问姓名询问姓名MOVAH,0AHMOVDX,OFFSETBUFINT21H;接收键入字符串接收键入字符串MOVBL,BUF+1MOVBH,0.486;实际键入的字符个数实际键入的字符个数BXMOVSI,OFFSETBUF+2MOVBYTEPTRBX+SI,$;用用$作为串结束符作为串结束符MOVAH,2MOVDL,0AHINT21H;光标下移一行光标下移一行MOVAH,9MOVDX,OFFSETBUF+2INT21H;复制键入的字符串复制键入的字符串MOVAH,9MOVDX,OFFSETMESG2INT21H;给出认可信息给出认可信息MOVAH,1INT21H;等待键
28、入等待键入CMPAL,Y;比较比较JNEAGAINMOVAH,4CHINT21H;返回返回DOSCODEENDSENDBEG源程序清单:源程序清单:主主板板EPROM中中固固化化有有基基本本I/O系系统统程程序序BIOS,它它是是最最接接近近硬硬件件的的驱驱动动程程序序,BIOS中中的的许许多多子子程程序序可可被被用用户户程程序序调调用用,调调用用这这些子程序称为些子程序称为BIOS功能调用。功能调用。键盘接口电路键盘接口电路,完成串完成串并并键盘电路键盘电路键盘中断处理键盘中断处理程序程序内存键盘内存键盘缓冲区缓冲区主板机主板机串行扫描码串行扫描码并行并行扫描码扫描码键代码键代码用户程序执行
29、用户程序执行INT16H可访问键盘缓冲区可访问键盘缓冲区#BIOSBIOS功能调用功能调用 BIOSBIOS功能调用模式功能调用模式:MOV AH,MOV AH,功能号功能号 设置入口参数设置入口参数 INT INT n n 分析出口参数分析出口参数其中其中INT nINT n为软中断指令为软中断指令,n,n为中断类型码为中断类型码不同不同n n的代表不同的设备驱动程序的代表不同的设备驱动程序BIOSBIOS功能调用功能调用【功能号功能号00H00H】读取键入的一个字符读取键入的一个字符,无回显无回显,响应响应Ctrl_CCtrl_C,无无 键入则等待。键入则等待。入口参数入口参数:无。无。出
30、口参数出口参数:ALAL键入字符的键入字符的ASCIIASCII码。若码。若ALAL0,0,则则AHAH输入键输入键 的扩展码。的扩展码。【功能号功能号01H】查询键盘缓冲区。查询键盘缓冲区。入口参数入口参数:无。无。出口参数出口参数:Z标志标志0,表示有键入表示有键入,键代码仍留在键盘缓冲区中键代码仍留在键盘缓冲区中,此时此时AL键入字符的键入字符的ASCII码码,AH键入字符的扩展码。键入字符的扩展码。Z标志标志1,表示无键入表示无键入。BIOSBIOS功能调用功能调用CRT(Cathode Ray Tube CRT(Cathode Ray Tube 阴极射线管阴极射线管)显示器是微机系显
31、示器是微机系统的输出设备。统的输出设备。PCPC系列机可以配置单色显示器系列机可以配置单色显示器,或彩色或彩色显示器显示器显示适配器是显示器和系统总线之间的接口电路。适显示适配器是显示器和系统总线之间的接口电路。适配器在主机箱的扩展槽中通过配器在主机箱的扩展槽中通过9 9芯插座和芯插座和CRTCRT显示器相显示器相连连显示适配器有显示适配器有CRTCRT控制器、定时器、字符发生器、显示控制器、定时器、字符发生器、显示存储器等功能存储器等功能BIOSBIOS文本显示功能调用文本显示功能调用80列列25行行40列列25行行 1.1.显示器工作方式显示器工作方式显示器工作方式显示器工作方式黑白黑白/
32、彩色文本方式彩色文本方式 黑白黑白/彩色图形方式彩色图形方式文本方式文本方式:显示数字显示数字,字符字符图形方式图形方式:显示点显示点,由点(像点)组成图形由点(像点)组成图形BIOSBIOS文本显示功能调用文本显示功能调用2.2.2.2.显示存储区与显示屏显示存储区与显示屏显示存储区与显示屏显示存储区与显示屏 单显单显8025文本方式文本方式彩显彩显8025文本方式文本方式0页页1页页2页页3页页B000B800 B900 BA00 BB00系统系统RAM(内存)部分空(内存)部分空间被指定作为显示存储区间被指定作为显示存储区:0F9E:0F9FASC 码码属性属性.ASC 码码属性属性:0
33、000:0001偶地址偶地址单元单元奇地址奇地址单元单元079列列024行行8025文本文本方式方式BIOSBIOS文本显示功能调用文本显示功能调用D7D6D5D4D3D2D1D00:正常显示正常显示1:闪烁显示闪烁显示(背景闪烁背景闪烁)背景色背景色前景色前景色共共8种背景色种背景色16种前景色种前景色颜色的编码,请见教材颜色的编码,请见教材如如:蓝底白字蓝底白字,属性字为属性字为1FH,黑底红字黑底红字,属性字属性字04H3.3.文本方式属性字文本方式属性字文本方式属性字文本方式属性字彩显属性字彩显属性字:BIOSBIOS文本显示功能调用文本显示功能调用4.4.屏显的编程方法屏显的编程方法
34、屏显的编程方法屏显的编程方法DOS功能调用功能调用(如如:2#,9#)BIOS功能调用功能调用(0EH#,13H#)直接对显示存储区进行写操作直接对显示存储区进行写操作 5.5.BIOSBIOS屏显功能调用的调用模式屏显功能调用的调用模式屏显功能调用的调用模式屏显功能调用的调用模式MOVAH,功能号功能号预置入口参数预置入口参数INT10H分析出口参数分析出口参数BIOSBIOS文本显示功能调用文本显示功能调用【功能号功能号00H00H】设置屏幕显示方式设置屏幕显示方式 入口参数入口参数:AL AL0 400 4025 25 黑白文本方式黑白文本方式 ALAL1 401 4025 25 彩色文
35、本方式彩色文本方式 ALAL2 802 8025 25 黑白文本方式黑白文本方式 ALAL3 803 8025 25 彩色文本方式彩色文本方式 出口参数出口参数:无。无。【功能号功能号02H】预置光标位置预置光标位置。入口参数入口参数:BH显示页号显示页号,DH行号行号,DL列号。列号。出口参数出口参数:无。无。【功能号功能号03H】读取光标的当前位置读取光标的当前位置。入口参数入口参数:BH显示页号。显示页号。出口参数出口参数:CH、CL光标顶部扫描线、低部扫描光标顶部扫描线、低部扫描线的行号。线的行号。DH、DL光标在屏幕上的行、列号。光标在屏幕上的行、列号。BIOSBIOS文本显示功能调
36、用文本显示功能调用【功能号功能号13H13H】显示字符串显示字符串 入口参数入口参数:AL AL0 03,3,BH BH显示页号显示页号,BL BL属性字属性字(AL(AL0 0、1 1 时时 有效有效),),CX CX串长度串长度,DH DH、DLDL字符串显示的起始字符串显示的起始 行、列号行、列号,ES:BP ES:BP待显字符串首地址。待显字符串首地址。出口参数出口参数:无无BIOSBIOS文本显示功能调用文本显示功能调用注意:注意:13H功能是唯一能显示彩色字符的子功能功能是唯一能显示彩色字符的子功能例例:在屏幕左上角显示在屏幕左上角显示HELLO黑底灰白字符黑底灰白字符在屏幕中央显
37、示在屏幕中央显示IAMASTUDENT红底白字红底白字思路思路:显示显示HELLO,用用DOS功能功能#要求待显字符串放在数据段要求待显字符串放在数据段,串尾用串尾用$作结束符作结束符显示显示IAMASTUDENT,用用BIOS13H功能功能它要求待显字符串在附加段它要求待显字符串在附加段这意味着源程序至少要有三个逻辑段这意味着源程序至少要有三个逻辑段,我们令数据我们令数据段与附加段段与附加段“重叠重叠”,这样源程序仅设置两个逻辑段这样源程序仅设置两个逻辑段即可。即可。BIOSBIOS文本显示功能调用文本显示功能调用.486DATASEGMENTUSE16MESG1DBHELLO$MESG2D
38、BIAMASTUDENTLL=$MESG2DATAENDSCODESEGMENTUSE16ASSUMECS:CODEASSUMEDS:DATAASSUMEES:DATABEG:MOVAX,DATAMOVDS,AXMOVES,AXMOVAX,0003HINT10HMOVAH,9MOVDX,OFFSETMESG1INT21HMOVAX,1301HMOVBH,0MOVBL,01001111BMOVCX,LLMOVDH,12MOVDL,(80-LL)/2MOVBP,OFFSETMESG2INT10HMOVAH,4CHINT21HCODEENDSENDBEG源程序清单:源程序清单:6.3程序设计举例程序
39、设计举例用汇编语言编程属结构化程序设计用汇编语言编程属结构化程序设计分析题意,确定算法分析题意,确定算法根据算法画出程序框图根据算法画出程序框图根据框图编写程序根据框图编写程序上机调试程序上机调试程序执行程序执行程序按照自上而下的设计方法,设计一个汇编程序的步骤:按照自上而下的设计方法,设计一个汇编程序的步骤:在在程程序序设设计计中中,程程序序的的效效效效率率率率是是程程序序设设计计好好坏坏的的重重要要指指标标,特特别别是是在在汇汇编编程程序序设设计计中中,其其特特点点要要求求我我们们对对程程序序运运行行的的效效率率加加以以重重点点关关注注。对对于于汇汇编语言程序我们可以考虑以下几方面作为程序
40、运行效率的衡量标准:编语言程序我们可以考虑以下几方面作为程序运行效率的衡量标准:程序的执行时间。每一条语句都有自己的执行时间,在程序的执行时间。每一条语句都有自己的执行时间,在8086/8088指令指令手册中每条指令的运行时间都有明确的定义。根据这些时间,我们可手册中每条指令的运行时间都有明确的定义。根据这些时间,我们可算出程序的运行时间。算出程序的运行时间。程序所占有的字节数。有一些计算机系统,可能应用于工业控制或工程序所占有的字节数。有一些计算机系统,可能应用于工业控制或工业过程检测,不需要过多的硬件资源,比如存储单元,所以就要求我业过程检测,不需要过多的硬件资源,比如存储单元,所以就要求
41、我们的程序有尽可能少的字节数,以满足缩减硬件资源的要求。们的程序有尽可能少的字节数,以满足缩减硬件资源的要求。程序的语句行数。程序的语句行数。顺序程序顺序程序分支程序分支程序循环程序循环程序从结构上来讲,一般的汇编程序可分为:从结构上来讲,一般的汇编程序可分为:子程序子程序宏指令宏指令Eg:从键盘输入一个字符并存储到字节变量从键盘输入一个字符并存储到字节变量BUF单元中单元中.分析:分析:u用用DOS功能调用完成键入,输入的字符保存在功能调用完成键入,输入的字符保存在AL寄存器中寄存器中u将将AL中的内容存到定义在数据段的变量中的内容存到定义在数据段的变量BUF所指单元中所指单元中顺序程序设计
42、顺序程序设计直线程序设计是程序设计中最简单的设计方法,它是将确定好直线程序设计是程序设计中最简单的设计方法,它是将确定好直线程序设计是程序设计中最简单的设计方法,它是将确定好直线程序设计是程序设计中最简单的设计方法,它是将确定好的算法或逻辑关系以正确的语句和正确的逻辑关系有序地编写的算法或逻辑关系以正确的语句和正确的逻辑关系有序地编写的算法或逻辑关系以正确的语句和正确的逻辑关系有序地编写的算法或逻辑关系以正确的语句和正确的逻辑关系有序地编写出来,形成程序。出来,形成程序。出来,形成程序。出来,形成程序。.486DATASEGMENTUSE16BUFDB?DATAENDS源程序清单:源程序清单:
43、CODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVAH,1INT21H;AL=键入字符的键入字符的MOVBUF,ALASIIC码码MOVAH,4CHINT21HCODE ENDSENDBEG在很多实际问题中,通常要根据不同的情况,执行不同的程序块或语句,在很多实际问题中,通常要根据不同的情况,执行不同的程序块或语句,这就需要在设计程序时使用运算后的结果,依据一定的条件进行相应的判这就需要在设计程序时使用运算后的结果,依据一定的条件进行相应的判断,根据判断结果的真或假,去运行相应的程序或语句。断,根据判断结果的真或假,去运
44、行相应的程序或语句。例例:有一数学函数如下:有一数学函数如下:1x0y=f(x)=0 x=0-1x0Y=0Y=1Y=-1YYNN框图如下框图如下开始开始分支程序设计分支程序设计分支程序设计分支程序设计DATASEGMENTXDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,XORAX,AXJEZEROJNSPLUSMOVBL,0FFHJMPHALT在上面的程序中,要特在上面的程序中,要特别注意其中的两个别注意其中的两个JMPHALT的使用,的使用,从而保证每个分支的完从而保证每个分支的完整性。整性。
45、ZERO:MOVBL,0JMPHALTPLUS:MOVBL,1HALT:MOVAH,4CHINT21HCODEENDSENDSTART转移指令可用来实现分支程序设计转移指令可用来实现分支程序设计分支程序分三种:分支程序分三种:u简单分支简单分支u复合分支复合分支u多分支多分支分支程序设计分支程序设计分支程序设计分支程序设计简单分支简单分支即两路分支,该分支程序结构为:即两路分支,该分支程序结构为:条件满足否?条件满足否?程序段程序段1程序段程序段2YN EgEg:将将BXBX寄存器的内容以二进制数格式显在屏幕上寄存器的内容以二进制数格式显在屏幕上BX=1110010011100110BRCLR
46、CL0 0SALSALROLROLCFCFCFCFCFCF简单分支简单分支简单分支简单分支486CODESEGMENTUSE16ASSUMECS:CODEBEG:MOVBX,5678HMOVCX,16LAST:MOVAL,0ROLBX,1JNCNEXTMOVAL,1NEXT:MOVAH,0EHINT10HLOOPLASTMOVAH,4CHINT21HCODEENDSENDBEGADCAL,0数数BX,16 BX,16 CXCXC C标标=?=?1 1ALAL调调BIOS.0EHBIOS.0EHCX-1CXCX-1CXCX=0CX=00 0ALALBXBX左移一位左移一位10NY返返DOSDOS
47、源程序清单:源程序清单:复合分支复合分支判断的条件是复合条件,称复合判断判断的条件是复合条件,称复合判断。复合分支程序结构为:复合分支程序结构为:条件条件1和条件和条件2.满足否?满足否?程序段程序段1程序段程序段2YNEgEg:某科室某科室9人,统计月收入在人,统计月收入在800900间的人数,并用十进制间的人数,并用十进制数显示数显示 分析:月收入是无符号数,对一批数处理应该用间址。分析:月收入是无符号数,对一批数处理应该用间址。数轴数轴:N1(800)N2(900)N1(800)N2(900)复合分支复合分支复合分支复合分支多分支多分支判断条件后有多个出口,判断一次只能选择一个分支。判断
48、条件后有多个出口,判断一次只能选择一个分支。多多分支分支程序结构为:程序结构为:1条件属哪种条件属哪种情况?情况?程序段程序段1程序段程序段n+m.程序段程序段nnn+m循环程序的组成:循环程序的组成:u 循环准备循环准备u 循环体循环体u 循环控制循环控制循环程序设计循环程序设计循环程序设计循环程序设计1.循环初值循环初值循环初值循环初值:用于设置开始循环时,循环体所处的初始状态,如循环变量初用于设置开始循环时,循环体所处的初始状态,如循环变量初值,循环体中用到的数据和地址指针等。值,循环体中用到的数据和地址指针等。2.循环体循环体循环体循环体:重复运行的部分,其中还包含了工作部分和循环控制
49、部分。工作重复运行的部分,其中还包含了工作部分和循环控制部分。工作部分进行相应的操作,而循环控制部分则保证在不满足循环条件时,跳出循部分进行相应的操作,而循环控制部分则保证在不满足循环条件时,跳出循环。环。3.循环结束条件循环结束条件循环结束条件循环结束条件:在循环体中包括了循环结束条件运算部分。每循环一次除在循环体中包括了循环结束条件运算部分。每循环一次除了工作部分进行相应的操作外,循环条件部分还要通过运算,得出当前循环了工作部分进行相应的操作外,循环条件部分还要通过运算,得出当前循环的状态,以便在适当的条件下结束循环。的状态,以便在适当的条件下结束循环。1.1.循环程序的结构循环程序的结构
50、Y Y预置循环次数预置循环次数其他准备工作其他准备工作循环体循环体循环减循环减1 1计数计数退出循环退出循环结果为结果为0?0?N N(a(a)单单循循环环结结构构(b(b)双双循循环环结结构构结果为结果为0?0?循环体循环体内循环减内循环减1 1计数计数结果为结果为0?0?外循环减外循环减1 1计数计数退出循环退出循环预置外循环次数预置外循环次数其他准备工作其他准备工作预置内循环次数预置内循环次数其他准备工作其他准备工作N NN NY YY Y循环程序设计循环程序设计循环程序设计循环程序设计DATASEGMENTSUMDW?DATAENDSCODESEGMENTASSUMECS:CODE,D