微机原理及应用 教学课件 ppt 作者 胡钢 第五章

上传人:E**** 文档编号:89496287 上传时间:2019-05-25 格式:PPT 页数:88 大小:604.50KB
返回 下载 相关 举报
微机原理及应用 教学课件 ppt 作者 胡钢 第五章_第1页
第1页 / 共88页
微机原理及应用 教学课件 ppt 作者 胡钢 第五章_第2页
第2页 / 共88页
微机原理及应用 教学课件 ppt 作者 胡钢 第五章_第3页
第3页 / 共88页
微机原理及应用 教学课件 ppt 作者 胡钢 第五章_第4页
第4页 / 共88页
微机原理及应用 教学课件 ppt 作者 胡钢 第五章_第5页
第5页 / 共88页
点击查看更多>>
资源描述

《微机原理及应用 教学课件 ppt 作者 胡钢 第五章》由会员分享,可在线阅读,更多相关《微机原理及应用 教学课件 ppt 作者 胡钢 第五章(88页珍藏版)》请在金锄头文库上搜索。

1、第五章 汇编语言程序设计,第一节 汇编语言 第二节 伪指令 第三节 汇编语言程序设计 第四节 DOS功能调用,在计算机内部,控制计算机工作的指令都以二进制代码的形式出现,这样的指令称为机器指令,用机器指令编写的程序称为机器语言程序。可见,机器语言是二进制编码表示的命令和数据的总称,是面向机器的,能够被计算机直接识别和执行的。然而,二进制表述的机器语言既不直观,又不便于记忆、阅读和书写,为了程序设计的方便,产生了汇编语言。汇编语言是一种符号语言,用与操作功能含义相应的缩写英文字符组成的助记符号作为编程使用的语言,来表示二进制格式的指令代码和变量地址。计算机在运行汇编语言程序之前要先将其转换成机器

2、代码,才能由计算机识别执行,转换的过程是由编译程序来完成。,第一节 汇编语言,一 源程序的格式,在汇编语言中,符号指令和机器指令通常是一一对应的,汇编语言与机器语言相比编程简单、便于交流,并且保留了机器语言与硬件系统联系密切的特点,所以,汇编语言仍然是面向机器的语言,在使用汇编语言时必须对相应的计算机硬件有一定了解,CPU不同的计算机,汇编语言也不同。由于机器不能直接执行汇编语言源程序,所以必须先将源程序转换成二进制代码表示的机器指令,完成这一功能的软件就是汇编程序,在IBM - PC微型计算机系统中,目前广泛使用的汇编程序是由Microsoft公司开发的宏汇编程序 MASM。,用汇编语言设计

3、的程序能够充分利用硬件系统的功能和结构特性,有效地加快程序的执行速度;直接对寄存器、存储器和I/O端口进行操作,减少程序占用的存储空间。但是,由于汇编语言对于数学模型中的关系表示不够直观,使得在一些复杂计算程序设计中,设计汇编语言程序要花费较多的时间,编程上有一定难度。另外,由于是面向机器的语言,所以要求程序设计人员必须具备一定的计算机硬件知识。,同其它语言一样,汇编语言的基本组成单位是语句,在汇编语言源程序中每个语句由四项组成,其格式如下: 标号: 操作项 操作数 ;注释 其中,操作项是必不可少的。,汇编语言语句格式,标号是一个可选字段,由字母(A Z、a z)数字(0 9)及专用字符(?、

4、.、-、$)组成的字符串,最长不超过31个字符,要求必须以字母开头,用冒号与操作项分开。标号实质上是指令的符号地址,但并不是所有指令语句都有标号。如果指令语句前有标号,则程序的其他部分可以引用这个标号,如程序中的JMP指令和CALL指令的转移目标由标号指定,即JMP指令和CALL指令是根据标号来确定它们之后要执行的语句,可见标号其实是指定了具体的指令地址,所以相同的标号定义在同一程序中只允许出现一次。,1、标号字段,标号有三种属性:段、偏移量和类型。标号的段属性是定义标号的程序段的段基值;标号的偏移量属性是表示该标号在段内的偏移地址,偏移量是一个16位的无符号数;标号的类型属性有NEAR和FA

