浙工大微机原理及应用第4章汇编语言程序设计

上传人:tia****nde 文档编号:69596128 上传时间:2019-01-14 格式:PPT 页数:66 大小:899.82KB
返回 下载 相关 举报
浙工大微机原理及应用第4章汇编语言程序设计_第1页
第1页 / 共66页
浙工大微机原理及应用第4章汇编语言程序设计_第2页
第2页 / 共66页
浙工大微机原理及应用第4章汇编语言程序设计_第3页
第3页 / 共66页
浙工大微机原理及应用第4章汇编语言程序设计_第4页
第4页 / 共66页
浙工大微机原理及应用第4章汇编语言程序设计_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《浙工大微机原理及应用第4章汇编语言程序设计》由会员分享,可在线阅读,更多相关《浙工大微机原理及应用第4章汇编语言程序设计(66页珍藏版)》请在金锄头文库上搜索。

1、浙工大信息学院,第4章 汇编语言程序设计,机器语言、汇编语言与高级语言 汇编语言语句种类及其格式 汇编语言数据:常数、变量和标号 汇编语言源程序的段结构 汇编语言的运算符:算术运算符、逻辑运算符、关系运算符、数值返回运算符等 一些常用伪指令:符号定义伪指令、程序开始和结束伪指令、全局符号和外部符号伪指令等 过程定义伪指令 中断,浙工大信息学院,4.1 程序设计语言概述,机器语言,汇编语言,高级语言,4.1 程序设计语言概述 1 、机器语言 定义:由0,1二进制代码书写和存储的指令与数据 优点:能为机器直接识别与执行;程序所占内存空间较少 缺点:难认、难记、难编写 2、汇编语言 定义:用指令的助

2、记符、符号地址、标号等书写程序的语言 优点:易读、易写、易记 缺点:不能象机器语言那样为计算机所直接识别,也不如高级语言那样具有良好的通用性和可移植性,3、高级语言 定义:独立于机器、面向用户的通用语言,不依赖于特定计算机的结构与指令系统 优点:简短、易读、易编写、通用性和可移植性 缺点:编译程序或者解释程序复杂、占用内存空间大、目标程序比较大,不适合实时控制 4、小结: 1、2都是面向机器的,是低级语言。高级语言在程序设计的简易性与代码的可移植性等方面有了质的飞跃,当然,用高级语言编写的源程序必须经过编译和连接,将其转变为可执行程序方可在计算机上运行。,我们应根据应用场合加以选用。 Eg:科

3、学计算方面:高级语言 实时控制方面:汇编语言 C/C+ +汇编语言,5、汇编语言程序的上机与处理过程,4.2 汇编语言语句种类及其格式 三种基本语句:指令语句、伪指令语句和宏指令语句 4.2.1 指令语句 执行性语句,汇编时产生一一对应的机器目标代码 格式: 标号: 前缀 指令助记符 操作数项 ;注释 标号字段 任选项。以“:”结束,一个符号是一条指令的符号地址,它代表该指令的第一个字节地址 2. 前缀 一些特殊指令,常作为前缀同其它指令配合使用,例:和串操作指令连用的REP,REPNE,REPE等,3、指令助记符字段 不可或缺,表示这条语句要求CPU完成什么具体操作 4、操作数字段 按指令助

4、记符要求,可以有一个、两个、无操作数,多个操作数用“,”隔开。 5、注释字段 须以“;”开始 4.2.2 伪指令语句 一种说明性语句,本身不产生目标代码,只为汇编程序提供进行汇编所需要的有关信息。 格式: 符号名 伪指令 操作数 ;注释,1、符号名字段: 注后面不得用”:”,符号名可是是常量名,变量名,过程名,结构名等,可以作为指令语句和伪指令语句的操作数,表示一个常量或存储器地址 2、伪指令字段: eg:定义数据伪指令DB,DW,DD,段定义伪指令SEGMENT,过程定义伪指令PROC 3、操作数字段: 可以是一个或多个常数、字符串、变量名、常量名、标号及一些专用的符号如:BYTE,FAR,

