第6章汇编语言和汇编程序_第1页
第6章汇编语言和汇编程序_第2页
第6章汇编语言和汇编程序_第3页
第6章汇编语言和汇编程序_第4页
第6章汇编语言和汇编程序_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第第6 6章章 汇编语言程序设计汇编语言程序设计12内容概要内容概要汇编语言能汇编语言能直接控制微机硬件直接控制微机硬件的的编程语言编程语言。因此,要求程序设计者要因此,要求程序设计者要 “软、硬结合软、硬结合” 。本章介绍汇编语言程序设计的本章介绍汇编语言程序设计的基本知识基本知识, ,以及一些以及一些基本的基本的程序设计程序设计。6.1 汇编语言程序设计概述汇编语言程序设计概述程序是指令的有序集合。程序是指令的有序集合。微机运行就是执行指令序列的过程。微机运行就是执行指令序列的过程。编写这一指令序列的过程称为编写这一指令序列的过程称为程序设计。程序设计。36.1.1 6.1.1 编程语言

2、编程语言常用的编程语言是常用的编程语言是汇编语言汇编语言和和高级语言高级语言。1 1汇编语言汇编语言用英文字符来代替机器语言,这些英文字符被称为用英文字符来代替机器语言,这些英文字符被称为助记符汇助记符汇编语言:编语言:用助记符表示的指令。用助记符表示的指令。汇编语言源程序:汇编语言源程序:用汇编语言编写的程序。用汇编语言编写的程序。“汇编汇编”:汇编语言源程序需汇编语言源程序需转换(翻译)转换(翻译)成为二进制代码成为二进制代码表示的机器语言程序,才能识别和执行。表示的机器语言程序,才能识别和执行。完成完成“翻译翻译”的程序称为的程序称为汇编程序汇编程序。经汇编程序。经汇编程序“汇编汇编”得

3、得到的以到的以“0 0”、“1 1”代码形式表示的机器语言程序称为代码形式表示的机器语言程序称为目标目标程序程序。34优点:优点:用汇编语言编写程序效率高,占用存储空间小,运行用汇编语言编写程序效率高,占用存储空间小,运行速度快,能编写出最优化的程序。速度快,能编写出最优化的程序。汇编语言可以用于软件的加密和解密、计算机病毒的分析和防治,以及程序的调试和错误分析等各个方面。通过学习汇编语言,能够加深对计算机原理和操作系统等课程的理解。通过学习和使用汇编语言,能够感知、体会和理解机器的逻辑功能,向上为理解各种软件系统的原理,打下技术理论基础;向下为掌握硬件系统的原理,打下实践应用基础。缺点:缺点

4、:可读性差,离不开具体的硬件,是面向可读性差,离不开具体的硬件,是面向“硬件硬件”的语的语言通用性差。言通用性差。2 2高级语言高级语言不受具体不受具体“硬件硬件”的限制,的限制,优点:优点:通用性强,直观、易懂、通用性强,直观、易懂、易学,可读性好。易学,可读性好。45尽管目前已有不少设计人员使用尽管目前已有不少设计人员使用C C语言等来进行程序开发,语言等来进行程序开发,但在对但在对程序的程序的空间空间和和时间时间要求较高的场合,汇编语言仍必不可要求较高的场合,汇编语言仍必不可少。少。在这种场合下,可使用在这种场合下,可使用C C语言和汇编语言混合编程。在很多语言和汇编语言混合编程。在很多

5、需要直接控制硬件且对实时性要求较高的场合,则更是非用汇需要直接控制硬件且对实时性要求较高的场合,则更是非用汇编语言不可。编语言不可。掌握汇编语言并能进行程序设计,是学习和掌握微型计算程掌握汇编语言并能进行程序设计,是学习和掌握微型计算程序设计的序设计的基本功之一基本功之一。6.1.2 6.1.2 汇编语言语句和格式汇编语言语句和格式两种基本语句:两种基本语句:指令语句指令语句和和伪指令语句伪指令语句。(宏指令)。(宏指令)56(1 1)指令语句)指令语句 前面已经学习,每一指令语句在汇编时都产生一个指令码前面已经学习,每一指令语句在汇编时都产生一个指令码(机器代码),执行该指令代码对应着机器的

