汇编语言流程图.ppt

上传人:xt****7 文档编号:2820949 上传时间:2019-11-30 格式:PPT 页数:67 大小:432KB
返回 下载 相关 举报
汇编语言流程图.ppt_第1页
第1页 / 共67页
汇编语言流程图.ppt_第2页
第2页 / 共67页
汇编语言流程图.ppt_第3页
第3页 / 共67页
点击查看更多>>
资源描述
5.1 汇编语言源程序的框架结构 编制汇编语言源程序时,首先要使用段定义伪指令和段寻址伪指令来构造一个由若干指令和数据组成的程序。构造一个源程序的框架结构有如下两种格式: 第一种格式: MOV AH,4CH ;返回DOS INT 21H CODE ENDS END BEGIN,第5章 8086/8088汇编语言程序设计,第二种格式: RET ;取程序段前缀首地址 MAIN ENDP CODE ENDS END BEGIN 区别:两种格式的本质区别在于返回DOS的方法不同: 对于第一种格式,采用了调用DOS系统的4CH功能,返回DOS。具体方法是:在要返回DOS处,安排如下两条指令: MOV AH,4CH INT 21H 对于第二格式,DOS返回方法是调用20H类型的中断服务程序。,5.2 顺序结构程序设计 顺序程序结构是指完全按照顺序逐条执行的指令序列,这种结构的流程图除了有一个开始框和结束框外,就是若干处理框,没有判断框,如图5.1所示。 图5.1 顺序程序的结构形式,例5.1:试分别用汇编语言源程序的两种框架结构编制程序,求出表达式:(X4Y)/2的值,并保存到RESULT存储单元中,其中X,Y均为字节变量。,解:完成该功能的流程图如图5.2所示: 图5.2 例5.1的功能实现流程图,参考程序1: DATA SEGMENT ;数据段 X DB 2 Y DB 4 Z DB ? ;定义变量 DATA ENDS STACK SEGMENT PARA STACK DW 20H DUP(0) STACK ENDS CODE SEGMENT ;代码段 ASSUME CS:CODE,DS:DATA,SS:STACK,BEGIN: MOV AX,DATA MOV DS,AX ;DS赋初值 MOV AL,X ;ALX MOV CL,2 SAL AL,CL ;ALX4 SUB AL,Y ;ALX4Y SAR AL,1 ;AL(X4Y)/2 MOV Z,AL ;存结果 MOV AH,4CH ;返回DOS INT 21H CODE ENDS END BEGIN,参考程序2: DATA SEGMENT X DB 2 Y DB 4 Z DB ? DATA ENDS STACK SEGMENT PARA STACK DW 20H DUP(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK PROC1 PROC FAR ;使RET为远返回 END BEGIN,BEGIN: PUSH DS ;入栈保存地址 MOV AX,0 ;程序段前缀的首地址 PUSH AX MOV AX,DATA MOV DS,AX MOV AL,X ;ALX MOV CL,2 SAL AL,CL ;ALX4 SUB AL,Y ;ALX4Y SAR AL,1 ;AL(X4Y)/2 MOV Z,AL ;存结果 RET ;取程序段前缀首地址,PROC1 ENDP CODE ENDS,5.3 分支结构程序设计 分支程序结构可以有两种形式,如图5.4所示,它们分别相当于高级语言程序中的IF-THEN-ELSE语句和CASE语句,它们适用于要根据不同条件做不同处理的情况。,5.3.1 用比较/测试的方法实现IF-THEN-ELSE结构 实现方法:在产生分支之前,通常用比较、测试的办法在标志寄存器中设置相应的标志位,然后再选用适当的条件转移指令,以实现不同情况的分支转移。 (1)进行比较,使用比较指令: CMP DEST,SRC 该指令进行减法操作,而不保存结果,只设置标志位。 (2)进行测试,使用测试指令 TEST DEST,SRC 该指令进行逻辑与操作,而不保存结果,只设置标志位。,5.3.2 用地址表法实现CASE结构(即多路分支) 用地址表法实现CASE结构的基本思路是:将各分支程序的入口地址依次罗列形成一个地址表,让BX指向地址表的首地址,从键盘接收或其他方式获取要转到的分支号,再让BX与分支号进行运算,使BX指向对应分支入口地址,最后即可使用JMP WORD PTR BX 或JMP DWORD PTR BX 指令实现所要转到的分支;程序设计流程图如图5.6所示:,图5.6 用地址表法实现多路分支的结构框图,例5.4:编程实现菜单选择,根据不同的选择做不同的事情。,解:假设有3路分支,在地址表中的入口地址分别:A0、A1、A2;具体见图5.7所示:,参考程序: DATA SEGMENT MENU DB 0DH,0AH,“0:Chinese!“ DB 0DH,0AH,“1:English!“ DB 0DH,0AH,“2: German!“ DB 0DH,0AH,“Please choose one to answer the following question:$“ ER DB 0DH,0AH,“I am sorry,you choose the mistake!$“,S0 DB 0DH,0AH,“OK,Please answer in Chinese!$“ S1 DB 0DH,0AH,“OK,Please answer in English!$“ S2 DB 0DH,0AH,“OK,Please answer in German!$“ TAB DW A0,A1,A2 ;地址表 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,MENU ;显示菜单 MOV AH,9 INT 21H,MOV AH,1 ;1号DOS功能调用,接收分支号 INT 21H CMP AL,0 ;进行合法判断 JB ERROR CMP AL,2 JA ERROR LEA BX,TAB ;取地址表首址 SUB AL,30H SHL AL,1 ;段内转移乘以2,段间转移乘以4 XOR AH,AH ;AH清零 ADD BX,AX JMP WORD PTR BX ;产生多分支转移,A0: LEA DX,S0 ;各分支程序段 MOV AH,9 INT 21H JMP EXIT1 A1: LEA DX,S1 MOV AH,9 INT 21H JMP EXIT1 A2: LEA DX,S2 MOV AH,9 INT 21H JMP EXIT1,ERROR: MOV DX,OFFSET ER MOV AH,9 INT 21H EXIT1: MOV AH,4CH ;返回DOS INT 21H CODE ENDS END START,5.3.3 用转移表法实现CASE结构(即多路分支) 用转移表法实现CASE结构的基本思路:将转到各分支程序的转移指令依次罗列形成一个转移表,让BX指向转移表的首地址,从键盘接收或其他方式获取要转到的分支号,再让BX与分支号进行运算,使BX指向对应转移表中转到该分支的转移指令处,最后即可使用JMP BX指令实现所要转到的分支;具体见图5.8所示:,图5.8 用转移表法实现多路分支的结构框图 例5.5:编程实现菜单选择,根据不同的选择做不同的事情。 解:假设有3路分支,转移表中的转移指令分别为:JMP SHORT A0、JMP SHORT A1、JMP SHORT A2;具体见图5.9所示:,参考程序: DATA SEGMENT MENU DB 0DH,0AH,“0:Chinese!“ DB 0DH,0AH,“1:English!“ DB 0DH,0AH,“2: German!“ DB 0DH,0AH,“Please choose one to answer the following question:$“,ER DB 0DH,0AH,“I am sorry,you shoose the mistake!$“ S0 DB 0DH,0AH,“OK,Please answer in Chinese!$“ S1 DB 0DH,0AH,“OK,Please answer in English!$“ S2 DB 0DH,0AH,“OK,Please answer in German!$“ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,MENU ;显示菜单 MOV AH,9 INT 21H,MOV AH,1 ;1号DOS功能调用,接收分支号 INT 21H CMP AL,0 JB ERROR CMP AL,2 JA ERROR LEA BX,TAB ;取地址表首址 SUB AL,30H SHL AL,1 ;短转移乘以2,近转移乘以3,远转移乘以5 XOR AH,AH ;AH清零 ADD BX,AX,JMP BX ;产生多分支转移 TAB: JMP SHORT A0 ;转移表 JMP SHORT A1 JMP SHORT A2 A0: LEA DX,S0 ;各分支程序段 MOV AH,9 INT 21H JMP EXIT1 A1: LEA DX,S1 MOV AH,9 INT 21H,JMP EXIT1 A2:LEA DX,S2 MOV AH,9 INT 21H JMP EXIT1 ERROR: MOV DX,OFFSET ER MOV AH,9 INT 21H EXIT1: MOV AH,4CH ;返回DOS INT 21H CODE ENDS END START,5.4 循环结构程序设计 5.4.1 循环程序的组成 1.设置循环的初始状态 如置循环次数的计数值,以及为循环体正常工作的初始状态等; 2.循环体 这是循环的工作主体,它由循环的工作部分及修改部分组成。3.循环控制部分 它是循环程序设计的关键,每一个循环程序必须选择一个循环控制条件来控制循环的运行和结束,通常有两种方法控制循环:用计数控制循环,用条件控制循环,5.4.2 循环程序的结构形式 循环程序有两种结构,一种是DO-WHILE结构形式,另一种是DO-UNTIL结构形式。具体见图5.10所示: DO-WHILE结构把对循环控制条件的判断放在循环的入口,先判断条件,满足条件就执行循环体,否则退出循环。 DO-UNTIL结构是先执行循环体然后再判断控制条件,不满足条件则继续执行循环操作,一旦满足条件则退出循环。一般讲,如果循环次数等于0的可能,则应选择DO-WHILE结构,否则用DO-UNTIL结构。,图5.10 循环程序的结构形式,5.4.3 循环控制的方法 1.用计数控制循环 这种方法直观、方便,易于程序设计。只要在编制程序时,循环次数已知,就可以使用这种方法设计循环程序。然而更多的循环程序,在编制程序时并不能确切知道循环次数,但是知道循环次数是前面运算或操作的结果或者被存放在某内存单元中。,例5.6:试编制程序统计字节变量VAR中1的个数,并将它存入COUNT单元中。,解:要测试出VAR中1的个数就应该逐位进行测试,可根据最低位是否为1来计数,然后用移位的办法把各位数逐次移到最低位去,共需要测试8次。程序流程如图5.11所示:,图5.11 例5.6的功能实现流程图,参考程序: DATA SEGMENT VAR DB 37H COUNT DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA BEGIN: MOV AX,DATA MOV DS,AX MOV AL,VAR ;ALVAR的值 MOV CX,8 ;赋循环初值 XOR BL,BL ;赋计数器初值,LL: TEST AL,1 ;测试AL的最低位 JZ LL1 ;最低位为0转LL1 INC BL ;计数器加1 LL1: SHR AL,1 ;逻辑右移1位 LOOP LL ;循环控制 MOV COUNT,BL ;COUNT计数器BL的值 MOV AH,4CH ;返回DOS INT 21H CODE ENDS END BEGIN,2.用条件控制循环,例5.8:将正整数NUM插入到一个从小到大排列好顺序的正整数字节数组序列中。,分析:假设该数组的首地址和末地址分别为ARRAY_HEAD、ARRAY_END,显然在这里需要插入的是一个数,所以不一定要扫描整个数组。同时为了插入这个数据,必须要空出位置,即凡是比它大的数据都应该向地址增大的方向移动一个字节,故应该从数组的尾部向头部查找,可逐字节取出比较。值得注意的是,应该考虑正整数NUM大于或小于数组中的所有数的可能,即如果NUM大于数组中所有数,则第一次比较就可以结束查找;如果NUM小于数组中所有数,则必须及时结束查找,绝对不允许查找的范围超出数组的首地址,当然可以把数组的首地址或循环次数作为结束查找的条件。根据上述分析,可以得出程序流程如图5.13所示:,图5.13 例5.8的功能实现流程图,参考程序: NUM EQU 36H DATA SEGMENT ARRAY DB 12H,24H,48H,60H,72H,84H Y DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA BEGIN: MOV AX,DATA MOV DS,AX MOV CX,Y-ARRAY ;循环次数初始化 MOV AL,NUM ;插入值送AL,LEA SI,Y DEC SI ;取得ARRAY的最后元素的偏移地址 LOP: CMP ARRAYSI,AL ;比较 JLE INSERT MOV AH,ARRAYSI MOV ARRAYSI+1,AH ;数据交换 DEC SI ;修改偏移地址 LOOP LOP INSERT: MOV ARRAYSI+1,AL ;插入数据 MOV AH,4CH,INT 21H CODE ENDS END BEGIN,5.5 子程序设计,5.5.1 子程序的构造 前面我们学习了过程定义伪指令,我们也就是用它们来构成的子程序,其格式为: 子程序名 PROC (NEAR/FAR) 保存信息 恢复信息 RET 子程序名 ENDP,5.5.2 子程序的调用与返回 子程序的正确执行是由子程序的正确调用和返回保证的。IBM PC机的CALL和RET指令就分别完成了子程序的调用和返回功能。 1.调用指令:CALL 过程名 执行CALL指令,首先保留断点地址于堆栈中,然后转移到目标单元,它对PSW无影响。 2.返回指令:RET 一个子程序执行的最后一条指令必定是返回指令RET,用以返回到调用子程序的断点处。但在位置上并不一定就是是最后一条指令。它的位置灵活,并不是必须要在最后。只是习惯上我们通常将它置于子程序的最后。,5.5.3 编制子程序的要求 1.子程序必须具有通用性 2.注意保存信息和恢复信息 要注意最先压入堆栈的应该最后弹出来,值得注意的是:必须搞清楚那些寄存器是必须保存的,那些又是不必要或不应该保存的。一般来说,子程序中用到的寄存器是应该保存的,但是如果主程序和子程序之间使用寄存器传递参数的话,该寄存器则不一定需要保存,特别是用来向主程序回送结果(即出口参数)的寄存器,则更不应该因保存和恢复该寄存器的内容而破坏了应该向主程序传送的信息。 3.选用适当的方法在子程序和主程序之间的进行参数传递,这种主程序与子程序之间的信息传送称为参数传递,它可以有以下三种: 用寄存器传递参数 这是最常用的一种方式,通常在参量不多的时候使用这种方法。 用地址表传递参数 通过地址表传送参数的方法是在主程序中首先建立一个地址表,把要传送给子程序的参数都存放在地址表中,然后把地址表的首地址通过寄存器传送到子程序中去;最后子程序通过地址表取得所需参数。 用堆栈传递参数 这种方法是在主程序中把要传送给子程序的参数先保存到堆栈中,然后子程序再从堆栈中取出参数以达到传送参数的目的。,5.6 高级汇编语言技术 5.6.1 宏汇编 1宏定义 宏在使用前必须先进行宏定义。宏定义格式为: 宏指令名 MACRO 形式参数,形式参数, 宏体 ENDM 其中,宏指令名:宏定义的名字(即给宏体中程序段指定一个符号名),不可缺省,宏调用时要使用它,第一个符号必须是字母,其后可以是字母或数字,MACROENDM:宏定义伪指令助记符,不可缺省。它们成对出现,表示宏定义的开始和结束,ENDM前不带宏指令名。 宏体:一段有独立功能的程序代码段。 形式参数:又称哑元,各个哑元之间用逗号隔开,可以缺省。,2宏调用 经宏定义后的宏指令可以在源程序中调用,宏调用格式为: 宏指令名 实参,实参 宏调用只需要有宏指令名,若宏定义中有形参,那么宏调用时必须带有实际参数来替代形参,实际参数的个数,顺序,类型与形参一一对应,各个实参之间用逗号分开。原则上实参的个数与形参的个数相等,但汇编程序不要求它们必须相等,若实参个数大于形参个数,则多余的实参不予考虑,若实参个数小于形参个数,则多余的形参作“空”处理。,3宏展开 汇编程序在对源程序汇编时,对每个宏调用作宏展开,每条插入的宏体指令前带上加号“+”。,例5.11:不带参数的宏定义,用宏指令来实现回车换行。 宏定义: CRLF MACRO MOV DL,0DH ;回车 MOV AH,2 INT 21H MOV DL,0AH ;换行 MOV AH,2,INT 21H ENDM 宏调用:CRLF 宏展开:将下述程序段替换宏调用语句。 MOV DL,0DH ;回车 MOV AH,2 INT 21H MOV DL,0AH ;换行 MOV AH,2 INT 21H,4.宏调用中参数传递 宏定义中的参数可以有多个,实参可以是数字,寄存器或操作码。宏定义还可用部分操作码作参数,但在宏定义中必须用“&”作分隔符,&是一个操作符,它在宏定义体中可作为哑元的前缀,宏展开时,可以把&前后两个符号合并成一个符号。,例5.12:宏定义带一个参数,用宏指令实现将AX中内容右移任意次(小于256)。,宏定义: SHIFT MACRO N MOV CL,N SAL AX,CL ENDM 宏调用1: SHIFT 4,宏调用2: SHIFT 8 宏展开1: MOV CL,4 ;AX中内容算术左移4次 SAL AX,CL 宏展开2: MOV CL,8 ;AX中内容算术左移8次 SAL AX,CL,5.宏定义嵌套 在宏定义中允许使用宏调用,但必须先定义后调用。,例5.14: 宏定义: AD1 MACRO M,N MOV BX,M,ADD AX,N ENDM AD1M MACRO R1,R2,R3 PUSH AX PUSH BX AD1 R1,R2 MOV X3,AX POP BX POP AX ENDM 宏调用: AD1M CX,BX,DX 宏展开: PUSH AX,PUSH BX AD1 R1,R2 ;此语句不占内存 MOV BX,CX ;AD1宏定义展开 ADD AX,BX MOV DX,AX POP BX POP AX,6.取消宏定义语句 格式为:PURGE 宏指令名,宏指令名 PURGE:伪指令助记符,不可缺省,因为经过定义的宏指令名,不允许重新定义,必须用PURGE语句将其取消后,才能重新定义,此语句一次可以取消多个宏指令名。,7.宏指令与子程序的区别 过程调用使用CALL语句,由CPU执行,宏指令调用由宏汇编程序MASM中宏处理程序来识别。 过程调用时,每调用一次都要保留程序的断点和保护现场,返回时要恢复现场和恢复断点,增加了操作时间,执行速度慢。而宏指令调用时,不需要这些入栈及出栈操作,执行速度较快。 过程调用的子程序与主程序分开独立存在,经汇编后在存储器中只占有一个子程序段的空间,主程序转入此处运行,因此目标代码长度短,节省内存空间。而宏调用是在汇编过程中展开,宏调用多少次,就插入多少次,因此目标代码长度大,占内存空间多; 一个子程序设计,一般完成某一个功能,多次调用完成相同操作,仅入口参数可以改变,而宏指令可以带哑元,调用时可以用实元取代,使不同的调用完成不同的操作,增加使用的灵活性。,5.6.2 重复汇编 重复汇编伪指令语句有以下三种: 1定重复 格式: REPT 表达式 宏体 ENDM 其中,REPTENDM:伪指令助记符,必须成对出现,不可省略。宏体:表示需要重复的语句序列。表达式:表示重复次数。,例5.16:将2、4、8、16、32分配给连续的5个存储单元。 NUM=1 REPT 5 NUM=NUM*2 DB NUM ENDM 汇编后: DB 2 DB 4 DB 8 DB 16 DB 32,2不定重复 格式: IRP 形参,实参表 宏体 ENDM 其中,IRPENDM:伪指令助记符,必须成对出现,不可省略。宏体:要重复的语句序列,重复次数由参数个数决定。实数表中是每次重复时将要取的实参,实参之间用逗号隔开,实参表用尖括号括起来。每次重复,依次取实参表中一项,代入语句序列中哑元。前面将2、4、8、16、32分配给连续的5个存储单元的例子也可以用如下不定重复伪指令: IRP NUM,2,4,8,16,32 DB NUM ENDM,例5.17:若要把AX,BX,CX,DX的内容压入堆栈,则可以用如下不定重复伪指令: IRP REG,AX,BX,CX,DX PUSH REG ENDM 汇编后展开为以下四条指令: PUSH AX PUSH BX PUSH CX PUSH DX,3不定重复字符 格式为: IRPC 形式参数,字符串 宏体 ENDM 其中,IRPCENDM:伪指令助记符,必须成对出现,不可省略。宏体:重复执行的语句序列,每次重复时依次用字符串中字符代替形式参数,重复次数取决于字符串中字符的个数。字符串:可用尖括号也可不用尖括号括起来。,例5.18:若要从堆栈中弹出4个字,分别送入DX,CX,BX,AX,则可用如下不定重复字符伪指令: IRPC REG, POP REG&X ENDM,汇编后展开为以下四条指令: POP DX POP CX POP BX POP AX,5.6.3 条件汇编 条件汇编是对给定的条件进行测试,汇编程序根据测试结果,将一段程序嵌入源程序汇编或不进行汇编,它的一般格式为: IF 表达式 指令体1 ;条件为真汇编指令体1 ELSE 指令体2 ;条件为假汇编指令体2 ENDIF,其中,IFENDIF:条件汇编伪指令助记符,必须成对出现,不可省略。IF语句后的“”是指定的条件。如果“IF”指定的条件为真时则宏汇编程序将指令体1中的语句汇编成相应的目标代码,否则就把指令体2中的语句汇编成相应的目标代码。 ELSE:是任选部分,如果没有ELSE,那么“IF”指定的条件满足就汇编,否则就不汇编。 “IF”条件汇编的形式见表5.1所示:,例5.20:利用条件汇编伪指令,可以根据不同情况,产生无条件转移指令如JMP,或产生条件转移指令如JE、JNE、JB、JNB等。 宏定义: GOTO MACRO LOP,X,REL,Y IFB REL JMP LOP ELSE MOV AL,X CMP AL,Y J&REL LOP ENDIF ENDM,宏调用: GOTO LOP1,VAR1,E,VAR2 GOTO EXIT1 宏展开: MOV AL,VAR1 CMP AL,VAR2 JE LOP1 JMP EXIT1 ,5.7 DOS功能子程序的调用 为了了解程序运行过程中的情况,应设法将运算结果显示到显示器上,最简单的方法就是调用操作系统的I/O子程序,我们称为DOS功能调用。DOS为程序设计人员提供了许多可直接调用的功能子程序。调用时需要使用软中断指令: INT n 其中:n为中断调用类型号,其值为00FFH。在使用INT指令前,应将调用的功能号送入AH,有关入口参量送入指定寄存器中。若有出口参量,中断调用返回后,结果在指定的寄存器或存储单元中。DOS功能子程序的调用使用软中断指令“INT 21H”。DOS共有84个功能子程序。这些子程序的主要功能是:磁盘的读写控制、文件操作、目录操作、内存管理、基本输入输出管理及设置/读出系统日期、时间等。,下面例举部分常用的DOS功能子程序。 1带显示的键盘输入(1号功能) 该功能子程序等待键盘输入,直接按下一个键(即输入一个字符),把字符的ASCII码送入AL,并在屏幕上显示该字符。如果按下的键是Ctrl-C组合键,则停止程序运行。如果按下TAB制表键,屏幕上光标自动扩展到紧接着的8个字符位置后面。1号功能调用,毋需入口参量,出口参量在AL中。如: MOV AH,01H INT 21H,2不带显示的键盘输入(7号功能) 与1号功能类似,它仅等待键盘输入一个字符,并将字符的ASCII码送入AL中。但按下Ctrl-C组合键和TAB制表键无反应。调用方法如下: MOV AH,7 INT 21H 缓冲区第一个字节存放它能保存的最大字符数(1255,不能为0!),该值由用户程序自己事先设置。如果键如的字符数比此数大,那就会发出“嘟嘟”声,而且光标不再向右移动。,缓冲区第二个字节存放用户本次调用时实际输入的字符数(回车键除外),这个数由DOS返回时自动填入。用户从键盘输入的字符从第三个字节开始存放,直到用户输入回车键为止,并将回车键码(0DH)加在刚才输入字符串的末尾上。 调用时,用DS:DX寄存器指向输入缓冲区的段基值:偏移量。例如在数据区定义的字符缓冲区如下: MAXLEN DB 18 ACTLEN DB ? STRING DB 18 DUP(0),则输入串的指令如下: MOV AX,SEG MAXLEN MOV DS,AX MOV DX,OFFSET MAXLEN MOV AH,0AH INT 21H 5字符显示(2号功能) 本功能子程序仅在屏幕上显示单个字符。要显示字符的ASCII码存放在DL中。如果DL中存放退格键编码,在屏幕上便向左移一个字符位置,并使该位置成为空格。移动后光标停留在那里。如要显示字符A,可用下列几条指令调用: MOV DL,A MOV AH,2 INT 21H,6字符打印(5号功能) 5号功能子程序把DL中的字符(ASCII码)送入打印机接口,打印输出。功能调用为: MOV DL,A MOV AH,5 INT 21H 7字符串显示(9号功能) 9号功能子程序能在屏幕上显示多于一个的字符串。要显示的字符串必须先放在内存一数据区中,且字符串以美元符号作为结束标志。非显示字符,可以用它的ASCII码插入字符串中间。进行9号功能调用时,先把待显示的字符串首地址的段基值和偏移量分别存入DS和DX中。 在数据段中定义一个待显示符号串如: STRING DB “THIS IS A PROGRAM”,0AH,0DH,“”,则显示该符号串的指令为: LEA DX,STRING MOV AH,9 INT 21H 8取中断向量(35H号功能) 35H号功能把由AL指定的中断类型号的中断向量从中断向量表中取到ES:BX中。即必须把要取出的中断类型号N送给AL,调用35H功能后,与中断类型号N对应的中断向量则保存在ES:BX中。其调用示例如下: MOV AL,N MOV AH,35H INT 21H,9设置中断向量(25H号功能) 25H号功能把由AL指定的中断类型的中断向量DS:DX放置在中断向量表中。具体设置过程为:首先将要设置的中断类型号送AL,然后把要设置的中断服务程序的段地址和偏移量分别送DS、DX,最后再调用25H功能。典型的使用DOS功能调用存取中断向量的程序段如下: MOV AL,N ;取出并保存原中断向量 MOV AH,35H INT 21H PUSH BX,PUSH ES PUSH DS MOV AX,SEG INTERRUPT MOV DS,AX MOV DX,OFFSET INTERRUPT MOV AL,N MOV AH,25H INT 21H POP DS POP DS,恢复原中断向量 POP DX MOV AL,N MOV AH,25H INT 21H MOV AH,4CH ;返回DOS INT 21H INTERRUPT: ;中断服务程序 IRET ,10读出系统日期(2AH号功能) 本功能子程序的执行,将系统的年、月、日、星期的数据读出,并存入指定的寄存器中: CX 年(19802099) DH 月(112) DL 日(131) AL 星期(0星期日,1星期一等) 11设置系统日期(2BH功能) 调用本功能子程序时,必须在CX和DX中设置有效日期,其中,CX中存放年号(19802099),DH中存放月号(112),DL中存放日(131)。如果日期设置有效,待功能子程序返回时,(AL)=0,否则(AL)=0FFH。所以为了检查设置是否成功,通常在调用2BH号功能后检查AL中内容。,12读出系统时间(2CH功能) 本功能子程序从系统中可得到当时的时间:时、分、秒和百分秒,它们分别存放在CX和DX寄存器中: CH 小时 (023) CL 分 (059) DH 秒 (059) DL 百分秒(099) 13设置系统时间(2DH功能) 调用本功能子程序时,必须在CX和DX中设置有效时间(指定有关寄存器和数据范围与2C号功能相同)。如果设置时间有效,从功能子程序返回时,(AL)=0,否则(AL)=0FFH。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!