5、R两种,NEAR只能提供同一段内的指令调用,FAR可以被其他段指令调用。,操作项是汇编语言程序中不可省略的主要部分,用指令助记符或定义符表示的机器指令操作码,如:MOV、ADD等,它告诉CPU要完成什么具体操作。有的操作项带有前缀,指令系统中允许与指令助记符一起出现的前缀是前缀指令和段超越前缀。,2、操作项字段, 常量 常量是指令中的固定值,它们在程序运行期间不发生变化,它可以分为数值常量和字符串常量。例如:立即数寻址时的立即数;直接寻址时的地址;ASCII码字符串等都属于常量。在汇编语言源程序中,数值常量可以用二进制数、八进制数、十进制数和十六进制数来表示,但要用不同的后缀加以区别。要注意的

6、是,汇编语言要求数值常量的第一位必须是数字,如:FFFFH应写成0FFFFH,否则汇编时会被误作为标号处理。 变量 变量是指存放在存储器或寄存器中的数据,这些数据随着程序运行可能随时会发生变化。寄存器有固定的名字,如:AL、AX等;存储器常以其地址或地址表达式的形式出现。应该指出,变量也有段、偏移量和类型三个属性。,二、表达式用运算符和操作符, 表达式 表达式是操作数最常见的形式,其值由常数、变量、标号通过运算符连接,在汇编时计算确定。汇编语言中运算符分为:算术运算符、逻辑运算符、关系运算符、分析运算符和属性修改运算符等。 算术运算符:常用的算术运算符有:加(+)、减(-)、乘()、除(/)和

7、模(MOD)等,算术运算的结果是一个数值,对于表示存储器地址的地址表达式加和减运算才有意义。例如: MOV AX,VARX+2 表示将VARX表示的地址加2后对应的存储单元内的数据送AX。, 逻辑运算符:逻辑运算符包括:AND(逻辑“与”)、OR(逻辑“或”)、XOR(逻辑“异或”)、NOT(逻辑“非”),用于数值表达式中对数值进行按位逻辑运算,结果也是一个数值。例如: MOV AL,0FH AND 35H 表示将0FH与35H按位逻辑“与”后得到的数值(05H)送AL。 注意:逻辑运算符AND、OR、XOR、NOT同时也是指令助记符,作为运算符时在程序汇编时用作计算;作为指令助记符时是在程序

8、执行时用作计算的。例如: AND AX,VARTB AND 8000H 表示将VARTB表示的地址与8000H按位逻辑“与”后,对应的存储单元内的数据再与AX内的数据进行逻辑“与”。可见,在汇编时计算VARTB AND 8000H,得到的数值作为程序的一个操作数;执行程序时计算第一个AND,将前面得到的操作数与AX内的数据进行“与”运算,结果送AX。, 关系运算符:关系运算符有EQ(等于)、NE(不等于)、LT(小于)、GT(大于)、LE(小于等于)、GE(大于等于)。关系运算符必须有两个操作数,而且必须是两个数值或是同一段内的存储单元地址。关系运算符只能有两个结果“0”或“1”,关系成立时运

9、算结果为0FFFFH,关系不成立时运算结果为0。要注意的是,关系运算符一般不单独使用,常与其他运算符结合起来使用。例如: MOV AX, 4 NE 3 表示将4和3进行是否不相等的判断,结果送AX。这里由于4不等于3,所以该关系运算结果应为0FFFFH,并送寄存器AX。, 分析操作符:分析操作符包括OFFSET、SEG、TYPE、SIZE和LENGTH,它们的作用是把一个存储单元地址分解为段地址和偏移地址。 1)OFFSET 表示取标号或变量地址的偏移量,例如: MOV DX,OFFSET STRING 表示将STRING的偏移地址送DX寄存器,属于立即数寻址方式。 2)SEG 表示取标号或变

10、量的段地址。例如: MOV BX,SEG TABLE1 表示将TABLE1的段地址送BX寄存器。 3)TYPE 运算结果是一个数值,表示存储单元操作数的类型。运算结果与操作数类型的对应关系见表51。,例如: VAR DW 1234H ARRAY DB 56H MOV AX,TYPE VAR MOV BX,TYPE ARRAY 上例中前两句伪指令定义了变量VAR的类型为字,变量ARRAY的类型为字节,后两句将VAR、ARRAY的类型对应数值送寄存器AX、BX,即执行TYPE后AX的值应为2,BX的值应为1。,表51 TYPE运算结果与操作数类型的对应关系,4) LENGTH 一般加在数组变量的前