6、一种操作。(机器代码),执行该指令代码对应着机器的一种操作。(2 2)伪指令语句)伪指令语句 是控制汇编(翻译)过程的一些是控制汇编(翻译)过程的一些控制命令控制命令。在汇编时。在汇编时没有没有机器代码机器代码与之对应。与之对应。 下面介绍指令语句格式。伪指令语句将在下一节介绍。下面介绍指令语句格式。伪指令语句将在下一节介绍。7汇编语言语句是符合典型的汇编语言的汇编语言语句是符合典型的汇编语言的四分段四分段格式格式:标号字段标号字段和和操作码字段操作码字段之间要有之间要有冒号冒号“:”分隔;分隔;操作码字段操作码字段和和操作数字段间操作数字段间的分界符是的分界符是空格空格;双操作数双操作数之间

7、用之间用逗号逗号相隔;相隔;操作数字段操作数字段和和注释字段注释字段之间的分界符用之间的分界符用分号分号“;”。任何语句都必须有操作码字段任何语句都必须有操作码字段,其余各段为任选项。,其余各段为任选项。7标号标号:(LABLE)操作码操作码(OPCODE)操作数操作数(OPRAND);注释注释(COMMENT)8【例例6-1】下面是一段程序的下面是一段程序的四分段四分段书写格式。书写格式。标号字段标号字段 操作码字段操作码字段 操作数字段操作数字段 注释字段注释字段START:MOVA,00H ;0A MOVR1,10 ;10R1MOVR2,00000011B ;03HR2LOOP: ADD

8、A,R2 ;(A)+(R2)ADJNZR1,LOOP ;R1减减1不为零,则跳不为零,则跳LOOP处处NOPHERE: SJMPHERE上述上述4个字段应该遵守的个字段应该遵守的基本语法规则基本语法规则如下。如下。891 1标号标号语句所在地址的标志符号,才能被访问。如标号语句所在地址的标志符号,才能被访问。如标号“STARTSTART”和和“LOOPLOOP”等。有关标号规定如下:等。有关标号规定如下:(1 1)标号后必须跟冒号标号后必须跟冒号“:”。(2 2)标号由标号由1 18 8个个ASCIIASCII码字符组成,第一个字符必须是码字符组成,第一个字符必须是字母。字母。(3 3)同一标

9、号在一个程序中只能定义一次,不能重复定同一标号在一个程序中只能定义一次,不能重复定义。义。(4 4)不能使用汇编语言已经定义的符号作为标号,如指不能使用汇编语言已经定义的符号作为标号,如指令助记符、伪指令以及寄存器的符号名称等。令助记符、伪指令以及寄存器的符号名称等。(5 5)标号的有无,取决于本程序中的其他语句是否访标号的有无,取决于本程序中的其他语句是否访910问该条语句。如无其他语句访问,则该语句前不需标号。问该条语句。如无其他语句访问,则该语句前不需标号。2 2操作操作操作码字段规定了语句执行的操作,操作码是汇编语言指令中操作码字段规定了语句执行的操作,操作码是汇编语言指令中唯一不能空

10、缺的部分。唯一不能空缺的部分。3 3操作数操作数指令的操作数或操作数地址。指令的操作数或操作数地址。在本字段中,在本字段中,操作数的个数因指令的不同而不同。操作数的个数因指令的不同而不同。通常有单操通常有单操作数、双操作数和无操作数三种情况。作数、双操作数和无操作数三种情况。如果是多操作数,则操作数之间要以如果是多操作数,则操作数之间要以逗号逗号隔开。隔开。11操作数表示操作数表示时,几种情况需注意:时,几种情况需注意:(1 1)十六进制、二进制和十进制形式的操作数表示)十六进制、二进制和十进制形式的操作数表示多数情况,操作数或操作数地址是采用多数情况,操作数或操作数地址是采用十六进制十六进制

11、形式来表形式来表示的。则需加示的。则需加后缀后缀“H H”。在某些特殊场合用在某些特殊场合用二进制二进制表示,需加表示,需加后缀后缀“B B”若操作数采用若操作数采用十进制十进制形式,则需加形式,则需加后缀后缀“D D”,也可省略。,也可省略。若十六进制若十六进制操作数操作数以以字符字符A AF F开头开头,需在它,需在它前面加一个前面加一个 “0 0”,以便汇编时把它和,以便汇编时把它和字符字符A AF F区别区别开。开。1112(2 2)工作寄存器和特殊功能寄存器的表示)工作寄存器和特殊功能寄存器的表示 当操作数为工作寄存器或特殊功能寄存器时,允许用当操作数为工作寄存器或特殊功能寄存器时,

