《微机原理a》

上传人:艾力 文档编号:36716889 上传时间:2018-04-01 格式:PDF 页数:38 大小:341.40KB
返回 下载 相关 举报
《微机原理a》_第1页
第1页 / 共38页
《微机原理a》_第2页
第2页 / 共38页
《微机原理a》_第3页
第3页 / 共38页
《微机原理a》_第4页
第4页 / 共38页
《微机原理a》_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《《微机原理a》》由会员分享,可在线阅读,更多相关《《微机原理a》(38页珍藏版)》请在金锄头文库上搜索。

1、微机原理A微机原理A第六讲: 汇编语言的基本语法(二)第六讲: 汇编语言的基本语法(二)主讲老师:王克义 汇编语言的表达式汇编语言的表达式 汇编语言程序的开发汇编语言程序的开发本讲主要内容本讲主要内容6.1 汇编语言的表达式汇编语言的表达式1. 表达式及分类表达式及分类用伪操作符将操作对象组合起来即得到表达式, 单个操作对象也可称为表达式。表达式可作为指 令语句中的操作数或伪指令语句中的参数。按操 作性质的不同可将表达式分为四类: 算术表达式算术表达式 逻辑表达式逻辑表达式 关系表达式关系表达式 特殊表达式特殊表达式2. 表达式的操作顺序表达式的操作顺序表达式中常用的伪操作符按以下顺序依次优先

2、处理:表达式中常用的伪操作符按以下顺序依次优先处理: (i)()、 、 、(ii)LENGTH、WIDTH、SIZE、MASK(iii)(结构字段名操作符结构字段名操作符) (iv): (段超越前缀的操作符段超越前缀的操作符) (v)PTR、OFFSET、SEG、TYPE、THIS (vi)HIGH、LOW (i)+ (正号正号)、- (负号负号) (ii)*、/ (iii)MOD、SHL、SHR (iv)+、 - EQ、NE、LT、LE、GT、GE (i) NOT (ii) AND (iii) OR、XOR SHORT例如,因为例如,因为“HIGH”运算优先于运算优先于“+”运算,所以,运算

3、,所以, HIGH 1234H + 2 = 12H + 2 = 14H HIGH (1234H + 2) = HIGH 1236H = 12H6.2 汇编语言的伪指令说明符汇编语言的伪指令说明符1. 数据定义数据定义(存储单元分配存储单元分配) 数据定义说明符用于定义变量,也就是为变量分 配存储单元并可同时预置初始值,有DB、DW、 DD、DF、DQ、DT共6种说明符。 分别表示存储单元分配时以字节为单位、以字为 单位、以双字为单位、以3字(远字)为单位、以4 字为单位、以10字节为单位。例如,在下述定义中,例如,在下述定义中, A DB 12H, ? B DW ?, 3456H C DD 7

4、89ABCDEH D DB A, B, C, D E DB ABCD F DW AB, CD上述各变量的存储情况如图7.4所示。显然, DBAB和DWAB的存储情况不同。A图图3.4 变量在存储器中的存储情况变量在存储器中的存储情况12 ? ? 56 34BDE BC 9A 78C41 42 43 44D41 42 43 44E42 41 44 43FDATA SEGMENT TAB DW 1,2,3,4,5,6 ENTRY EQU 3 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA L: MOV AX, DATA MOV DS, AX MOV B

5、X,OFFSET TAB ADD BX, ENTRY ; MOV AX, TAB+3 MOV AX, BX CODE ENDS END L上述程序执行后,上述程序执行后,AX=程序例程序例2. 符号定义符号定义(表达式赋值表达式赋值) 有 =、EQU、PURGE共3种说明符,含义分别是被赋 予、被赋予、取消(释放)。有 =、EQU、PURGE共3种说明符,含义分别是被赋 予、被赋予、取消(释放)。 (1)格式: 符号名符号名 = 表达式表达式 将表达式的值赋予符号名,以后即可用该符号名代表此表达 式的值。 (2) 格式: 符号名符号名 EQU 表达式或另一组标识符表达式或另一组标识符 将表达式

