《微机原理:第四章 8086汇编语言程序设计》由会员分享,可在线阅读,更多相关《微机原理:第四章 8086汇编语言程序设计(89页珍藏版)》请在金锄头文库上搜索。
1、第四章第四章8086汇编语言程序设计汇编语言程序设计n几个基本概念几个基本概念n8086汇编语言的语句汇编语言的语句n8086汇编中的伪指令汇编中的伪指令n8086汇编中的运算符汇编中的运算符n汇编语言程序设计汇编语言程序设计n汇编语言程序设计实例汇编语言程序设计实例几个基本概念几个基本概念n汇编语言:助记符、符号地址、标号汇编语言:助记符、符号地址、标号n汇编语言源程序汇编语言源程序n汇编汇编n汇编程序:汇编程序:汇编语言汇编语言源程序源程序机器语言机器语言程序程序u分配存储区分配存储区u数制转换、计算表达式数制转换、计算表达式u检查源程序语法错误检查源程序语法错误例例编写汇编语言源程序编写
2、汇编语言源程序,将两个字节二进制数相加将两个字节二进制数相加.DATASEGMENT;定义数据段;定义数据段DATA1DB0F8H;被加数;被加数DATA2DB0C1H;加数;加数DATAENDS;数据段结束;数据段结束CODESEGMENT;定义代码段;定义代码段ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;初始化;初始化DSMOV SI,0;置;置SI初值为初值为0MOV AL,DATA2SI;取加数;取加数ADDDATA1SI,AL;与被加数相加;与被加数相加MOV AH,4CHINT21H;返回;返回DOSCODEENDS;代码段结束;
3、代码段结束ENDSTART;源程序结束;源程序结束4.18086汇编语言的语句汇编语言的语句汇编语言语句:汇编语言语句:指令性语句、指示性语句指令性语句、指示性语句1、指令性语句格式、指令性语句格式标标号号:助助记记符符操操作作数数1,操操作作数数2;注注释释例:例:LER:MOVAL,DATA2SI;取一;取一个数个数标号标号属性属性三种:三种:段值、段内偏移量、段值、段内偏移量、类型类型4.18086汇编语言的语句汇编语言的语句2、指示性语句格式、指示性语句格式名名字字伪伪指指令令操操作作数数1,操操作作数数2;注注释释例:例:DATA1DB0F8H,60H,3BH;被加数;被加数存储器操
4、作数存储器操作数属性属性三种:段值、段内偏移量、类型。三种:段值、段内偏移量、类型。4.28086汇编中的伪指令汇编中的伪指令4.2.1符号定义语句符号定义语句1、等值语句、等值语句格式:格式:符号名符号名EQU表达式表达式例:例:PORTEQU1234BUFFEQUPORT58MEMEQUDS:BP20HCOUNTEQUCXABCEQUAAA2、等号语句、等号语句格式:格式:符号名符号名=表达式表达式例:例:NUM34MOVCX,NUMNUM341与与EQU伪伪指指令令基基本本相相同同,主主要要区区别别在在于于它它可可以对同一个名字重复定义。以对同一个名字重复定义。4.2.2变量定义语句变量
5、定义语句格式:格式:符号名符号名DB/DW/DD操作数操作数1,操作数操作数21、定义一组数据、定义一组数据例例1:BUFF1DW1234H,0ABCDH,8EHBUFF2DB-1DH,6AH.MOVAX,BUFF1MOVBX,BUFF1+2MOVCL,BUFF2注意:注意:数据的属性数据的属性内存存储方式内存存储方式存储地址存储地址2、定义一串字符、定义一串字符例例2:STRDBWelcome!3、定义保留存储单元、定义保留存储单元例例3:SUMDW?,?4、复制操作、复制操作复制操作符复制操作符DUP例例4:ALL_ZERODB0,0,0,0,0用复制操作可改为:用复制操作可改为:ALL_
6、ZERODB5DUP(0)5、将已定义的地址存入内存单元、将已定义的地址存入内存单元例例5:LITDDCYCCYC:MOVAX,BX4.2.3段定义语句段定义语句1、格式:格式:段名段名SEGMENT定位类型定位类型组合类型组合类型类别类别段名段名ENDS只需要掌握只需要掌握段名段名SEGMENT段名段名ENDS堆栈段堆栈段SEGMENTSTACKSTACK2、段假设语句、段假设语句ASSUME段寄存器名:段名段寄存器名:段名,3、ORG伪指令、地址计数器伪指令、地址计数器$ORG伪指令格式:伪指令格式:ORG例:例: ORG 2000HORG 2000H JMP JMP $;当前存储单元偏移
7、地址当前存储单元偏移地址4、PUBLIC和和EXRTRN伪指令伪指令格式:格式:PUBLIC名字名字,表示本模块提供可被其他模块使用的名字表示本模块提供可被其他模块使用的名字格式格式:EXRTRN名字名字,表示本表示本模块用到其他模块定义的名字模块用到其他模块定义的名字(变量(变量或或标号)标号)4.2.4过程定义语句过程定义语句过程名过程名PROCNEAR/FARRET过程名过程名ENDPCALL 过程过程名名4.2.5结束语句结束语句1、END表示表示源代码结束源代码结束2、END标号标号表示表示源代码源代码结束,指出程序的第一条语句。结束,指出程序的第一条语句。4.38086汇编中的运算
8、符汇编中的运算符4.3.1常用运算符常用运算符1、算术运算符、算术运算符(加加)、(减减)、*(乘乘)、/(除除)、MOD(求余)求余)2、逻辑运算符、逻辑运算符AND、OR、XOR、NOT3、关系运算符关系运算符 EQ(相等)、相等)、NE(不等、)不等、)LT(小于)、小于)、GT(大于)、大于)、LE(小于等于)、小于等于)、GE(大于等于)。大于等于)。关系成立,全关系成立,全1关系不成立,全关系不成立,全0例:例:MOVDL,10HLT16MOVDL,0例:例:ANDAX,555GT222ANDAX,0FFFFH4、分析操作符、分析操作符1)SEG例:例:BUFFDW1234HMOV
9、AX,SEGBUFF2)OFFSET 例:例:MOVBX,OFFSETBUFFMOVDX,BUFF3)TYPE对于变量有对于变量有3种:种:1字节型;字节型;2字型;字型;4双字型双字型;对于标号有对于标号有2种:种:1NEAR(段内)段内)2FAR(段间)段间)例:例:BUFFDB20HMOVBX,TYPEBUFFMOVBX,014)LENGTH已已用用DUP说说明明的的变变量量,用用LENGTH可可得得到到此此变量的变量的个数个数。否则得到。否则得到1。5)SIZESIZETYPELENGTH例:例:BUFFDW10DUP(?)MOVCX,LENGTHBUFMOVCX,10MOVCX,SI
10、ZEBUFMOVCX,205、综合运算符(合成操作符)、综合运算符(合成操作符)1)PTR运算符运算符格式:格式:类型类型PTR表达式表达式例例:INCWORDPTRBXwxdw1234hmoval,byteptrwxmovah,byteptrwx+1movax,wx2)THIS操作符操作符格式:格式:THIS类型类型(或属性或属性)例:例:FIRSTEQUTHISBYTE SECONDDW100DUP(?)4.4汇编语言程序设计汇编语言程序设计什么是好的程序什么是好的程序什么是好的程序什么是好的程序? ?n n结构化、易读、易调试、易修改和扩充结构化、易读、易调试、易修改和扩充结构化、易读、
11、易调试、易修改和扩充结构化、易读、易调试、易修改和扩充n n执行速度快执行速度快执行速度快执行速度快n n占内存少占内存少占内存少占内存少4.4汇编语言程序设计汇编语言程序设计常用的汇编语言程序框架:常用的汇编语言程序框架:常用的汇编语言程序框架:常用的汇编语言程序框架: DATADATASEGMENTSEGMENT;定义数据段定义数据段定义数据段定义数据段VAL1DB12H,8EHVAL1DB12H,8EH;定义变量定义变量定义变量定义变量DATADATAENDSENDS;数据段结束数据段结束数据段结束数据段结束CODECODE SEGMENTSEGMENT;定义代码段定义代码段定义代码段定
12、义代码段ASSUMEDS:DATA,CS:CODEASSUMEDS:DATA,CS:CODE;段属性说明段属性说明段属性说明段属性说明START:MOVAX,DATASTART:MOVAX,DATA;初始化初始化初始化初始化DSDSMOVDS,AXMOVDS,AXMOVAX,4C00HMOVAX,4C00H;返回返回返回返回DOSDOSINT21HINT21HCODEENDSCODEENDS;代码段结束代码段结束代码段结束代码段结束ENDSTARTENDSTART;源程序结束源程序结束源程序结束源程序结束n特点特点u程序分段程序分段u语句由指令性和指示性语句组成语句由指令性和指示性语句组成u两
13、种程序框架两种程序框架框架一:框架一:DATASEGMENT;定义数据段定义数据段VAL1DB12H,8EH;定义变量定义变量DATAENDS;数据段结束数据段结束CODE SEGMENT;定义代码段定义代码段ASSUMEDS:DATA,CS:CODE;段属性说明段属性说明START:MOVAX,DATA;初始化初始化DSMOVDS,AX;填写代码填写代码MOVAX,4C00H;返回返回DOSINT21HCODEENDS;代码段结束代码段结束ENDSTART;源程序结束源程序结束框架二:框架二:DATASEGMENT;定义数据段定义数据段VAL1DB12H,8EH;定义变量定义变量DATAEN
14、DS;数据段结束数据段结束CODE SEGMENT;定义代码段定义代码段MAINPROCFARASSUMEDS:DATA,CS:CODE;段属性说明段属性说明START:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AX;填写代码填写代码RETMAINENDPCODEENDS;代码段结束代码段结束ENDSTART;源程序结束源程序结束4.4.1汇编语言程序设计基本步骤汇编语言程序设计基本步骤分析问题分析问题,建立模型,确定算法建立模型,确定算法绘制流程图绘制流程图确定变量与工作单元,编写程序确定变量与工作单元,编写程序检查和调试检查和调试4.4.2汇编语言程序的基本结构
15、汇编语言程序的基本结构1、顺序结构、顺序结构执行1执行2开始结束例例4-1DATASEGMENT;定义数据段定义数据段BLOCKDW0ABCDH;定义变量定义变量 BUFFDD? DATAENDS;数据段结束数据段结束CODESEGMENT;定义代码段定义代码段ASSUMEDS:DATA,CS:CODE;段属性说明段属性说明START:MOVAX,DATA ;初始化初始化DSMOVDS,AX(相关代码)(相关代码)MOVAX,4C00H;返回返回DOSINT21HCODEENDS;代码段结束代码段结束ENDSTART;源程序结束源程序结束相关代码:相关代码:MOVDX,BLOCKMOVAX,D
16、XANDAX,0F0FHANDDX,0F0FHMOVCL,4SHRDX,CLLEABX,BUFFMOVBX,ALMOVBX+1,DLMOVBX+2,AHLMOVBX+3,DH2、分支结构、分支结构例例4-2n实现实现数据段中定义变量的语句:数据段中定义变量的语句:MEMSDB8MEMDDB?代码段中相关的语句:代码段中相关的语句:MOVAL,MEMS;ALMEMSCMPAL,0JGENEXT;x0时转时转NEXTMOVAL,-1;否则将;否则将1送入送入ALJMPDONENEXT:JEDONE;为;为0时转时转DONEMOVAL,1;否则将;否则将1送入送入ALJMPDONEDONE:MOVM
17、EMD,AL方案一方案一MOVAL,MEMSCMPAL,0MOVAL,-1JLDONEMOVAL,1JG DONEMOVAL,0DONE:MOVMEMD,AL方案二方案二3、循环结构、循环结构 (1)初初始始化化部部分分:如如设设置置地地址址指指针针、计计数数器器、其其他他循循环环参参数的起始值等数的起始值等。(2)工工作作部部分分:循循环环所所要要完完成成的的具具体体操操作作。它它可可以以是是一一个个顺序程序、一个分支程序或另一个循环程序。顺序程序、一个分支程序或另一个循环程序。(3)修改部分:修改部分:如修改地址指针、其他循环参数等。如修改地址指针、其他循环参数等。(4)循环结束判断部分循
18、环结束判断部分(5)结束处理部分结束处理部分:如存储结果等。可以没有这部分。:如存储结果等。可以没有这部分。循环控制方法循环控制方法1)循环次数已知循环次数已知,用计数控制循环用计数控制循环。2)用条件控制循环用条件控制循环无无法法确确定定循循环环次次数数时时,可可用用某某种种条条件件来来确确定定是是否否结结束束循环。程序要是寻找控制条件以及对控制条件的检测。循环。程序要是寻找控制条件以及对控制条件的检测。 例例4-3:编程统计编程统计BUFF为首地址的缓冲区为首地址的缓冲区中负数的个数。中负数的个数。BUFFDB67H,9EH,-6AH,0ABH,6DHMEMDB?XORDL,DL;DL0L
19、EABX,BUFF;BX缓冲区首址缓冲区首址MOVCX,5;CX缓冲区长度缓冲区长度NEXT:MOVAL,BX;取一个数据到;取一个数据到ALADDAL,0;使数据影响状态标志位;使数据影响状态标志位JNSAA1;不为负,转;不为负,转AA1INCDL;为负;为负DL+1AA1:INCBX;移动指针;移动指针LOOPNEXT;循环控制;循环控制MOVMEM,DL;保存统计结果;保存统计结果例例4-5:在:在BLOCK存储区有一字符串,统计存储区有一字符串,统计“%”之前的字符个数之前的字符个数BLOCKDBFHJLIO689%yyuoCOUNTEQU$-BLOCKMEMDB0MOVSI,OFF
20、SETBLOCKMOVCX,COUNTLOOP1:MOVAL,SICMPAL,%JEDONEINCMEMINCSILOOPLOOP1DONE:MOVAH,4CH4、子程序、子程序Call proc1retproc1n实现方法实现方法u主程序有调用指令主程序有调用指令callu子程序有返回指令子程序有返回指令retn特点特点uCall指令与指令与ret缺一不可缺一不可u现场保护现场保护u入口出口参数设置入口出口参数设置例例4-6:编写编写AX*10AX子程序子程序n子程序编写子程序编写1、子程序组成、子程序组成t使用说明使用说明a、子程序功能子程序功能b、使用寄存器情况使用寄存器情况c、入口出口
21、参数入口出口参数t程序体程序体入口出口参数传递入口出口参数传递现场保护现场保护功能程序段功能程序段2、现场保护和入口出口参数传递、现场保护和入口出口参数传递t现场保护现场保护方案一:在子程序中保护方案一:在子程序中保护方案二:在主程序中保护方案二:在主程序中保护t参数传递参数传递寄存器传递寄存器传递变量传递变量传递堆栈传递堆栈传递;这是一个乘;这是一个乘10子程序子程序;使用寄存器;使用寄存器AX;入口:入口:AX,出口:出口:AXmul10procpushbx;保护现场保护现场pushfaddax,ax;2axmovbx,ax;2axbxaddax,ax;4axaddax,ax;8axadd
22、ax,bx;10axpopf;恢复现场恢复现场popbxretmul10endp功功能能程程序序段段主程序相关语句 MOVAX,XXCALLMUL10MOVYY,AX4.6汇编语言程序设计与上机调试汇编语言程序设计与上机调试4.6.1程序设计实例程序设计实例例例4-7:100字型数据加一字型数据加一例例4-8:100个压缩个压缩BCD码求和码求和例例4-9:两个:两个20个字节的无符号数组对应元素相加。个字节的无符号数组对应元素相加。例例4-10:交换:交换AL的高四位与低四位的高四位与低四位例例4-11:将:将AX中的内容反向存入中的内容反向存入BX例例4-12:将以:将以“$”为结束符的字
23、符串中的小写字母为结束符的字符串中的小写字母变为大写字母变为大写字母例例4-13:16进制到进制到10进制的转换进制的转换例例4-14:10进制到进制到16进制的转换进制的转换例例4-15:数字:数字09明码转换为密码明码转换为密码例例4-16:7段代码转换段代码转换位码位码段码段码数码管的段码和位码举例:例例1:显示字符:显示字符“1”。(共阴极数码管)。(共阴极数码管)n位码接位码接低电平。低电平。n段码按照段码按照hgfedcba的顺序,的顺序,为为“00000110”。例例2:显示字符:显示字符“A”。(共阳极数码管)。(共阳极数码管)n位码接高电平。位码接高电平。n段码按照段码按照h
24、gfedcba的顺序,的顺序, 为为“10001000”。LEDLED字型显示代码表字型显示代码表 2. 2. 显示原理显示原理显示显示段段符符号号十六进制代码十六进制代码dpgfedcba共阴极共阴极共阳极共阳极0123456789AbCdEFHP0000000000000000000011111011110111111000111011111011111010001010111111111011011011011110001101111111110100101111100111100100111011011111101011013FH06H5BH4FH66H6DH7DH07H7FH6FH7
25、7H7CH39H5EH79H71H76HF3HC0HF9HA4HB0H99H92H82HF8H80H90H88H83HC6HA1H86H8EH89H8CH查找显示代码程序段查找显示代码程序段DISTBDB3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB7FH,6FH,77H,7CH,39H,5EH,79H,71HDISBUFDB2,0,1,7。LEABX,DISTBLEASI,DISBUFMOVCX,4MOVAL,SIXLAT输出显示代码(段码)输出显示代码(段码)输出位码输出位码移位、循环移位、循环例例4-17:将:将数据段数据段偏移地址偏移地址STG1、长度、长度COUN
26、T的的字型字型数据块传送到偏移地址数据块传送到偏移地址STG2的存储区。的存储区。DS、ES相同相同用用REPMOVSW例例4-18:将:将BLOCK存储区的存储区的60个带符号字节型个带符号字节型数据按正、负分别存储在数据按正、负分别存储在BUFF1、BUFF2.例例4-19:在一组带符号字型数据中找出最大值。:在一组带符号字型数据中找出最大值。LEASI,BLOCK;(SI)数据块首址数据块首址MOVCX,COUNT;(CX)数据块长度数据块长度MOVAX,SI;取一个到;取一个到AXDECCX;(CX)(CX)1AA1:ADDSI,2;地址;地址+2CMP AX,SI ;与下个数比较;与
27、下个数比较JGE AA2;大于下个数,则转;大于下个数,则转AA2MOVAX,SI;否则,存下个数;否则,存下个数AA2:LOOPAA1;CX减减1,若不等于零,转,若不等于零,转AA1;存存AX中的最大数中的最大数4.6.2DOS功能调用与子程序设计功能调用与子程序设计n微机系统微机系统为汇编用户提供了两个程序为汇编用户提供了两个程序接口:接口:uDOS系统功能系统功能调用调用uROM中的中的BIOS。n二者由二者由一系列的服务子程序构成一系列的服务子程序构成,通过,通过软中断软中断指令指令INTn调用调用和和中断返回指令中断返回指令IRET返回。返回。n便于程序设计人员使用便于程序设计人员
28、使用系统的硬件,尤其是系统的硬件,尤其是I/O的使用与管理。的使用与管理。 系统功能调用系统功能调用系统功能子程序可分为四个主要方面:系统功能子程序可分为四个主要方面:(1)磁盘的读磁盘的读/写及控制管理。写及控制管理。(2)内存管理。内存管理。(3)基本输入基本输入/输出管理输出管理(键盘、打印机、显示器键盘、打印机、显示器)。(4)其他管理其他管理(如时间、日期等如时间、日期等)。系统已将所有子程序按顺序编号,称为调用号。系统已将所有子程序按顺序编号,称为调用号。使用时一般需要经过以下三个步骤:使用时一般需要经过以下三个步骤:(1)子程序的入口参数送相应的寄存器。子程序的入口参数送相应的寄
29、存器。(2)子程序编号送子程序编号送AH。(3)发出中断请求:发出中断请求:INT21H(系统功能调用指令系统功能调用指令)。键盘和显示器的键盘和显示器的DOS调用调用调用号调用号功功能能入入口口参参数数出出口口参参数数1键入并显示一个字键入并显示一个字符符键入字符的键入字符的ASCII码在码在AL中中2显示器显示一个字显示器显示一个字符符DL中置输出字符的中置输出字符的ASCII码码5打印机打印一个字打印机打印一个字符符DL中置输出字符的中置输出字符的ASCII码码8键盘输入一个字符键盘输入一个字符键入字符的键入字符的ASCII码在码在AL中中9显示器显示一个字显示器显示一个字符串符串DS:
30、DX置字符串首址,置字符串首址,字符串以字符串以$结束结束10(0AH)键入并显示字符串键入并显示字符串DS:DX置字符串首址,置字符串首址,第第1单元置允许键入的字单元置允许键入的字符数符数(含一个回车符含一个回车符)键入的实际字符数在键入的实际字符数在第第2单元中,键入的字单元中,键入的字符从第符从第3单元开始存放单元开始存放11(0BH)检测有无键入检测有无键入有键入有键入ALFFH,无键入无键入AL01.1号(键盘输入单字符)号(键盘输入单字符) 输入参数:无输入参数:无输出参数:输出参数:AL=ASCII码码扫扫描描键键盘盘,等等待待键键入入。有有键键按按下下,将将相相应应字字符符的
31、的ASCII码码值值读读入入,若若是是CtrlBreak,则则退退出出程程序序执执行行;否否则则将将键值送入键值送入AL寄存器,同时将这个字符显示在屏幕上。寄存器,同时将这个字符显示在屏幕上。2.2号(屏幕显示单字符)号(屏幕显示单字符)输入参数:输入参数:DL=ASCII码码输出参数输出参数:无无显示器显示其显示器显示其ASCII码值放入码值放入DL中的字符。中的字符。例例4-21:键键盘盘输输入入两两个个一一位位十十进进制制数数,求求和和并并在在屏屏幕显示。幕显示。START:MOVAH,1INT21HMOVBL,ALINT21HADDAL,BLAAAMOVDL,ALADDDL,30HMO
32、VAH,2INT21H3.9号(屏幕显示字符串)号(屏幕显示字符串)输入参数:输入参数:DS:DX=字符串缓冲区首地址字符串缓冲区首地址输出参数输出参数:无无显示器显示一个字符串。字符串以显示器显示一个字符串。字符串以“$”作为结束标志。作为结束标志。DATA SEGMENTBUFFDBHOWDOYOUDO?,0DH,0AH,$DATA ENDSCODESEGMENTMOV AX,DATAMOV DS,AXMOV DX,OFFSETBUFFMOV AH,9INT21HCODEENDS4.10号(键盘输入字符串)号(键盘输入字符串)输入参数:输入参数:DS:DX=输入缓冲区首地址输入缓冲区首地址
33、输出参数输出参数:DS:DX=输入缓冲区首地址输入缓冲区首地址要事先定义一个缓冲区,要事先定义一个缓冲区,第一个字节指出第一个字节指出缓冲缓冲区能容纳的字符个数;区能容纳的字符个数;第二个字节保留,用于填写实际输入的字符个数;第二个字节保留,用于填写实际输入的字符个数;第三个字节开始存放从键盘上接收的字符串。第三个字节开始存放从键盘上接收的字符串。BUFDB50;数据区长度;数据区长度DB?;保留,实际输入的字符个数;保留,实际输入的字符个数DB50DUP(?);定义;定义50个字节存储空间个字节存储空间MOV AX,DATAMOV DS,AXMOV DX,OFFSETBUFMOV AH,10
34、INT 21H 6.4CH(过程终止)过程终止)MOVAX,4C00H INT 21H结束当前程序,返回调用它的程序结束当前程序,返回调用它的程序常用系统功能调用应用举例常用系统功能调用应用举例例例利用利用DOS系统功能调用实现人机对话。系统功能调用实现人机对话。在屏幕上显示一行提示信息,然后接收用户从键盘输入的在屏幕上显示一行提示信息,然后接收用户从键盘输入的信息并将其存入内存数据区。信息并将其存入内存数据区。DATA SEGMENTPARS DB100;定义输入缓冲区;定义输入缓冲区DB?DB100DUP(?)MESGDBWHATISYOURNAME? ;要显示的信息;要显示的信息DB$;
35、提示信息结束标志;提示信息结束标志DATAENDSSTACKSEGMENTPARASTACKSTACKDB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKBEGIN:MOVAX,DATA MOVDS,AXDISP:MOV DX,OFFSETMESG MOV AH,9;调用显示功能;调用显示功能INT 21HKEYBD:MOV DX,OFFSETPARSMOV AH,10;调用键盘功能;调用键盘功能INT21HMOVAX,4C00HINT21HCODEENDSENDBEGIN BIOS中断调用中断调用BIOS是是固固化化在在R
36、OM中中的的一一组组I/O驱驱动动程程序序,它它为为系系统统各各主主要要部部件件提提供供设设备备级级控控制制,还还为为汇汇编编语语言言程程序设计者提供了字符序设计者提供了字符I/O操作。操作。BIOS有如下特点:有如下特点:调用调用BIOS中断程序运行速度快,功能更强;中断程序运行速度快,功能更强;DOS的的中中断断功功能能只只是是在在DOS环环境境下下适适用用,而而BIOS功能调用不受任何操作系统的约束;功能调用不受任何操作系统的约束;某些功能只有某些功能只有BIOS具有。具有。键盘服务程序键盘服务程序键盘服务程序的中断类型号为键盘服务程序的中断类型号为16H,用,用INT16H调用。软中断
37、调用。软中断INT16H服务程序有三个功能,功能号分别为服务程序有三个功能,功能号分别为0、1、2。INT16H的功能的功能功功能能号号功功能能出出口口参参数数0从键盘读字符从键盘读字符键入字符的键入字符的ASCII码在码在AL中中1检测键盘是否键入字符检测键盘是否键入字符键入字符键入字符ZF=0,未键入字符,未键入字符ZF=12读键盘各转换键的当前状态读键盘各转换键的当前状态各转换键的状态在各转换键的状态在AL中中显示器服务程序显示器服务程序显显示示器器服服务务程程序序的的中中断断类类型型号号为为10H,用用INT10H调调用用。软软中断中断INT10H服务程序有服务程序有16个功能,功能号
38、为个功能,功能号为015。INT10H的功能的功能 7.子程序设计子程序设计例例4-25用子程序调用形式,从键盘输入用子程序调用形式,从键盘输入4位位16进进制数。制数。子程序名:子程序名:ZH功能:转换功能:转换ASCII码为二进制数码为二进制数入口参数:入口参数:AL出口参数:出口参数:ALCODESEGMENTASSUMECS:CODEBEGIN:MOVCX,4MOVDX,CXMOVBX,0RE1:MOVAH,1INT21HCALLZHSHLBX,CLADDBX,ALDECDXJNZRE1;为为0,结束,结束MOVAX,4C00HINT21HZHPROCCMPAL,9JBA2CMPAL,
39、aJBA1SUBAL,20HA1:SUBAL,07HSUBAL,30H RETZHENDPCODEENDSENDSTART4.6.3汇编语言程序上机调试汇编语言程序上机调试1.编辑:输入汇编语言源程序编辑:输入汇编语言源程序(扩展名为扩展名为.ASM)。2.汇编:把源程序转换为目标程序汇编:把源程序转换为目标程序(扩展名为扩展名为.OBJ)。汇汇编编过过程程会会指指出出语语法法错错误误,修修改改后后重重新新汇汇编编,直直到到没没有错误为止。有错误为止。3.连连接接:把把目目标标程程序序与与库库文文件件或或其其他他目目标标文文件件连连接接在一起形成可执行文件在一起形成可执行文件(扩展名为扩展名为.EXE)。4.运行程序。运行程序。作业:n n3n n4n n7