12、允许用工作寄存器和特殊功能寄存器的工作寄存器和特殊功能寄存器的代号表示代号表示。 例如,例如,寄存器的名字:寄存器的名字:AX、BX、CX、DX、SP、BP、SI、DI、IP、CS、DS、ES、SS。4 4注释注释用于解释指令或程序的含义,对可读性非常有用。用于解释指令或程序的含义,对可读性非常有用。使用时使用时须以分号开头须以分号开头,长度不限,一行写不下,长度不限,一行写不下可换行可换行书写,但注意也要以分号开头。书写,但注意也要以分号开头。1213 汇编时,遇到汇编时,遇到“;” 就停止就停止“翻译翻译”。因此,注释字。因此,注释字段不会产生机器代码。段不会产生机器代码。4.1.3 4.

13、1.3 伪指令伪指令 在汇编语言源程序中应有在汇编语言源程序中应有向汇编程序发出的指示信息向汇编程序发出的指示信息,告诉它如何完成汇编工作,这是通过告诉它如何完成汇编工作,这是通过伪指令伪指令来实现。来实现。 伪指令不属于指令系统中的汇编语言指令,它伪指令不属于指令系统中的汇编语言指令,它是程序员是程序员发给汇编程序的发给汇编程序的命令命令,也称为,也称为汇编程序控制命令汇编程序控制命令。 只有在汇编前的源程序中才有伪指令。只有在汇编前的源程序中才有伪指令。 “伪伪”体现在体现在汇编后,伪指令汇编后,伪指令没有相应的机器代码产生。没有相应的机器代码产生。 伪指令具有控制汇编程序的输入伪指令具有

14、控制汇编程序的输入/ /输出、定义数据和符输出、定义数据和符号、条件汇编、分配存储空间等功能。号、条件汇编、分配存储空间等功能。13表达式表达式是是常数常数、寄存器、标号、变量寄存器、标号、变量与一些与一些运算符运算符组合组合的序列。的序列。6.2MASM中的表达式中的表达式汇编时按一定的优先规则对表达式进行计算后可得到一个数值或一个地址。 算术运算符(Arithmetic Operators) 逻辑运算符(Logical Operators ) 关系运算符(Relational Operators ) 数值返回运算符(Value-Returning Operators ) 修改属性运算符(M

15、odifing attribute Operators) 其它运算符(Other Operators )nMASM是微软公司开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80 x86汇编以及Win32Asm,是Windows下开发汇编的利器。它与windows平台的磨合程度非常好,但是在其他平台上就有所限制,使用MASM的开发人员必须在Windows下进行开发。nMASM版本至今在不断的更新,推荐使用新版本进行开发。nMASM 5.0/6.0 是最常用的汇编连接软件其简单操作为 输入asm文件将其连接为 obj文件 用link得到exe

16、文件。一、算术运算符一、算术运算符有有+ +、- -、* *、/ /,MODMOD,SHLSHL、SHRSHR。其中其中MODMOD表示除法运算后得到的余数。表示除法运算后得到的余数。例: 19/7的商是2;19 MOD 7则结果为5(余数)算术运算符可以用于数字表达式。例: MOV AL,2*7算术运算符也可以用于地址表达式,但对地址运算的结果应有明确的物理意义。例如,两个地址的乘或除无意义,而加或减则可以。 例: LEA SI,SUM+3 表示变量SUM的地址加上3得到的和作为新的存储器地址。 注: LEA指令是装入有效地址 ANDAND、OROR、XORXOR和和NOTNOT,它们只能用

17、于数字表达式中,按位运算它们只能用于数字表达式中,按位运算。 二、逻辑运算符二、逻辑运算符 例: MOV CL,36H AND 0FH 经汇编后结果等同于:MOV CL,06H 这些逻辑运算符也是8086/8088的指令助记符,但不会造成混乱,前者在汇编时进行,而后者在指令执行时进行的。例: AND DX,PORT_VAR AND 0FEH后一个逻辑运算符AND在汇编时进行,若PORT_VAR为81H,则汇编后表达式算出为80H.执行前一个指令助记符AND时,将(DX)与80H相与,结果在DX中。 共有共有6 6个:个:EQEQ、NENE、LTLT、LELE、GTGT、GEGE。三、关系运算符