6、的值或另一组标识符赋予符号名,以后即可用该符 号名代表此表达式的值或代替另一组标识符。 (3) 格式: PURGE 符号名符号名1,符号名,符号名2, 取消(释放)被EQU定义的符号名,以后即可用EQU对该符号名 再赋予不同的含义。3. 段定义段定义 段定义说明符有3种,即SEGMENT、ENDS和ASSUME,SEGMENT、ENDS和ASSUME, 含义分别是段开始、段结束、指定段寄存器。含义分别是段开始、段结束、指定段寄存器。(1)格式: 段名 SEGMENT定位类型组合类型类别(1)格式: 段名 SEGMENT定位类型组合类型类别从段名代表的段基值开始定义一个段。其中的定位类型、组 合

7、类型和类别一般都可省略,若不省略时各项的顺序不能变。 定位类型 定位类型: 连接时用于指定该段应开始于什么样的物理地 址。可选择下列4种之一: BYTE:从当前可用字节地址XXXX XXXX XXXX XXXX XXXX(任一地址)开始;BYTE:从当前可用字节地址XXXX XXXX XXXX XXXX XXXX(任一地址)开始; WORD:从当前可用的字地址XXXX XXXX XXXX XXXX XXX0(偶数地址)开始;WORD:从当前可用的字地址XXXX XXXX XXXX XXXX XXX0(偶数地址)开始; PARA(缺省):从当前可用地址XXXX XXXX XXXX XXXX 00

8、00(16倍数)开始;PARA(缺省):从当前可用地址XXXX XXXX XXXX XXXX 0000(16倍数)开始; PAGE:从当前可用的页地址XXXX XXXX XXXX 0000 0000(256的倍数)开始。PAGE:从当前可用的页地址XXXX XXXX XXXX 0000 0000(256的倍数)开始。 其中,1节(paragraph) 为16字节,1页为16节即256字节。其中,1节(paragraph) 为16字节,1页为16节即256字节。 组合类型: 连接时用于指定同名的各段之间的 组合类型: 连接时用于指定同名的各段之间的 组合方式。可选择下列组合方式。可选择下列6种之

9、一:种之一: PUBLIC STACK COMMON MEMORY AT表达式表达式 NONE(缺省缺省)若省略组合类型或说明为NONE类型,则表示各个段不组 合,各有自己的段基值。若省略组合类型或说明为NONE类型,则表示各个段不组 合,各有自己的段基值。 对堆栈段,必须用STACK类型说明,不能省略。对堆栈段,必须用STACK类型说明,不能省略。 类别: 是要将组合后的各段按类别分 类存放,同类别的段将被相邻地放在一起。类 别是由用户定义的、用一对引号括起来的、长 度不超过40个字符的名字(标识符)。 类别: 是要将组合后的各段按类别分 类存放,同类别的段将被相邻地放在一起。类 别是由用户

10、定义的、用一对引号括起来的、长 度不超过40个字符的名字(标识符)。 (2)格式: 段名格式: 段名 ENDS表示该段到此结束。这里的段名必须与该段开始时 SEGMENT左边的段名相同。 (3) 格式:格式: ASSUME 段寄存器名段寄存器名1:段名段名1,段寄 存器名,段寄 存器名2:段名段名2, 该语句必须出现在有关的变量及标号使用之前,用于指定 某段(用段名标识)中的变量、标号等数据项由哪个段寄存 器寻址。4. 指定段内的偏移地址指定段内的偏移地址常用的有ORG和和EVEN两种说明符,是指定下一个 要用的存储单元的偏移地址。 (1)格式: ORG 常数表达式常数表达式 指定当前可用的存