5、PARA等。 4、注释。,4.2.3 标识符 指令语句中的标号和伪指令语句中的符号名统称为标识符 组成规则如下: 字符个数:131个 以字母开头,后面可以是字母,数字,?,或下划线 不能使用属于系统专用保留字。如寄存器名,指令助记符,伪指令等 大小写一致,4.3 汇编语言数据 常数、变量和标号。 一个数据包含有它的数值和属性两部分 4.3.1 常数 没有属性的纯数值 可以有以下类型 1、二进制数 B 01 2、八进制数 O/Q 07 3、十进制数 D/省 09 4、十六进制数 H 0F 5、字符串常数:用引号括起来的一个或多个字符,这些字 符用它的ASCII码形式存储在内存中。如A在内存中 就

6、是41H, AB就是41H,42H。 6、实数 R,4.3.2 变量 1、变量的定义与预置 定义变量就是给变量分配存储单元,且对这存储单元赋予一个符号变量名,同时预置初值 变量名,DB DW DD DF DQ DT,表达式1,表达式2,,Eg: VAR_DATA SEGMENT DATA1 DB 12H DATA2 DW 1234H DATA3 DD 12345678H VAR_DATA ENDS 三个属性: (1)段属性(SEG):表示变量存放在哪一个逻辑段中即变量所作段的段地址。 eg:上例中若对DATA1进行存取,须VAR_DATADS (2)偏移量属性(OFFSET):表示变量在逻辑段

7、中离段起始点的字节数,(3)类型属性(TYPE):表示变量占用存储单元的字节数。由数据定义伪指令规定。 预置初值有如下情况 数字表达式 eg ?表达式 eg 字符串表达式 eg 对于DB伪指令,为字符串中每一个字符分配一个字节单元 对于DW,可以给2个字符组成的字符串分配2个字节存储单元,”高高低低” 对于DD,仅可给两个字符组成的字符串分配4个字节单元,且这两个字符ASCII存储在两个低字节中,两个高字节均存放00H。,带DUP表达式:定义重复数据操作符 变量名 表达式1 DUP(表达式2) 2、变量的使用 (1)在指令语句中:直接引用变量名 eg 注:在基址(变址)寻址或基址变址寻址中,引

8、用一个变量名就是取用它的偏移量 (2)在伪指令语句中 eg 注:操作数引用另一变量名就是引用变量名的地址 只能用DW和DD。DW:仅有变量的偏移量 DD:前2个字节偏移量,后2个字节段地址,DB DW DD,eg,4.3.3 标号:一条指令目标代码的符号地址 同变量,有三个属性。(1)段属性,(2)偏移量属性,(3)距离属性 :NEAR 和 FAR 设置标号距离属性有2个方法 隐含方式:隐含为NEAR属性 用LABEL伪指令 名称 LABEL 类型 名称为与之连用的指令或变量一个新的标识符,补充或设置与之连用的指令或变量的类型属性。段地址和偏移量属性同与之连用的指令或变量,即逻辑地址相同。,E

9、g1: SUB1_FAR LABEL FAR SUB1: MOV AX , 30H Eg2: DATA_BYTE LABEL BYTE DATA_WORD DW 20H DUP(?) MOV AX , DATA_WORD+4 MOV AL , DATA_BYTE+4,4.4 汇编语言源程序的段结构 汇编语言源程序的基本结构是段,一个汇编语言源程序有若干个代码段、数据段、附加段和堆栈段组成。 段之间的顺序可以随意安排,通常数据段在前,代码段在后 任何可执行汇编语言源程序至少包含一个代码段,通常还可以有数据段和堆栈段 每一个段都有段首指令和段结束指令,段的内容介于这两条指令之间 4.4.1 段定义

10、伪指令(SEGMENT/ENDS 伪指令) 格式:段名 SEGMENT 定位类型 组合类型 类别名 段名 ENDS,1、段名:用户自己选定,通常使用与本段用途相关的名字。段开始与结尾用的段名应一致 2、定位类型:表示对段的起始边界的要求,可有4种选择 PAGE(页):表示本段从一个页的边界开始,一页256字节,故段基址的最后8位二进制数为0,即以00H结尾的地址 PARA(节):隐含,表示本段从一个节的边界开始,一节16字节,故段基址的最后4位二进制数为0,即以0H结尾的地址 WORD(字):偶地址开始,最后一位二进制为0 BYTE(字节):可以从任一地址开始 3、组合类型 :指定段与段之间是