18、三、关系运算符关系运算符的两个操作数必须都是数字或者是同一段内的两个存储器地址。 例: MOV BX,PORT_VAL GE 5若PORT_VAL的值大于等于5,则汇编后结果等效为: MOV BX,0FFFFH若PORT_VAL的值小于5, 则汇编后结果等效为: MOVBX,0关系为真,结果为 0FFFFH,或0FFH “1” 关系为假,结果为 0 它可以把存储器一些特征作为数值送回。它可以把存储器一些特征作为数值送回。四、数值返回运算符(分析运算符)四、数值返回运算符(分析运算符)OFFSET、SEG、TYPE、LENGTH、SIZE 。1. OFFSET 注意与 MOV SI,STRI1的

19、差别。但它与 LEA SI,STRI1类似。返回标号或变量的偏移地址。SEG运算符用来取存储单元的段地址值。例: MOVAX,SEG STRI1;将变量STRI1所在段MOVDS,AX;值取到DS中。例:MOV SI,OFFSET STRI1; 将变量STRI1处的地址偏移量取到SI中格式: OFFSET 变量或标号2. SEG格式: SEG 变量或标号 3. TYPE3. TYPE例:若 BUFFER1 存储区是用如下伪指令定义的:BUFFER1 DB100 DUP(?)则 TYPE BUFFER1 等于1类型类型返回值返回值变变量量DB1DW2DD4DQ8标标号号NEAR-1FFHFAR-

20、2FEH TYPE操作符用来取存储器的单元类型,各单元类型对应值如下表:格式: TYPE 变量或标号4. LENGTH例: 若ABC被定义为:ABC DW4,5,6 则 LENGTH ABC 等于1若ABC被定义为:ABC DW 100 DUP(?)则 LENGTH ABC 等于100LENGTH操作符用来计算一个用复制操作符DUP( )来定义的存储区的数据(数据可以是字节,字或双字)的数目。如果不是用DUP定义的存储区则返回值为1.格式: LENGTH 变量5. SIZE操作符SIZE用来计算一个存储区有多少个字节。格式: SIZE 变量例: 若 BUFFER2 存储区是用如下伪指令定义的:

21、 BUFFER2 DW200 DUP(0) 则: TYPE BUFFER2等于2 LENGTHBUFFER2等于200 SIZE BUFFER2等于400 五、修改属性运算符五、修改属性运算符段操作符、PTR、THIS、HIGH、LOW、SHORT。用来对存储单元规定类型,通常和伪指令BYTE、WORD等连起来使用。格式: 段前缀:变量或地址表达式1. 段操作符例:MOV AX,ES:BX 指定段属性,段超越2. PTR格式: 类型/距离 PTR 变量或标号例:MOVBYTE PTRDI,0 MOVWORD PTRDI,0 而 MOVDI,0 ;类型不定 五、修改属性运算符五、修改属性运算符用

22、来说明转移类指令中转向的目标地址与本指令之间的距离在-127+128之间。格式: 变量/标号 EQU THIS 类型/距离 3. THIS将EQU THIS 右边的类型/距离属性,赋给左边的变量/标号。4. SHORT格式: SHORT 标号5. HIGH和LOW格式: HIGH/LOW 变量或标号字节分离运算符。 HIGH从字中分离出高位字节; LOW从字中分离出低位字节。六、其它运算符: ()、 、MASK、WIDTH4.3 4.3 伪指令语句伪指令语句常用的伪指令有常用的伪指令有: :数据定义语句符号赋值语句段定义语句段分配语句过程定义语句程序开始结束语句一、数据定义语句一、数据定义语句

23、变量是内存中数据区的名字,故这类伪指令又可变量是内存中数据区的名字,故这类伪指令又可叫变量定义伪指令。这类伪指令格式为:叫变量定义伪指令。这类伪指令格式为:变量名 伪指令助记符 操作数 ;注释其中变量名用符号地址表示,后面不能跟冒号,它可有可无。助记符有:DB、DW、DD、DQ、DT、n DUP()DB用来定义字节,每个操作数占一个字节DW用来定义字, 占一个字DD用来定义双字 , 2个字DQ用来定义四个字, 占4个字DT用来定义十个字节, 占10个字数据定义语句数据定义语句例1:DA1 DB 10,5,10HDA2 DW 10H,100,-4DA3 DD 2*30,0FFFBHDA1DA3D