11、储单元的偏移地址为常数表达 式的值,就是将常数表达式的值送入$。 (2) 格式: EVEN 将当前可用的存储单元的偏移地址调整为最近的 偶数值,就是将当前可用的最小偶数偏移地址值 送入$。例如,在下述伪指令语句序列中, ORG 1000H A DB 47H, 12H, 45H EVEN B DB 47HORG 1000H 将A的偏移地址部分指定为 1000H,从A开始存放3个字节变量,占用地址 1000H、1001H和1002H,B的偏移地址部分本应 是本应 是1003H,但EVEN指令会将B的偏移地址部分调 整为偶数地址调 整为偶数地址1004H。 对于字数组,为保证其从偶地址开始,可在它前

12、 面用EVEN 伪操作来达到这一目的,形如:DATA-SEG SEGMENT EVEN WORD-ARRAY DW 100 DUP(?) DATA-SEG ENDS5. 过程定义过程定义 有PROC、ENDP两种说明符,含义分别是过程 开始与过程结束,必须成对出现。 (1)格式: 过程名过程名 PROC 类型属性名 从过程名代表的地址开始定义一个过程,其中的 类型属性名可选择NEAR或FAR两种之一,前者表示 该过程为近过程,后者表示该过程为远过程。 如果不给出类型属性名或给出NEAR,则视为近过 程。 (2)格式: 过程名过程名 ENDP 表示该过程到此结束。这里的过程名必须与过程 开始时P

13、ROC左边的过程名相同。Proc-APROCNEAR(或FAR) _ 过程名过程名_ . . . _ RET Proc-AENDP过程(子程序)的基本结构过程(子程序)的基本结构6. 类型定义类型定义 类型定义说明符只有一个,即LABEL,可用来给 当前地址处的变量或标号取一个别名,并赋予另一 种类型属性。 格式: 变量名或标号 LABEL 类型属性名 “LABEL”和“EQU THIS”的作用类似7.宏定义、宏调用和宏扩展宏定义、宏调用和宏扩展 宏(MACRO)是源程序中一段有独立功能的程序 代码、它只需在源程序中定义一次,就可以多次 用一条宏指令来调用它。 宏定义宏定义是用伪指令来实现的。

14、其格式为:MACROENDMdummy Parameter List宏指令名宏定义体 形式参数宏指令名宏定义体 形式参数 (用逗号隔开)Macro-name其中其中MACRO和和ENDM是一对伪指令说明符,这对伪指令之 间是宏定义体是一对伪指令说明符,这对伪指令之 间是宏定义体一组有独立功能的程序代码一组有独立功能的程序代码 经宏定义定义后的宏指令就可以在源程序中调 用经宏定义定义后的宏指令就可以在源程序中调 用,这种对宏指令的调用称宏调用对宏指令的调用称宏调用,宏调用的格 式为:Macro-name actual parameter list(每一项之间用逗号隔开) 当源程序被汇编时,汇编程

15、序将对每个宏调用作 宏展开宏展开。 宏展开就是用宏定义体取代源程序中的宏指令 名,而且用实在参数一一取代宏定义的形式参数。宏定义宏定义:SAVEREG MACRO PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI ENDM宏调用宏调用: SAVEREG宏展开宏展开: 将宏定义体的内容(具有独立功能的代码段具有独立功能的代码段)全部 列出。宏定义开始宏定义体宏定义结束宏指令宏定义开始宏定义体宏定义结束宏指令例1.例1. 宏定义可以无变元宏定义可以无变元例2例2宏定义带形式参数宏定义带形式参数宏定义宏定义: FOO MACRO P1, P2, P3 MOV AX, P1 P2 P3 ENDM宏调用宏调用: FOO WORD_VAR, INC, AX 宏展开宏展开: MOV AX, WORD_VAR INC AX子程序调用和宏调用工作方式的区别子程序调用和宏调用工作方式的区别子程序调用工作方式:子程序调

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

当前位置:首页 > 行业资料 > 其它行业文档

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