微机原理7指令系统6伪指令

上传人:ji****n 文档编号:55461377 上传时间:2018-09-30 格式:PPT 页数:137 大小:1.03MB
返回 下载 相关 举报
微机原理7指令系统6伪指令_第1页
第1页 / 共137页
微机原理7指令系统6伪指令_第2页
第2页 / 共137页
微机原理7指令系统6伪指令_第3页
第3页 / 共137页
微机原理7指令系统6伪指令_第4页
第4页 / 共137页
微机原理7指令系统6伪指令_第5页
第5页 / 共137页
点击查看更多>>
资源描述

《微机原理7指令系统6伪指令》由会员分享,可在线阅读,更多相关《微机原理7指令系统6伪指令(137页珍藏版)》请在金锄头文库上搜索。

1、汇编语言的特点,汇编语言是一种以处理器指令系统为基础的低级程序设计语言,它采用助记符表达指令操作码,采用标识符号表示指令操作数 利用汇编语言编写程序的主要优点是可以直接、有效地控制计算机硬件,因而容易创建代码序列短小、运行快速的可执行程序 在有些应用领域,汇编语言的作用是不容置疑和无可替代的 汇编程序设计的过程是与其他高级语言程序设计大致相同,教学重点,汇编语言源程序格式与开发 常量、变量和标号 汇编语言程序设计方法 顺序程序设计 分支程序设计 循环程序设计 子程序设计,首先要分清程序段与汇编源程序的区别,程序段是指用汇编语言编写的程序,但这些程序都还不是完整的汇编语言源程序,在计算机上不能通

2、过汇编生成目标代码,因而也就不能在机器上运行。汇编源程序是指按照严格的汇编语法规则编写的程序,它可以在计算机上通过汇编生成目标代码,因而能在机器上运行。,汇编源程序格式,完整的汇编语言源程序由段组成 一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列 需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点 所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内 通常,程序还需要一个堆栈段,源程序由语句序列构成,例 汇编源程序的例子,DATE SEGMENT ; 定义数据段 MINUS DB ? ;定义MIN

3、US字节单元 NUMBER DB 100 DUP(?) ;定义100个字节单元 DATA ENDS ;数据段结束 CODE SEGMENT ;定义代码段 ASSUME CS: CODE, DS:DATA COUNT EQU 100 ;数据块长度100的符号名 START: MOV AX, DATAMOV DS, AX ;初始化DSMOV MINUS,0 ;MINUS单元清零LEA SI,NUMBER;将数据块首地址(SI)MOV CX, COUNT ;数据块长度(循环次数)(CX) AGAIN: MOV AL, SI ;取一个数到ALOR AL, AL ;置标志位而保持内容不变JNS NOT_

4、MINUS ;若不为负数,则转移到NOT_MINUSINC MINUS ;否则为负数,MINUS单元加 NOT-MINUS: LOOP AGAIN ;CX减,若不为,则转移到AGAINMOV AH, 4CHINT 21H ;停止 CODE ENDS ;代码段结束 END START ;源程序结束,汇编源程序在结构和语句格式上具有以下几个特点:(1)汇编源程序一般由若干段组成,每个段都有一个名字(叫段名),以SEGMENT作为段的开始,以ENDS作为段的结束。从段的性质上看,可分为代码段、堆栈段、数据段和附加段4种。(2)汇编源程序的每一段是由若干行汇编语句组成的,每一行只有一条语句,且不能超过

5、128个字符,但一条语句允许有后续行,最后均以回车结束。整个源程序必须以END语句来结束,它通知汇编程序停止汇编。(3)每一条汇编语句最多由4个字段组成,它们均按照一定的语法规则分别写在一个语句的4个区域内,各区域之间用空格或制表符(TAB键)隔开。汇编语句的4个字段是:名字或标号;操作码(指令助记符)或伪操作命令;操作数表(操作数或地址);注释。,程序开始,为了指明程序开始执行的位置,需要使用一个标号(例题中采用了start标识符) 连接程序会根据程序起始点正确地设置CS和IP值,根据程序大小和堆栈段大小设置SS和SP值 连接程序没有设置DS和ES值。程序如果使用数据段或附加段,必须明确给D