24、A210 510H10H100-4600FFFBH汇编后如图所示:(内存分配)例例2 2:操作数可以是字符串:操作数可以是字符串LILIDBDBHELLOHELLO LIHELLO注意下面的不同: DB AB DW AB 41H A 42HB 42H B 41HA48454C4C4F汇编后如图:操作数操作数 ? ? 用来保留存储空间用来保留存储空间, ,但不存入数据。但不存入数据。ABCLPI01?54例3:ABCDB0,1,?,?,? LPIDW?,54,?汇编后如下图示:操作数字段还可以用操作数字段还可以用复制操作符复制操作符DUPDUP来缩写。来缩写。如前面ABC亦可写成: ABC DB

25、 0,1,3 DUP(?)又如: DAO DB 2 DUP(0,1,2,?) 与 DAO DB 0,1,2,?,0,1,2,? 等价。在伪指令的操作数中若使用$,则表示的是地址计数器的当前值。例: BUFFER DW 3,4,$+3设 BUFFER的偏移地址为0088H,则汇编后如图所示:BUFFER0088H008CH030004008FH8FH00$+3 008C H + 3 = 008F H008AH0089H008BH二、表达式赋值语句EQU、=、 PURGE1. 赋值语句 EQU 等价伪指令 格式为:符号名 EQU 表达式 或:符号名2 EQU 符号名例: CONSTANTEQU10

26、0NEW_PORTEQUPORT_VAL+1EQU伪指令在未解除前,不能重新定义。例: EMP=7;值为7EMP=EMP+1 ;值为82. 等号语句 = :与EQU类似,但允许重新定义3.3.解除伪指令解除伪指令PURGEPURGE已用EQU定义的符号,可用PURGE解除,再重新定义。例:PURGE NEW_PORT NEW_PORTEQUPOTR_VAL+8三、三、 段定义语句段定义语句因因8086/8088 CPU8086/8088 CPU的存储器是分段的的存储器是分段的, ,这就需要有这就需要有段段定义语句定义语句。与段有关的伪指令有: SEGMENT、ENDS、ASSUME、ORG 段

27、定义伪指令的格式如下:段名 SEGMENT 定位类型 组合类型类别 段名 ENDS功能:用此伪指令可以把模块分为若干个逻辑段,每一对SEGMENT和ENDS可定义一个逻辑段。这两个伪指令总是成对出现,二者前面的段名一致。二者之间的部分,对DS、ES、SS来说,一般是符号、变量定义等伪指令。对于CS则是指令及伪指令。说明说明: 此外,还必须明确段和段寄存器的关系,这可由段分配语句ASSUME语句来实现。其格式为: SEGMENT与ENDS共同定义一个逻辑段。它们必须成对使用,每段应有一个段名,具有段基址和偏移量两个属性。功能: 向汇编程序指示当前各段所用的段寄存器 其中段寄存器名必须是CS、DS

28、、ES或SS中的一个,而段名则是由SEGMENT及ENDS定义的段名。ASSUME CS:SEGNAME ,需指出的一点需指出的一点,ASSUME,ASSUME伪指令伪指令只是告知汇编只是告知汇编程序有关段寄存器与段的关系程序有关段寄存器与段的关系, ,除了代码段除了代码段CSCS,其他几段并没有给段寄存器赋予实际的初值。其他几段并没有给段寄存器赋予实际的初值。如果程序用到了如果程序用到了DSDS、SSSS、ESES,则需要程序员在,则需要程序员在代码段的开始时对代码段的开始时对DSDS、SSSS、ESES赋值。如下语句:赋值。如下语句: MOVMOVAX,DATAAX,DATA MOV MO