11、面,作用是计算数组变量占存储单元的个数。若使用DUP,则执行结果是外层DUP的给定值;若没有使用DUP,则执行结果为1。例如: D1 DB 10 DUP ( 0FH ) D2 DB ABCDEFGHIJK MOV BH,LENGTH D1 MOV BL,LENGTH D2 前两句伪指令定义变量D1、D2的类型为字节,重复操作符DUP表示从D1开始连续设定10个字节的空间,且将内容设定为0FH。后两句执行了LENGTH运算后,结果分别为10和1,即执行LENGTH后将10送BH,将1送BL。, 属性修改运算符:属性修改运算符有PTR、THIS和STORT,用于指定或修改变量、标号和存储器操作数的

12、类型属性,也称综合运算符。 1)PTR 用于指定或修改存储单元操作数的类型。例如: MOV WORD PTR 5000H, 8 执行PTR后指定存储单元5000H为一个字单元,上面的语句是将数值8送地址为5000H的存储单元,存储单元类型为字,因此执行语句后,5000H存储单元的内容为08H,5001H存储单元的内容为00H。注意,PTR的修改是临时性的,仅在本语句中有效。,2)THIS 也是用来指定或修改存储单元的类型。与PTR不同的是,该运算建立指定类型的地址操作数,其段地址和偏移量与下一个存储单元地址相同,因此THIS运算符更具有灵活性。例如: BEGIN EQU THIS FAR PU

13、SH AX 上述语句是使PUSH AX指令有一个具备FAR属性的地址BEGIN,使得标号BEGIN可以被其他段的JMP指令直接调用。,3)SHORT 用于指定某个标号的类型为“短标号”,即使当前指令位置到指定标号的距离在128127个字节的范围内, 其他运算符: 1)冒号 一般跟在段寄存器名之后,用于给存储单元操作数指定段属性,不必考虑存储单元原来的隐含属性。例如: MOV AX,ES: DI 冒号跟在段寄存器ES之后,表示段寄存器的偏移地址由DI指定。,2)字节分离运算符LOW和HIGH 用于获得一个数值或表达式的低位或高位字节。例如: DATAX EQU 1234H MOV AL,LOW

14、DATAX MOV AH,HIGH DATAX 上述程序中,第一句定义DATAX等于1234H;第二句执行LOW表示取DATAX的低位,即将34H送AL;第三句执行HIGH表示取DATAX的高位,即将12H送AH。,需要注意的是:在表达式中可能出现各种运算的运算符,汇编时都将运算出它们的具体的结果,汇编程序的这个运算过程将按照它们的优先级别进行运算,运算规则是: 先执行优先级别高的运算; 优先级别相同的运算,按从左到右的顺序进行; 可以使用各种括号改变运算顺序。 各种运算符的优先级别见表52,为1的优先级别最高,为11的优先级别最低。,表52 运算符的优先级别,注释也是一个任选项,跟在汇编语句

15、之后,以分号“;”开始,注释内容并不出现在汇编后的机器代码中,也不影响汇编程序的功能。一段完整的程序中,注释是很重要的部分,它用于说明一条指令或一段程序的功能,阐述程序的思路,使程序容易阅读,特别在模块化程序设计中可通过注释将各模块的功能描述出来,大大加强了程序的可读性。,4、注释,这里的符号是指变量名、标号名、过程名、指令助记符和寄存器名,符号定义伪指令用于给一个符号重新命名或定义新的类型属性。 (1)EQU伪指令 EQU伪指令将表达式的值赋予一个名字,这是一个等值语句。定义以后可以用这个名字来代替对应的表达式。表达式可以是一个常数、符号、数值、表达式或地址表达式,EQU伪指令的格式如下:

16、名字 EQU 表达式,一、符号定义伪指令,第二节 伪指令,EQU伪指令可以使程序更加简练。如果源程序中需要多次引用某个表达式,可以用一个比较简短的名字通过EQU伪指令来代表这个表达式。如果将来需要修改表达式,只需修改EQU语句中的表达式,而不必修改多处,便于程序的维护。需要注意的是,EQU伪指令不允许对同一符号重复定义,即同一源程序中,用EQU定义过的变量,不能再定义其他值。例如: FIVE EQU 5 ;FIVE赋值为5 NINE EQU FIVE+4 ;NINE定义为数值表达式,其 值为9 REGS EQU SI ;指定寄存器SI的名字为REGS ADDR EQU TABLE ;将标号TABLE赋值到ADDR,(2)等号(=)伪指令 等号(=)伪指令的功能与EQU伪 指令相仿,区别在于它可以对同一个名字重复定义。其伪指令格式如下: 名字 = 表达式 利用等号(=)伪指令可以使程序设计更加灵活。例如: T

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号