6、S或ES赋值 大多数程序需要数据段,程序的执行开始应是: START:MOV AX, DATAMOV DS, AX ;初始化DS,程序终止,应用程序执行结束,应该将控制权交还操作系统 汇编语言程序设计中,有多种返回DOS的方法,但一般利用DOS功能调用的4CH子功能实现,于是,应用程序的终止代码就是:mov ax,4c00hint 21h,汇编结束,汇编结束表示汇编程序到此结束将源程序翻译成目标模块代码的过程 源程序的最后必须有一条END伪指令END 标号 可选的“标号”参数指定程序开始执行点,连接程序据此设置CS和IP值(例题中采用了start标识符),不要糊涂 程序终止和汇编结束是两码事,

7、汇编语言的语句格式,指令性语句指令性语句用于表达处理器指令(也称为硬指令),汇编后对应一条指令代码。由处理器指令组成的代码序列是程序设计的主体 标号: 硬指令助记符 操作数,操作数 ;注释 指示性语句指示性语句用于表达伪指令,指示源程序如何汇编、变量怎样定义、过程怎么设置等 名字 伪指令助记符 操作数,操作数 ;注释,硬指令与伪指令,硬指令(Instruction)使CPU产生动作、并在程序执行时才处理的指令硬指令就是前边学习的处理器指令,与具体的处理器有关、与汇编程序无关 伪指令(Directive)不产生CPU动作、在程序执行前由汇编程序处理的说明性指令伪指令与具体的处理器类型无关,但与汇

8、编程序有关。不同版本的汇编程序支持不同的伪指令,硬指令和伪指令采用易于记忆的符合表达,这就是助记符,标号、名字与标识符,标号是反映硬指令位置(逻辑地址)和属性的标识符,后跟一个冒号分隔 名字是反映伪指令位置(逻辑地址)和属性的标识符,后没有冒号 标识符(Identifier)标号和名字又称为标识符,组成规则如下: 字符个数不多于31个; 第一个字符必须是字母,不能以数字开头 从第二个字符开始,可以是字母,数字,?, $或_; 不能使用属于系统专用保留字(Reserved word)。默认情况下,汇编程序不区别标识符中的字母大小写,保留字,保留字(Reserved Word)是汇编程序已经利用的

9、标识符(也称为关键字),主要有: 硬指令助记符例如:MOV、ADD 伪指令助记符例如:DB、DW 操作符例如:OFFSET、PTR 寄存器名例如:AX、CS,汇编语言大小写不敏感,操作数,处理器指令的操作数可以是立即数、寄存器和存储单元,操作数之间用逗号分隔 伪指令操作数的可以是常数、变量名、表达式等,可以有多个,操作数之间用逗号分隔,注释,语句中由分号“;”开始的部分为注释内容,用以增加源程序的可读性 必要时,一个语句行也可以由分号开始作为阶段性注释 汇编程序在翻译源程序时将跳过该部分,不对它们做任何处理,分隔符,语句的4个组成部分要用分隔符分开 标号后用冒号,注释前用分号 操作数之间使用逗

10、号分隔 其他部分通常采用空格 多个空格的作用与一个相同 MASM支持续行符 “”,常量、变量和标号,汇编语言的数据可以简单分为常量和变量 常量可以作为硬指令的立即数或伪指令的操作数,变量主要作为存储器操作数 汇编语言语句中的名字和标号具有逻辑地址和类型属性,主要用做地址操作数,也可以作为立即数和存储器操作数 本节将详细讨论语句中的操作数、名字和标号,并引出相关的伪指令和操作符,常量,常量表示一个固定的数值,它又分成多种形式 常数 字符串 符号常量 数值表达式,1. 常数,指由10、16、2和8进制形式表达的数值,各种进制的数据以后缀字母区分,默认不加后缀字母的是十进制数,2. 字符串,字符串常