29、VDS,AXDS,AX四、四、 过程定义语句过程定义语句过程也称子程序。过程也称子程序。过程定义伪指令的格式如下:过程名PROC 属性 ;过程内容RET N过程名ENDP功能: 定义一个过程,主程序可以用CALL指令调用它。过程调用的距离属性有NEAR、FAR。 若定义NEAR属性(默认),则允许过程在段内调用。 若定义FAR属性,则允许过程跨段调用。五、五、 程序开始和结束语句程序开始和结束语句NAME、OEG、END格式: NAME 程序名功能: 为源程序目标模块赋名。位置:放在程序开始。 2. ORG1. NAME表达式:给定的偏移地址值,表达式的值(必须是正整数)即为段内的起始地址或偏

30、移地址,从此地址起连续存放程序或数据。格式:ORG 表达式功能: 为目标程序设置位置指针,指定下面语句的 起始偏移地址。五、五、 程序开始和结束语句程序开始和结束语句格式: END 标号名功能: 标记汇编源程序结束。位置:放在源程序的最后一行。3. END标号名:该程序第一条可执行语句的标号名。一、DOS系统功能调用系统功能调用1、什么是DOS系统功能调用 系统功能调用是DOS为用户提供的常用子程序(80多个),可在汇编语言程序中直接调用。这些子程序的主要功能包括: (1)设备管理(如键盘、显示器、打印机、磁盘等的管理) (2)文件管理和目录操作(3)其他管理(如内存、时间、日期等管理) 这些

31、子程序给用户编程带来很大方便,用户这些子程序给用户编程带来很大方便,用户不必了解有关的设备、电路、接口等方面的问题不必了解有关的设备、电路、接口等方面的问题,只需直接调用即可。,只需直接调用即可。392、调用方法 DOS功能调用的子程序已按顺序编号功能号(00H68H),其调用方法是: (1) 功能号AH (2) 入口参数指定寄存器 (3) INT 21H 用户只须给出以上三方面信息,DOS就可根据所给信息自动转入相关子程序执行。40INT 软件中断, 21H是函数入口地址,实际上就是调用DOS的系统功能。 3、常用的系统功能调用 (1)键盘输入 1) 1号调用从键盘输入单个字符调用格式: M

32、OV AH,1 INT 21H 功能: 等待从键盘输入一个字符并送入AL。 执行时系统将扫描键盘,等待有健按下,一旦有健按下,就将其字符的ASCII码读入,先检查是否Ctrl-Break,若是,退出命令执行;否则将ASCII码送AL,同时将该字符送显示器显示。412) 10号调用从键盘输入字符串功能: 从键盘接收字符串送入内存的输入缓冲区,同时送显示器显示。调用前要求: 先定义一个输入缓冲区MAXLEN DB 100 ;第1个字节指出缓冲区能容纳的字符 个数,即缓冲区长度,不能为0ACLEN DB ? ;第2个字节保留,以存放实际输入的字符 个数STRING DB 100 DUP(?) ;第3

33、个字节开始存放从键盘输 入的字符串。 调用格式: LEA DX, MAXLEN(缓冲区首偏移地址) MOV AH,10INT 21H注意:调用时,要求DS:DX指向输入缓冲区42(2)显示输出 1) 2号调用在显示器上显示输出单个字符调用格式: MOV DL,待显示字符的ASCII码 MOV AH,2 INT 21H功能:将DL中的字符送显示器显示。【例】显示输出大写字母A MOV DL,41H ;或写为 MOV DL,A MOV AH,2 INT 21H 2) 9号调用在显示器上显示输出字符串调用格式: LEA DX,字符串首偏移地址 MOV AH,9 INT 21H功能:将当前数据区中DS

34、:DX所指向的以$结尾的字符串送显示器显示。43【例】在显示器上显示字符串“GOOD LUCK! ”DATA SEGMENT STRING DB GOOD LUCK! $ DATA ENDSCODE SEGMENT MOV AX,DATA MOV DS,AX LEA DX,STRING MOV AH,9 INT 21H CODE ENDS44二、二、BIOS中断调用中断调用 1、什么是BIOS BIOS的全称是ROM-BIOSROM Basic I/O System(只读存储器基本输入输出系统)。 它是一组固化到微机主板上一个ROM芯片上的子程序,主要功能包括:(1)(1)驱动系统中所配置的常