11、怎样连接和定位的,有6种选择 NONE:隐含。表示本段与其他段无连接关系,PUBLIC:在满足定位类型的前提下,本段与同名的段邻接在一起,形成一个新的逻辑段,共用一个段基址。所有偏移量调整为相对于新逻辑段的起始地址 COMMON:产生一个覆盖段。在两个模块连接时,把本段与其他也用COMMON说明的同名段置成相同的起始地址,共享相同的存储区。 STACK:把所有同名段连接成一个连接段,且系统自动对段寄存器SS初始化为这个段的首址,并初始化堆栈指针SP。用户程序至少有一个段用STACK说明,否则需要用户程序自己初始化SS、SP。 AT表达式:表示本段可定位在表达式所指示的小节边界上 MEMORY:

12、表示本段在存储器中应定位在所有其它段的最高地址。若有多个MEMORY,第一个遇到的当MEMORY处理,其余做COMMON处理,4、类别名 单引号 括起来 在连接处理时,LINK程序把类别名相同的所有段存放在连续的存储区内(如没有指定组合类型PUBLIC、COMMON时,他们仍然是不同的段),小结:对于不大的程序,通常只需要三个段就可以了。Eg: STACK1 SENGMENT PARA STACK . STACK1 ENDS DATA SENGMENT DATA ENDS CODE SEGMENT ASSUME . MAIN: . . CODE ENDS END MAIN,4.4.2 段寻址伪

13、指令(ASSUME伪指令) 作用:指定段与段之间的对应关系 格式: ASSUME 段寄存器名:段名,段寄存器名:段名,. 其中:段寄存器名式CS、DS、SS、ES 说明: 可以用关键字NOTHING将前面的设置删除 Eg: ASSUME ES:NOTHING ASSUME NOTHING ASSMUME伪指令不产生任何目标代码,仅仅告诉汇编程序,哪些段是当前段,且它们分别由哪个段寄存器指向,4.4.3 段寄存器的装入 ASSUME伪指令只是建立了当前段与段寄存器的联系,但不能把各段的段地址装入相应段寄存器种。段寄存器的装入使用程序的方法,且这4各段寄存器的装入略有不同 1、DS和ES的装入 手

14、动装入,在程序中,引用段名就是以立即数形式获取该段的段地址,而立即数不能直接段寄存器,故通过通用寄存器DS ES。设置方法如下: MOV AX , SEGNAME MOV DS , AX 2、SS的装入 有两种方法:,(1)自动装入:在段定义伪指令(SEGMENT)的组合类型须选择“STACK”参数,且在段寻址伪指令在(ASSUME)语句中,把堆栈用的这个段指派给段寄存器SS Eg: STACK1 SEGMENT PARA STACK DB 40H DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE, SS:STACK1 . 这样:当程序目标代码装入寄

15、存器后,系统会自动装入SS、SP,(2)若未选用”STACK”参数项,或在程序中要调换另一个堆栈段,可类似于DS、ES的装入办法。 Eg: DATA_STACK SEGMENT TOP DW 40H DUP(?) DATA_STACK ENDS CODE SEGMENT MOV AX, DATA_STACK MOV SS , AX MOV SP, SIZE TOP,3、CS的装入 自动装入END后指定的起始地址 任何源程序都以END伪指令结束。 格式: END 起始地址 作用:表示源程序结束和指定程序运行时候的起始地址,装入CS、IP。 例:在数据段定义首地址为string1的10个字符,将这10个字符以相反次序传送到附加段首地址为string2的内存单元中。,4.5 汇编语言的运算符 分别介绍算术运算符、逻辑运算符、关系运算符、数值返回运算符、属性操作符。 1、算术运算符 主要包括、*、/、和MOD、 等,说明: 参加运算的数和运算结果均是整数 /只取商的整数部分 MOD:模除,进行整数除法,只取余数部分 减法可用于段内两个操作数地址(以变量名表示)的运算,表示这两个变量的相距字节数。 表示加法,expr1expr2等价于expr1和expr2相加后形成一个存储器操作数地址 注:两个存储器操作数地址(如两个变量名)不能相加 Eg:,N

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

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

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