11、量是用单引号或双引号括起来的单个字符或多个字符 其数值是每个字符对应的ASCII码值 例如:d(等于64H)AB(等于4142H)Hello, Assembly !,3. 符号常量,符号常量使用标识符表达一个数值 MASM提供等价机制,用来为常量定义符号名 符号定义伪指令有“等价EQU”和“等号”:符号名 EQU 数值表达式符号名 EQU ;MASM 5.x不支持符号名 数值表达式 EQU用于数值等价时不能重复定义符号名,但“”允许有重复赋值。例如:X = 7 ;等效于:X qeu 7X = X+5 ;“X EQU X+5”是错误的,4. 数值表达式,数值表达式一般是指由运算符连接的各种常量所

12、构成的表达式 汇编程序在汇编过程中计算表达式,最终得到一个确定的数值,所以也是常量 表达式的数值在程序运行前的汇编阶段计算,所以组成表达式的各部分必须在汇编时就能确定 汇编语言支持多种运算符 我们经常使用的是加减乘除( * / ) 例如: mov ax,3*4+5 ;等价于:mov ax,17,名字和标号的属性,名字和标号是用户自定义的标识符。名字指向一条伪指令,标号指向一条硬指令。名字和标号一经使用便具有两类属性: 逻辑地址名字和标号对应存储单元的逻辑地址,含有段地址和偏移地址; 类型变量名的类型可以是BYTE(字节)、WORD(字)和DWORD(双字)等;标号、段名、子程序名的类型可以是N

13、EAR(近)和FAR(远),分别表示段内或段间调用 汇编程序提供有关的操作符,以便获取这些属性值,1. 地址操作符,地址操作符取得名字或标号的段地址和偏移地址,2. 类型操作符,类型操作符对名字或标号的类型属性进行设置类型名 PTR 名字/标号 其中可以是BYTE、WORD、DWORD(依次表示字节、字、双字)等,或者是NEAR、FAR(分别表示近、远),还可以是由结构、记录等定义的类型,变量,变量实质上是指内存单元的数据,虽然内存单元地址不变,但其中存放的数据可以改变 变量需要事先定义才能使用 变量定义(Define)伪指令为变量申请固定长度的存储空间,并同时将相应的存储单元初始化 定义后的

14、变量可以利用变量名等方法引用其中的数据,即变量的数值,1. 变量的定义,变量定义的汇编语言格式为:变量名 伪指令 初值表 变量名为用户自定义标识符,表示初值表首元素的逻辑地址,常称为符号地址。变量名也可以没有 初值表是用逗号分隔的参数,主要由常量、数值表达式或“?”组成。其中“?”表示未赋初值 多个存储单元如果初值相同,可以用复制操作符DUP进行定义:重复次数 DUP(重复参数) 变量定义伪指令有DB、DW、DD等,格式:变量名 DB(DW、DD) 表达式DB:字节类型1个字节DW:字类型2个字节DD:双字节类型4个字节,字节变量的定义DB(Define Byte),DB伪指令用于分配一个或多

15、个字节单元,并可以将它们初始化为指定值 初值表中每个数据一定是字节量,存放一个8位数据: 可以是0255的无符号数 或是128127带符号数 也可以是字符串常数,实例,字节变量定义实例,;数据段 X db a,-5db 2 dup(100),? Y db ABC,应用,字节变量的应用,mov al,X ;此处X表示它的第1个数据,故ALa dec X+1 ;对X为始的第2个数据减1,故成为6 mov Y,al ;现在Y这个字符串成为 aBC,字变量的定义DW(Define Word),DW伪指令用于分配一个或多个字单元,并可以将它们初始化为指定值 初值表中每个数据是字量,一个字单元可用于存放任

16、何16位数据: 一个段地址 一个偏移地址 两个字符 065535之间的无符号数 3276832767之间的带符号数,字变量定义实例,;数据段 count dw 8000h,?,AB maxint equ 64h number dw maxint array dw maxint dup(0),双字变量的定义DD(Define Double word),DD伪指令用于分配一个或多个双字单元,并可以将它们初始化为指定值 初值表中每个数据是一个32位的双字量: 可以是有符号或无符号的32位整数 也可以用来表达16位段地址(高位字)和16位的偏移地址(低位字)的远指针 vardd DD 0,?,12345678h farpoint DD 00400078h,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 初中教育

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