35、用外设(即驱动程序),如显示驱动系统中所配置的常用外设(即驱动程序),如显示器、键盘、打印机、磁盘驱动器、通信接口等。器、键盘、打印机、磁盘驱动器、通信接口等。(2)(2)开机自检,引导装入。开机自检,引导装入。(3)(3)提供时间、内存容量及设备配置情况等参数。提供时间、内存容量及设备配置情况等参数。 使用使用BIOSBIOS中断调用与中断调用与DOSDOS系统功能调用类似,用户也无须系统功能调用类似,用户也无须了解相关设备的结构与组成细节,直接调用即可。了解相关设备的结构与组成细节,直接调用即可。45实现简单的人机对话实现简单的人机对话n屏幕显示:Whats your name? (使用9

36、号DOS功能调用)用户输入:LiMing (使用10号DOS功能调用)屏幕再显示:Hello, LiMing! (使用9号DOS功能调用)46n程序清单: DATA SEGMENTBUF DB 30ACTL DB ?STR DB 30 DUP(?)MESS DB Whats yourname?,0DH,0AH, $DMESS DB 0DH,0AH, Hello,$ DATA ENDS47 CODE SEGMENTASSUME CS:CODE,DS:DATAMAIN PROC FARPUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXLEA DX,MESSMOV

37、AH,9INT 21H ;显示 Whats your name?48 LEA DX,BUFMOV AH,10INT 21H ;从键盘接收用户输入的信息MOV AL,ACTL ;取得键入字符串的实际长度CBWMOV SI,AXLEA BX,STR MOV BX+SI,BYTE PTR ! ;在键入的字符串后加!MOV BX+SI+1,BYTE PTR $ ;在!后加$,以便显示LEA DX,DMESS ;显示Hello!MOV AH,9INT 21H 49 LEA DX,STR ;显示键入的字符串MOV AH,9INT 21H RETMAIN ENDP CODE ENDSEND MAINl两者相

38、比较,BIOS可更直接地控制外设,故能完成更复杂的输入/输出操作;l而DOS操作对硬件依赖性少,比相应的BIOS操作简单,因此在二者能完成同样功能时,应尽量使用DOS功能调用。50n2、调用方法 用户在汇编语言程序中可使用软中断指令“INT n”调用BIOS程序,其中n是中断类型码。常用的BIOS程序的功能与其中断类型码对应关系如下表:51 例如,用指令“INT 16H”可调用键盘驱动程序。 当某个BIOS程序中具有多种不同功能时,用不同的编号功能号加以区分,并约定功能号存放在寄存器AH中。其调用方法与DOS功能调用类似: (1) 功能号AH (2) 入口参数指定寄存器 (3) 指令“INT

39、n”实现对BIOS子程序的调用 下面以键盘I/O中断调用为例介绍BIOS中断调用的方法。523、键盘I/O中断调用示例 键盘I/O中断调用(INT 16H)有三个功能,功能号为02。 (1) AH=0 功能:从键盘读入字符送AL。 出口参数:(AL)键入字符的ASCII码;(AH)键入字符的扫描码 【例】MOV AH,0 INT 16H 调用结果:将键盘输入字符的ASCII码送AL,扫描码送AH。 53(2) AH=1 功能:从键盘读入字符送AL,并设置ZF标志,若按过任一健,则置ZF=0,否则ZF=1。 出口参数:ZF=0 ,键盘有输入,(AL)键入字符的ASCII码; ZF=1,键盘无输入

40、(3) AH=2 功能:读取特殊功能建的状态。 出口参数:AL中是各特殊功能键的状态 AL中某位为1,表示对应键按下; 为0则表示未按下。 54汇编语言源程序结构汇编语言源程序结构1 1源程序结构源程序结构源程序通常由一个或几个程序模块组成源程序通常由一个或几个程序模块组成, ,每个模每个模块包括数据段、堆栈段和若干代码段。代码段可有若块包括数据段、堆栈段和若干代码段。代码段可有若干个过程干个过程, ,1 1源程序结构源程序结构 NAME MAIN_PROGMODULE数据段名数据段名 SEGMENT 变量定义变量定义 数据空间预置数据空间预置数据段名数据段名 ENDS堆栈段名堆栈段名 SEG

