版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章汇编语言程序设计
本章学习目标•了解汇编语言的基本知识和特点•熟悉汇编语言的程序结构、段定义以及语句的格式•掌握汇编语言常用伪指令的使用方法•熟练掌握汇编语言程序设计的基本方法:顺序结构、分支结构、循环结构和子程序结构•掌握常用的系统功能的调用方法4.1程序设计语言概述程序设计语言通常分为3类:机器语言(MachineLanguage)汇编语言(AssemblerLanguage)高级语言(HighLevelLanguage)1.机器语言指令系统是指特定计算机上机器指令的集合。机器指令是指用二进制编码的指令,以表示计算机所要进行操作类型及操作对象。机器语言是计算机唯一能识别的语言,只有用机器语言描述的程序,计算机才能直接执行。2.汇编语言以助记符描述指令。指令和伪指令的集合及其程序设计规则便构成了汇编语言。用汇编语言编写的程序就是汇编语言源程序。3.高级语言机器语言和汇编语言都是面向机器的,是低级语言。高级语言在程序设计的简易性与代码的可移植性等方面有了质的飞跃。用高级语言编写的源程序必须经过编译和连接,将其转变为可执行程序才可以在计算机上运行。4.汇编与连接1)汇编程序汇编是把汇编语言源程序翻译成机器语言描述的目标程序的过程。汇编程序是完成汇编任务的程序。2)连接程序连接程序的主要功能是实现多个目标文件及库文件的连接,形成可执行程序。从汇编语言源程序到可执行程序的生成过程:汇编语言源程序汇编目标程序连接可执行程序汇编语言的上机处理过程汇编语言源程序编辑EDIT汇编语言源文件
.ASM汇编MASM机器语言目标文件
.OBJ连接LINK机器语言执行文件
.EXE执行结果4.2汇编语言源程序的结构与语句格式;sampleprogramdisplaymessageSTACKSEGMENTPARASTACK‘STACK’DB1024DUP(0);开辟堆栈区STACKENDSDATASEGMENTMESSAGEDB‘THISISASAMPLEPROGRAM.’DB0DH,0AH,’$’;定义变量,开辟存储单元DATAENDSCODESEGMENT;定义代码段,存放代码ASSUMECS:CODE,DS:DATA,SS:STACKSTARTPROCFARPUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AX;初始化DSLEABX,MESSAGELOOP1:CMPBYTEPTR[BX],’$’JELOOP2MOVAH,2MOVDL,[BX]INT21HINCBXJMPLOOP1LOOP2:RET;返回DOSSTARTENDP;过程定义结束CODEENDS;代码段结束ENDSTART;整个汇编程序结束标准序,以便返回DOS调用2号DOS功能,显示输出字符1.汇编语言源程序的段定义格式:segment-nameSEGMENT…segment-nameENDS其中段内部分,对于DS、ES和SS来说,一般是存贮单元的定义、分配等伪操作;对于代码段则是指令及伪操作。
此外,还必须在代码段的起始处,明确段和段寄存器的关系,用ASSUME伪指令来实现,其格式为:
ASSUMEassignment,…,assignment其中assignment说明分配情况,其格式为:段寄存器名:段名称如:ASSUMECS:CODE,DS:DATA,SS:STACK其中段寄存器名必须是CS、DS、ES和SS中的一个,而段名则必须是由SEGMENT定义的段中的段名。2.汇编语言源程序的结构特点汇编语言源程序的基本结构是段,一个汇编语言源程序由若干个代码段、数据段、附加段和堆栈段组成。段之间的顺序可以随意安排,通常数据段在前,代码段在后。任何可执行汇编语言程序至少要有一个代码段,通常还可能有数据段和堆栈段。整个源程序必须以END语句来结束,后面的标号表示该程序执行时的起始处。每个源程序在代码段中都必须含有返回到DOS的指令语句。其一般结构如下:
SSEGSEGMENT;STACK〈堆栈段的内容〉SSEGENDSDSEGSEGMENT;DATA〈数据段的内容〉DSEGENDSCSEGSEGMENT;CODE〈代码段的内容〉CSEGENDSEND〈启动标号〉对于一般程序来说,定义太多的段只会增加程序设计的复杂性,通常需要一个代码段、一个数据段和一个堆栈段,有时可包含一个附加段。1)返回DOS的方法(1)标准序方法:将用户程序中的主程序定义为FAR过程,在主程序的开始处将程序段前缀区PSP所在段的段地址DS/ES保存进栈,然后将0000H的偏移地址压入进栈。PSP主要存放用户程序的相关信息,开始处存放一条软中断指令:INT20H,功能是返回到DOS。(2)非标准序方法:不定义主程序为FAR过程,并去掉标准序部分,只在代码段结束之前增加两条语句:MOVAH,4CHINT21H
调用4CH号的DOS系统功能。CODESEGMENT;定义代码段,存放代码ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AX;初始化DSLEABX,MESSAGELOOP1:CMPBYTEPTR[BX],’$’JELOOP2MOVAH,2MOVDL,[BX]INT21HINCBXJMPLOOP1LOOP2:MOVAH,4CHINT21H;返回DOSCODEENDS;代码段结束ENDSTART;整个汇编程序结束调用2号DOS功能,显示输出字符2)设置段寄存器的初值汇编语言源程序经过汇编再链接时,操作系统首先为用户程序建立程序段前缀区(PSP),长度为256个字节。将用户程序定位于PSP的下方,并设置DS和ES的值,指向PSP的开始处,然后设置CS的值为用户程序代码段的段基值,IP设置为第一条指令在代码段内的偏移地址,最后根据堆栈段设置SS和SP的值。(1)CS与IPCS与IP的初值不能在程序中设置,由系统自动设置为END后指定的起始地址。(2)DS和ESDS和ES的初值必须在程序中设置。设置方法如下:MOVAX,SEG_NAMEMOVDS,AX(3)SS与SPSS与SP初值的设置方法有下列两种:在程序中显示设置,类似于DS,例如:MOVAX,SSEGMOVSS,AXMOVSP,ST_TOP若堆栈段定义时给出了参数STACK,则链接器LINK自动将SS:SP指向栈底;若未定义堆栈段,则由系统指定堆栈,SS:SP也由系统自动设置。3.汇编语言的语句格式每个语句可以由4项组成,格式如下:[name]operation[operand][;comment]即:[名字项]操作项 [操作数项][;注释项]
1)名字项源程序中用下列字符表示名字:字母:A~Z或a~z;数字:0~9;专用符号:?、@、$、_等;必须以字母开头。一般来讲,名字项可以是标号、变量、常量、过程名、段名。2)操作项操作项可以是指令、伪指令或宏指令的助记符。3)操作数项操作数项由一个或多个表达式组成,多个操作数项之间一般用逗号分开。4)注释项注释项用来说明一段程序或一条或几条语句的功能,它是可有可无的。4.语句中的操作数可分为四类:常量、寄存器、存储器、表达式。1)常量操作数注意:十六进制数的第一个数字必须在0~9之间,如:ABH在程序中必须写作0ABH;字符串常量用单引号括起来的,其值为字符的ASCII码值,如:‘AB’的值为4142H。2)存储器操作数(1)标号在代码段定义,后面跟冒号:。标号是某条指令的符号地址。它有三种属性:段、偏移及类型。(2)变量在除代码以外的其他段中定义,后面不跟冒号。变量是数据存储单元的符号地址。它也有段、偏移及类型三种属性。(3)标号与变量的三种属性①段属性:段基址,即所在段的段地址②偏移属性:段内偏移量,即相距所在段起始地址的字节数③类型属性:标号的类型是指在本段内引用还是在其他段内引用的,类型有近标号、远标号。
变量的类型是该存储单元的字节数,类型有字节、字、双字等。3)表达式操作数由各种操作数、运算符和操作符组成。(1)数值表达式:由常量、运算符连接而成。在汇编时计算得到一个数值,只有大小而无其他属性。如:MOVAX,8+9MOVAX,13MOD3(2)地址表达式:由常量、变量、标号、寄存器以及运算符组成,其值表示存储器地址。具有段、偏移和类型属性。如:MOVAL,COUNT+4MOVAX,[BX+7*8]MOVAX,COUNT[BX]注意:对标号与变量只可以使用加、减运算符。当标号或变量+常量,结果仍为标号或变量,其类型和段地址属性不变。*5.汇编语言的运算符和操作符1.算术运算符主要包括+、-、*、/、MOD和[]等。其中:expr1[expr2]等价于[expr1+expr2]。2.逻辑运算符主要包括AND、OR、XOR、NOT、SHR及SHL。3.关系运算符主要包括EQ(相等时为真)、NE(不相等时为真)、LT(小于时为真)、GT(大于时为真)、LE(小于或等于时为真)、GE(大于或等于时为真)。操作符包括分析操作符和合成操作符。[例]在数据段定义首地址为A的10个字符,将这10个字符以相反次序传送到附加段首地址为B的内存单元中。DSEGSEGMENTADB‘1234567890’DSEGENDSESEGSEGMENTBDB10DUP(?)ESEGENDSCSEGSEGMENT
ASSUMECS:CSEG,DS:DSEG,ES:ESEGSTART:MOVAX,DSEG MOVDS,AX
MOVAX,ESEG MOVES,AXLEASI,ALEADI,B ADDDI,9 MOVCX,10MOVE:CLD LODSB STD STOSB LOOPMOVE
MOVAH,4CH INT21HCSEGENDSENDSTART4.3汇编语言的伪指令语句指令是在程序运行期间由CPU执行的,汇编后由对应的机器代码所取代。伪指令是不可执行的,它只是在源程序汇编期间由汇编器处理的命令,用来指示汇编器为数据分配内存空间,或者为汇编器提供源程序结束或段定义等信息。
1.符号定义伪指令基本形式为:符号名EQU表达式符号名=常数表达式功能:给表达式指定一个等价的符号名。说明:(1)=后的表达式只能是常数,对于字符或字符串,在汇编时按ASCII码值处理。(2)EQU后的表达式可以是数值、字符串,甚至可以是寄存器名、指令的助记符等。如:CNTEQUCX(3)EQU不能重复定义,而“=”伪指令可以重复定义,其作用域从定义点到重新定义之前。2.变量定义伪指令用来为数据分配内存空间,并设置相应内存单元的初始值,其形式为:[变量名]变量定义符操作数[,…,操作数]变量名是一个符号地址,表示其后操作数的首地址,多个操作数构成一个数组。变量名是程序员给出的标识符,为可选项,给出变量名就可以按变量名存取其对应的内存单元。变量定义符指定变量的类型,主要有下列几种:(1)DB(DefineByte):定义字节,后面的每个操作数占1个字节。(2)DW(DefineWord):定义字,后面的每个操作数占1个字。(3)DD(DefineDWord):定义双字,后面的每个操作数占2个字。(4)DQ(DefineQWord):定义四字,后面的每个操作数占4个字。(5)DT(DefineTbyte):定义十字节,后面的每个操作数占10个字节。变量有三个属性:类型属性、偏移地址、段地址属性。[例]1)XDB41HYDB41H,42H,43H,44H2)RESULTDW?3)ALL_ZERODB4DUP(0)ALL_ZERODB0,0,0,0W_TABLEDW10HDUP(?),20HDUP(7)B_TABLEDB5DUP(12H,45H)ARRAYDB2DUP(1,3,2DUP(?),6)4)STRINGDB‘HELLO’CHAR1DW‘AB’CHAR2DB‘AB’CHAR3DW‘AB’,’CD’5)XXDWSTARTYYDDSTART
6)SUMDW10INCSUM注意:(1)变量定义伪指令语句中操作数可以是数值表达式、字符串、地址表达式、?(只保存内存空间,未定义初始值);(2)DUP子句,其格式为:重复次数DUP(操作数,…,操作数),DUP子句可以嵌套;(3)定义一个数组,数据定义符表示每个元素的数据类型;(4)当操作数是标号或变量时,可用DW或DD伪指令将标号或变量的偏移地址或逻辑地址来初始化存储器。为了调用或者修改变量或标号的属性,要用到操作符:1)分析操作符它有TYPE、LENGTH、SIZE、OFFSET、SEG。运算对象是存储器操作数,返回变量或标号的属性值。故也称为数值返回操作符。(1)TYPE格式:TYPEVariable或label如果是变量,则汇编程序将回送该变量的以字节数表示的类型,DB为1,DW为2,DD为4,DQ为8,DT为10。如果是标号,则汇编程序将回送代表该标号类型的数值:NEAR为-1,FAR为-2。(2)LENGTH格式为:LENGTHVariable对于变量中使用DUP的情况,汇编程序将回送用DUP重复定义的数据项总数。而对于其他情况则回送1。(3)SIZE格式为:SIZEVariable其汇编的值为LENGTHVariable*TYPEVariable,即回送直接分配给该变量的总的字节数。(4)OFFSET格式为:OFFSETVariable或label汇编程序将回送变量或标号的偏移地址值。(5)SEG格式为:SEGVariable或label汇编程序将回送变量或标号的段地址值。[例]BUFF1DW100DUP(?)
则:TYPEBUFF1=2LENGTHBUFF1=100SIZEBUFF1=200MOVBX,OFFSETBUFF12)合成操作符主要包括PTR、段操作符、SHORT、THIS、LABEL
(1)PTR格式为:typePTRVariable或label
用来临时对已分配的存储操作数赋予另一种类型属性,使该操作数具有另一种类型。其中:type可以是BYTE、WORD、DWORD、NEAR、FAR。[例]ARRAYDB0,1,2,3,4MOVBX,WORDPTRARRAYMOVBX,WORDPTRARRAY+2
ARRAY2DW0,1,2,3,4MOVCL,BYTEPTRARRAY2[6]
JMPNEARPTRLABEL1JMPFARPTRLABEL1(2)段操作符:用来表示一个标号、变量或地址表达式的段地址属性。如:MOVAX,ES:[BX+SI](3)SHORT用来修饰JMP指令中转向地址的属性,指出转向地址是在下一条指令地址(-127~+128)个字节范围之内。如:JMPSHORTLABEL1*(4)LABEL格式为:Variable或label
LABELtype用来为当前存储单元定义一个指定类型的标号或变量。[例]WARRAYLABELWORDBARRAYDB1,2,3,4MOVAL,BARRAY+1
MOVAX,WARRY+1*(5)THIS格式为:Variable或label
EQUTHIStype[例]WARRAYEQUTHISWORDBARRAYDB1,2,3,43.段定义伪指令1)SEGMENT与ENDS伪指令,格式:段名SEGMENT[定位类型][组合类型][‘类别名’]〈语句序列〉段名ENDS功能:从段名代表的段基值开始定义一个段。其中的定位类型、组合类型和‘类别’一般都可省略,若不省略时各项的顺序不能变。*①定位类型:连接时用于指定该段应开始于什么样的物理地址。可选择下列4种之一:BYTE:从当前可用的任一地址开始;WORD:从当前可用的偶数地址开始;PARA(缺省):从当前可用的XXXX0H(16的倍数)开始PAGE:从当前可用的XXX00H(256的倍数)开始。*②组合类型:连接时用于指定同名的各段之间的组合方式。可选择下列6种之一:
PUBLIC、
STACK、COMMON、MEMORY、
AT表达式、NONE(缺省)
若省略组合类型或说明为NONE类型,则表示各个段不组合,各有自己的段基值。对堆栈段,必须用STACK类型说明,不能省略。*③‘类别’:是要将组合后的各段按‘类别’分类存放,同类别的段将被相邻地放在一起。
‘类别’是由用户定义的、用一对引号括起来的、长度不超过40个字符的名字(标识符)。2)指定地址伪指令ORG用来强行指定偏移地址计数器的当前值,以改变在ORG语句后的代码或数据块在段内存放的偏移地址。格式:①ORG表达式如果表达式的值为n,则ORG伪操作可以使下一个字节的偏移地址成为表达式的值n。其中表达式必须是一个可计算得到正整数的,数值范围在0~65535的表达式。②ORG$+表达式将偏移地址计数器的当前值$加上表达式后送入偏移地址计数器。[例]ORG3500H
XDB10H,20HORG$+5YDB40H,50HCOUNTEQU$-Y
DATASEGMENTORG3500HINPUTDB8DUP(0)ORG3510HOUTPUTDB8DUP(0)DATAENDS*4.程序模块定义伪指令一个*.ASM源文件,作为一个模块。一个任务的汇编源程序可由多个模块组成。模块定义伪指令的格式:NAMEmodule_name
;为模块命名...;语句END[启动标号]其中:为模块命名NAME语句可以省略。END语句表示此源文件到此结束。启动标号可以是标号、主过程名,指示运行整个程序的起始地址。如果多个程序模块相连接,则只有主程序模块要使用标号,其他子程序模块则只用END而不必指定启动标号。CODESEGMENTassumecs:codestart:MOVCX,10…callfarptr
myadd…CODEENDSendstartCODE1SEGMENT
assumecs:code1
myaddprocfar
ret
myadd
endp
CODE1ENDSend5.过程定义伪指令(1)伪指令:PROC和ENDP,格式:
Proc_NamePROC[NEAR]/FAR;说明过程开始
…;过程体RETProc_NameENDP;说明过程结束说明:①这两条伪指令必须成对出现。②Proc_Name为过程名,用以标识不同的过程。过程名的命名原则与标号相同。③过程体即为一段独立的程序,是完成子程序功能的程序主体。④NEAR和FAR分别指出所定义的过程是近过程还是远过程。近过程只允许段内调用,只允许本段内程序调用。远过程可由任何代码段中的程序调用。缺省时,默认所定义的过程为近过程。(2)调用指令CALL(3)返回指令RET过程体中可以有多个RET语句,程序执行到哪个RET语句就结束过程的调用,返回到被调用处。[例]在代码段CODE定义两个过程SUB1和SUB2,并使SUB1只为本段程序调用,SUB2可为其他代码段程序调用。程序的过程定义部分如下所示:CODESEGMENTassumecs:codeSUB1PROCNEAR
…RETSUB1ENDPSUB2PROCFAR
…RETSUB2ENDPSTART:…CALLSUB1CALLSUB2…CODEENDS
ENDSTARTCODESEGMENTassumecs:codeSTART:…CALLSUB1CALLSUB2…SUB1PROCNEAR
…RETSUB1ENDPSUB2PROCFAR
…RETSUB2ENDPCODEENDSENDSTART4.4汇编语言程序设计一般说来,编制一个汇编语言程序的步骤如下:(1)分析问题确定算法。这一步是能否编制出高质量程序的关键,找出合理的算法及适当的数据结构。(2)画出程序框图和流程图。画图可以从粗到细把算法逐步地具体化。(3)分配内存工作单元和寄存器。这一步是汇编语言程序设计的重要特点之一。(4)根据框图编写程序。(5)上机调试程序。采用结构化、模块化的程序设计方法,程序的基本结构有:顺序、循环、分支结构形式。1.顺序结构顺序程序,是相对于分支程序和循环程序而言的。因此,可以说顺序程序是既不包含分支,又不包含循环的程序。顺序程序是从第一条指令开始,按其自然顺序,一条指令一条指令地执行,在运行期间,CPU既不跳过某些指令,也不重复执行某些指令,一直执行到最后一条指令为止。
[例]从键盘键入0至9中任一自然数X,求其平方值。求一个数的平方值可以利用乘法和查表方法来实现,在本例中利用查表方法来实现。EXP1.ASM[分析]内存存储单元分配:字节变量XX存放键入的自然数X,字节变量YY存放X的平方值,字节表TABLE存放0~9的平方值。从表结构可知,X的平方值在表中的存放地址与X有如下对应关系:[TABLE+X]=X的平方值。
2.分支结构1)分支程序结构可以有两种形式,如图所示判断条件YN判断条件……2)分支程序设计分支结构程序设计的关键在于如何判断分支的条件。①利用比较和跳转指令实现分支:根据比较操作结果影响的标志位状态,正确地选用条件转移指令。[例]变量X的值:-128~127,根据X的正负符号,给Y赋值。[分析]只需将X与0进行带符号数的比较,可以用JGE/JLE等。EXP3.ASM*②利用跳转表实现分支:跳转表内存放的一系列分支程序的入口地址、或是跳转至各分支程序的指令等。程序按一定的条件寻址到跳转表中相应的项,实现分支转移。[例]设有8种产品的产品编号分别为:0、1、2、...、7,各产品的加工子程序名分别为:SBR0、SBR1、...、SBR7。试编写由产品编号转至相应的加工子程序处理的程序。EXP5.ASMEXP52.ASM3.循环程序1)循环程序的组成:(1)循环初值部分(2)工作部分:即需要重复执行的程序段,即循环体。(3)修改部分:按一定规律修改操作数地址及循环计数器。(4)控制部分:按给定的循环次数或特定条件,判断是否结束循环。2)循环程序的两种形式:(1)先执行后判断(2)先判断后执行循环初值部分工作部分参数修改部分循环结束?NY循环初值部分工作部分参数修改部分循环结束?NY3)循环控制方法①计数控制:当循环次数已知时,通常使用计数控制法。如:MOVCX,n…;循环初值部分LP1:…;工作部分…;修改部分DECCX;控制部分
JNZLP1②条件控制:有些情况下,循环次数事先无法确定,但它与某些条件有关。这些条件可以通过指令来测试是否结束循环。
③状态控制:根据实时检测到的状态信息来控制循环。[例]统计字节数据块:-1、3、-5、...中负数的个数。[分析]:对数据块的每个操作数进行查看符号位,如果符号位为1,则统计变量累加1。EXP6.ASM[例]统计AX寄存器操作数中,位为1的个数,并将结果存放在CX寄存器中。EXP7.ASM[分析]:查看每一位是否为1,统计位1的个数,当剩余未查看的位都是0时,就不用逐个查看了。故用“先判断后执行”的形式。4)单重循环与多重循环程序设计所谓单重循环指循环体内不再包含循环结构。多重循环即循环体内套有循环。设计多重循环程序时,可以从外层循环到内层循环一层一层地进行。
[例]软件延时程序。
SOFTDLYPROCMOVBL,10;4TDELAY:MOVCX,2801;4TWAIT:LOOPWAIT;17TOR5TDECBL;3TJNZDELAY;16TOR4TRET;20TSOFTDLYENDP*延时时间t的计算:{4+{10*[4+(2801*17-12)+3+16]-12}+20}*T4.子程序设计1)子程序,也叫过程:完成特定功能的程序段。在下面情况下设计子程序:(1)多次重复使用的程序段定义为子程序(2)中断服务程序一定是子程序,只是返回指令是IRET*2)与子程序有关的术语:(1)子程序的嵌套在一个子程序的定义体中可以去调用另一个子程序,这种情况就称为子程序的嵌套。嵌套的层次不限,其层数称为嵌套深度。(2)递归子程序在子程序嵌套的情况下,如果一个子程序调用的子程序就是它自身,这就称为递归调用。这样的子程序称为递归子程序。例如阶乘函数,常常使用递归子程序的设计方法
。3)子程序设计中的问题(1)主调程序和子程序的连接:主调程序通过CALL指令调用过程,执行子程序;在子程序中通过RET(IRET)指令返回到主调程序。(2)现场的保护与恢复:在过程的开始,利用PUSH指令将需要保护的数据入栈,保护现场;在过程的结束,利用POP指令将保护的数据出栈,恢复现场。如:
SUMPROCPUSHAXPUSHBX...
POPBXPOPAXRETSUMENDP(3)主调程序与子程序间的参数传递:参数:入口参数与出口参数。参数传递的方法如下:①寄存器传递:exp9.asm*②存储单元传递:exp92.asm*③堆栈传递:exp93.asm[例]求数组ARRAY中所有元素之和存放在SUM单元中。4.5DOS和BIOS系统功能子程序调用微型计算机系统为汇编用户提供了两个程序接口:直接BIOS中断调用和DOS功能调用,DOS和BIOS功能调用由一系列的服务子程序构成。DOS(DiskOperationSystem)和BIOS(BasicInputandOutputSystem)是为用户提供的两组系统服务程序。BIOS是IBMPC的基本I/O系统,由于这些程序固化在ROM中,用户可以直接调用。(1)系统自检及初始化。例如,系统加电启动时对硬件进行检测;对外部设备进行初始化;设置中断向量;引导操作系统等。(2)系统服务。为操作系统和应用程序提供系统服务,这些服务主要与I/O设备有关,如读取键盘输入等。(3)硬件中断处理。提供硬件中断服务程序。DOS是IBMPC的操作系统,负责管理系统的所有资源,协调微机的操作,其中包括大量的可供调用的服务子程序,完成设备的管理和磁盘文件的管理。用户控制PC机硬件的方法:高级语言调用DOS程序使用BIOS程序直接访问硬件DOS功能调用和BIOS中断调用
,使得程序设计人员不必涉及硬件就可以使用系统的硬件,尤其是I/O的使用与管理,但局限于有限的I/O设备。*对硬件编程,完成输入/输出操作的方法:①应用程序调用DOS提供的系统功能:可以少考虑硬件,实现起来容易。②采用BIOS中断调用:和DOS功能调用相比,其优点是效率高,不受任何操作系统的约束,但是编程相对复杂直接应用汇编指令对硬件编程:优点是程序的效率最高,缺点是需要程序员对硬件性能有较深的了解,编程复杂。8086/8088指令系统中,有一种软中断指令INTn。每执行一条软中断指令,就调用一个相应的中断服务程序。当n=5~1FH时,调用BIOS中的服务程序,一般称作系统中断调用;当n=20~3FH时,调用DOS中的服务程序,称作DOS功能调用。其中,INT21H是一个具有调用多种功能的服务程序的软中断指令,故称其为“
DOS系统功能调用”。下面简要介绍一些较常用的DOS与BIOS服务。1.DOS系统功能调用MSDOS使用中断号21H作为系统说明,为程序员提供了上百种系统服务功能。对这些功能的调用步骤如下:(1)系统功能号送AH;(2)设置入口参数给指定的寄存器;(3)执行中断指令INT21H;(4)分析和使用出口参数。这些子程序可分为以下四个主要方面:
(1)磁盘的读/写及控制管理。
(2)内存管理。
(3)基本输入/输出管理(如键盘、打印机、显示器等)。
(4)其他管理(如时间、日期等)。下面介绍关于字符的输入/输出的调用方法:1)从键盘读入一个字符功能号:01H出口参数:AL=输入字符的ASCII码功能:等待从键盘读入一个字符,将其ASCII码送入AL,同时将字符显示在屏幕上。调用方法:MOVAH,1INT21H说明:输入一个字符后,不需要回车。若只输入回车,则AL=0DH。2)显示一个字符功能号:02H入口参数:DL=要显示字符的ASCII码功能:在当前光标位置显示DL中的字符,光标右移。调用方法示例:MOVDL,‘A’;显示字符’A’MOVAH,2INT21H
【例】从键盘接收单个字符并判断转移。KEY:‥‥MOV AH,1 ;等待键入字符,当按下键后
INT 21H ;AL=键入的字符
CMP AL,'Y' JE YES ;键入字符"Y",转至YES语句处
CMP AL,'N' JE NOT ;键入字符“N”,转至NOT语句处
JMP KEY ;其他字符,转至KEY语句处,继续等待YES:‥‥
‥‥NOT:‥‥
‥‥3)利用09H功能在CRT上显示一个字符串 要求
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 年度基础地质勘查服务竞争策略分析报告
- 二零二五年度违约民事起诉状合同起草技巧与法律适用3篇
- 2024-2025学年新教材高中数学第十章概率单元质量评估含解析新人教A版必修第二册
- 2025年度文化旅游项目招投标与合同管理规范解读3篇
- 2024金融行业拓展训练合同
- 2025年度新能源居间服务合同范本英文版3篇
- 二零二五年度留守儿童特殊教育需求与个性化支持服务合同4篇
- 2025年度高科技企业派遣研发人员合同范本
- 2025版高性能铝合金模板制造与租赁服务合同详尽条款全文4篇
- 2025年度家庭经济困难子女抚养费减免专项合同
- 长亭送别完整版本
- 《铁路轨道维护》课件-更换道岔尖轨作业
- 股份代持协议书简版wps
- 职业学校视频监控存储系统解决方案
- 《销售心理学培训》课件
- 智能养老院视频监控技术方案
- 2024年安徽省公务员录用考试《行测》真题及解析
- 你比我猜题库课件
- 丰顺县乡镇集中式饮用水水源地基础状况调查和风险评估报告
- 无人驾驶航空器安全操作理论复习测试附答案
- 2024年山东省青岛市中考语文试卷(附答案)
评论
0/150
提交评论