41、MENT ;STACK定义堆栈段定义堆栈段堆栈段空间预置堆栈段空间预置堆栈段名堆栈段名 ENDS代码段名代码段名 SEGMENTASSUME 段寄存器地址说明段寄存器地址说明START: 段地址装填段地址装填 主程序体主程序体1 1源程序结构源程序结构过程名过程名1 PROC 类型说明类型说明 过程体过程体1过程名过程名1 ENDP过程名过程名2 PROC 类型说明类型说明 过程体过程体2过程名过程名2 ENDP 过程名过程名N PROC 类型说明类型说明 过程体过程体N过程名过程名N ENDP 代码段名代码段名 ENDS END START源程序结构源程序结构对于以上汇编语言源程序的结构中的

42、具体内容对于以上汇编语言源程序的结构中的具体内容,前面已经作过介绍前面已经作过介绍,这里应指出的是:这里应指出的是:任何一个汇编任何一个汇编语言源程序至少应该含有一个代码段语言源程序至少应该含有一个代码段, 必须用必须用END伪伪指令告诉汇编程序指令告诉汇编程序,汇编到此结束。汇编到此结束。堆栈段和数据段视需要而定。如果使用堆栈操作堆栈段和数据段视需要而定。如果使用堆栈操作,用户最好自己设置堆栈用户最好自己设置堆栈,若不设置用户专用堆栈空间若不设置用户专用堆栈空间,将自动使用系统的堆栈空间。将自动使用系统的堆栈空间。当有变量定义或预置数据空间时当有变量定义或预置数据空间时,应在数据段应在数据段

43、/附附加段中进行定义。加段中进行定义。对汇编源程序中的几个问题的说明对汇编源程序中的几个问题的说明 1) 程序的分段定义及段寄存器的装填整个程序是由若干个逻辑段组成的,至少应有一个代码段被定义。段定义的伪指令为SEGMENT和ENDS。ASSUME 伪指令指出各逻辑段所应该装填的地址,但并没有将段基址装入相应的段寄存器中。ASSUME指出了各段寄存器与当前被使用的逻辑段的对应关系。CS是系统在加载程序后由系统自动装填的,即由操作系统的任务(进程)管理程序自动完成装填的。CS装填不需要用户管理。 1) 程序的分段定义及段寄存器的装填堆栈段SS也可以不用用户装填,可由系统自动装填,此时必须在定义堆

44、栈段伪指令中,把参数写全。其形式如下: STACK SEGMENT PARA STACK STACK当程序装入内存时,系统会自动地把堆栈段地址和栈指针置入SS和SP中, 但如果没有给出必要的参数,则还应由用户装填SS和SP寄存器值。DS、ES、SS的装填可以使用实例中的两条指令: MOV AX,DATA MOV DS,AX 2) MS-DOS环境下正确返回DOS的问题汇编语言程序可以在DOS环境下直接运行,例如经过汇编后生成带后缀 .COM或 .EXE 可执行文件的形式, 也可以由 .EXE文件再转换成 .BIN二进制文件的形式被其它高级语言调用。但汇编语言通常都以 .EXE文件进行调试, 所

45、以,应解决程序执行后正常返回 DOS 系统的问题, 否则往往以死机结束。通常,可以用以下三个方法之一返回DOS :(1) 用功能调用4CH 一般在主程序的代码段结束前插入下面两条指令: MOV AH, 4CH INT 21H 2) MS-DOS环境下正确返回DOS的问题执行以上两条指令后,将由系统结束程序并返回到DOS状态下,给出DOS提示符,等待新的命令键入。这是最常用的一种返回DOS的方法。(2)用中断INT 20H 系统把中断号20H作为结束任务返回DOS的服务功能使用。故在用户程序结束时,可插入一条 INT 20H指令。(3)在装填DS之前用下面三个语句:PUSH DSMOV AX,0PUSH AX4.5 4.5 程序设计方法和上机调试程序设计方法和上机调试一、 汇编语言应用程序的开发过程开发8086/8088汇编语言源程序的过程如下: 用文本编辑程序建立和修改源程序。( PWB、EDLINT、WS、EDIT ) 调用宏汇编程序(MASM)对源程序进行汇编。 利用连接程序(LINK)把汇编后生成的目标文件连接装配成为可执行的文件。 利用调试程序(DEBUG)对可执行文件进行调试(扩展名为.EXE或.COM的可执行文件)。 在DOS下运行可执行的文件一、一、 汇编语言应用程序的开发过程汇编语言应用程序的开发过程1、 源文件的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论