第四章10.9.08汇编语言语法与ODS功能调用.ppt_第1页
第四章10.9.08汇编语言语法与ODS功能调用.ppt_第2页
第四章10.9.08汇编语言语法与ODS功能调用.ppt_第3页
第四章10.9.08汇编语言语法与ODS功能调用.ppt_第4页
第四章10.9.08汇编语言语法与ODS功能调用.ppt_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

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

文档简介

1、第4章 汇编语言语法和DOS功能调用,4.1 汇编语言程序的格式 4.2 汇编语言中的基本数据 4.3 伪指令语句 4.4 汇编语言中的表达式 4.5 指令语句 4.6 宏指令语句及其使用 4.7 DOS系统功能调用 4.8 习题例解 4.9 练习题,4.1 汇编语言程序的格式 例4-1 试求小于100的所有非零偶数,并把结果存入以BUFF开 始的内存区。 1 MY_DATA SEGMENT ; 定义数据段 2 BUFF DB 50 DUP(?) ; 设置缓冲区 3 MY_DATA ENDS ; 定义数据段结束 4 MY_CODE SEGMENT ; 定义代码段 5 ASSUME CS:MY_

2、CODE, ; 规定CS和DS的内容 DS: MY_DATA 6 START: MOVAX, MY_DATA ; DS初始化为MY_DATA 7 MOVDS, AX,8 MOV AL, 2 ; 置循环初始值 9 LEA BX, BUFF 10 LLP: MOV BX, AL ;循环体 11 INC AL 12 INC AL 13 CMP AL, 100 ;循环控制 14 JNZ LLP 15 INT 20H ;返回DOS 16 MY_CODE ENDS ; 代码段结束 17 ENDSTART ; 整个程序结束,汇编语言程序的格式可以归结为以下几点: (1) 段的结构 段名1 SEGMENT 伪

3、指令语句定义段! 语句1 语句i 段名1ENDS 段名2 SEGMENT 语句1 语句j,段名2ENDS 段名n SEGMENT 语句1 语句k 段名n ENDS END 标号,(2)语句的结构 3种基本语句类型: 指令语句 伪指令语句 宏指令语句 语句一般有4个部分组成,即: 标号或名字 操作码 操作数 ;注释 标号或名字: 这是一个任选部分,在语句之首,8 MOV AL, 2 ; 置循环初始值 9 LEA BX, BUFF 10 LLP: MOV BX, AL ;循环体 11 INC AL 12 INC AL 13 CMP AL, 100 ;循环控制 14 JNZ LLP 15 INT 2

4、0H ;返回DOS 16 MY_CODE ENDS ; 代码段结束 17 ENDSTART ; 整个程序结束,4. 2 汇编语言中的基本数据 1、标识符 标识符-由程序员自由建立起来的,有特定意义的字符序列。 标识符的组成规则如下: 必须由字母、数字(0,9)及特殊符号(?, ,)组成,且必须以字母打头。 字符总数限制在31个以内。 不能使用属于系统专用保留字(保留的字)。,4. 2 汇编语言中的基本数据 2、常数 语句中出现的那些固定值,除了自身的值以外,没有其它任何属性。 常数分为两类 (1)数值常数 B Q D或不用 H (2)字符串常数 不超过255个 如:D7S4,3、变量 存放在存

5、储器单元中的操作数,它的值是可以改变的,在程序中出现的是存储器单元地址的符号,即与某一数据项第一字节相对应的标识符。 变量的3个属性: 段地址:变量所在段的段地址; 偏移地址:变量所在段内的偏移地址; 类型:所定义的每个变量所占据的字节数。,4、标号 可执行指令语句地址的符号表示,即用标识符来表示地址。 标号的3个属性: 段地址:与标号对应的指令首字节所在的段地址。 偏移地址:与标号对应的指令首字节所在的偏移地址。 类型:标号的类型属性有两种:NEAR和FAR类型。,4.3 伪指令语句 伪指令语句可分为以下几种类型: 数据定义伪指令语句 标识符赋值与解除伪指令语句 段定义伪指令语句 过程定义伪

6、指令语句 程序开始与结束伪指令语句 方式定义伪指令语句 结构定义伪指令语句 分组伪指令语句 其它伪指令语句,1、数据定义伪指令语句 共有五条:DB、DW、DD、DQ和DT,分别用来定义字节、字、双 字、8字节和10字节。 指令格式: 变量名 助记符 操作数1,操作数2,操作数n ;注释 变量名 助记符 n DUP(操作数1,操作数2,操作数n) ;注释,例4-2 操作数是常数、表达式、字符串数据的定义 DATA1 DB 15H,25H DATA2 DW 9988H,56H DATA3 DD 2*40H,0AABBH DATA4 DB HELLO,图4-1 例4-2的汇编结果,例4-3 操作数用

7、“?”定义不确定值的变量,用DUP来定义重复变量,不确定值的变量一般用作保留存储空间,以便存放运算结果。 DATA1 DB ? DATA2 DW 0D55H, ? DATA3 DB 5 DUP(0) DATA4 DW 10 DUP(?) DATA5 DB 4 DUP(1,2 DUP(20) ),2、标识符赋值与解除伪指令语句 共有4条:等值伪指令语句EQU 等号伪指令语句“=” 解除伪指令语句PURGE 别名定义伪指令语句LABEL (1)等值伪指令EQU语句 指令格式:标识符 EQU 操作数,P128 例4-4 DATA EQU 100 DATA1 EQU DATA2 CI EQU ADD,

8、(2)等号伪指令语句“=” 指令格式: 标识符=操作数,P128 例4-5 DATA =100 DATA1 = DATA +10 SOURCE=BXSI MOV AX,SOURCE SOURCE=BX MOV CX,SOURCE,(3)解除伪指令语句PURGE 指令格式: PURGE 标识符1,标识符2,标识符n 功能:用该指令解除标识符,以后可用EQU重新定义,(4)别名定义伪指令语句 格式:别名 LABEL 类型属性 LABEL,伪指令助记符,不可缺省。 功能:给下一个变量或标号取另一个名字,重新定义类型,灵活 P129 例4-6 定义变量的别名 DATAB LABEL BYTE DATA

9、W DW 1234H,5678H DISF LABEL FAR DISN MOV AX,SI,3、段定义伪指令语句 (1)段结构定义伪指令语句 SEGMENTENDS 指令格式: 段名 SEGMENT 定位类型 组合类型 分类名 逻辑段内容 段名 ENDS 功能:将一个逻辑段的内容定义成一个整体。 段名:本段在存储器中的位置 助记符:SEGMENT END 参数:,4种定位类型:PARA、BYTE、WORD和PAGE P130 6种组合类型:NONE、PUBLIC、COMMON、AT、STACK和MEMORY 类别名:可省略,不超过40个字符,将所有分类名相同的逻辑段组成一个段组。,(2)段分

10、配伪指令语句 指令格式:ASSUME CS:段名,DS:段名,SS:段名,ES:段名 功能:定义当前有效的4个逻辑段,指明段和段寄存器的关系,并把代码段的段基址装入CS,例4-1 试求小于100的所有非零偶数,并把结果存入以BUFF开 始的内存区。 1 MY_DATA SEGMENT ; 定义数据段 2 BUFF DB 50 DUP(?) ; 设置缓冲区 3 MY_DATA ENDS ; 定义数据段结束 4 MY_CODE SEGMENT ; 定义代码段 5 ASSUME CS:MY_CODE, ; 规定CS和DS的内容 DS: MY_DATA 6 START: MOVAX, MY_DATA

11、; DS初始化为MY_DATA 7 MOVDS, AX,说明: 一般放在代码段的开始,段名为用SEGMENT定义过的名字 : , 通常代码段必须,数据段必须 ASSUME ES:NOTHING 取消 取消已经由ASSUME指定的段寄存器 其他的段,在代码段开始的程序中仍然需要初始化程序,把段基址装入相应寄存器,4、过程(子程序)定义伪指令语句 指令格式:过程名 PROC 属性 过程内容 RET 过程名 ENDP 功能:定义一个在主程序中可以用CALL指令调用的过程。 CALL 过程名,说明: 过程名与属性:子程序入口的符号地址, 属性有三: 段属性:过程所在段的段基址 偏移地址属性:该过程第一

12、个字节与段首之间的字节数 距离属性: NEAR(默认) FAR 助记符:PROC ENDP 过程调用的子程序与主程序分开独立存在,经汇编后存储器中只占有一个子程序段的空间,主程序转入此处运行,因此目标代码长度短,节省空间,5、 程序开始与结束伪指令语句 共有4条伪指令语句:NAME、TITLE、ORG和END。 (1)目标模块命名伪指令语句 格式:NAME 程序名;定义一个程序名,程序每一页开头输出 TITLE 文本名; 功能:为源程序目标模块赋一个程序名。,(2)定位伪指令语句 格式:ORG 表达式 功能:下一条语句的起始偏移位置 ORG $+6,例4-7 用ORG指定数据段和代码段地址。

13、DATA SEGMENT X1 DW 20H,60H, ORG 100H X2 DB 10H,20H,30H ORG 200H X3 DW 1234H, 4321H DATA ENDS CODE SEGMENT ORG 100H ASSUME CS:CODE,DS:DATA START: MOV AX,DATA CODE ENDS,(3)程序结束伪指令语句 格式: END 标号名 例4-8 程序结束伪指令语句的应用 CODE SEGMENT START:MOV AX,BX MOV CX,12H CODE ENDS END START START为程序开始执行的起始地址,6、 方式定义伪指令语句

14、 汇编语言有两种操作方式:8086和80386 格式: .8086 默认的 .386 使用32位寄存器必须加 功能:定义汇编程序的操作方式,7、 结构定义伪指令语句 有三条语句:结构定义伪指令,结构存储分配和预置伪指令及结构使用伪指令。 (1)结构定义伪指令语句 格式:结构名 STRUC 数据变量序列 ;为DB、DW等; 结构名 ENDS,例4-9 定义一个数据表格TAB的结构 TSTRU STRUC DA1 DB SXYZ DA2 DW ? DA3 DW SEG LP1 DA4 DW 2 DUP(3) DA5 DW 5678H,1234H TSTRU ENDS 只定义,汇编时不产生目标代码,

15、不分配空间 字符串、简单变量、多重变量,(2) 结构存储分配和预置伪指令语句 格式:结构变量名 结构名 元素值,元素值 结构变量名 结构名 N DUP(元素值,元素值),例4-10 对例4-9中的TAB结构进行存储空间分配和预置,形成4个结构变量。P4-10 DATA1 TSTRU DATA2 TSTRU FROM DATA3 TSTRU ,7FH,SEG LLL DATA4 TSTRU 5 DUP(7890,11H) 连续预置了5个相同的结构变量,每个结构变量的 第一个元素和第二个元素为7890 和 11H,(3) 结构使用伪指令语句 格式:结构变量名字段变量 DATA1.DA1=FORM

16、功能:给出了不同结构变量名的数据结构中的变量元素值 设当前数据段基址为1000H,结构变量DATA1的偏移地址为100H,则例4.10中的4个结构变量在存储器中的地址分配如图4-3所示。 经过预置的结构变量,具有三属性: 段属性、偏移地址属性、类型属性BYTE WORD DWORD,(a)DATA1 TSTRU (c)DATA3 TSTRU (b) DATA2 TSTRU (d)DATA4 TSTRU 5 DUP(),图4-3 例4.10中的4个结构变量的存储分配和预置,8、 分组伪指令语句 格式:组名 GROUP 段1,段2, 功能:将段1、段2等逻辑段放在同一个64KB的物理段内,并给它起

17、一个新的名字。,例4-11 GROUP1 GROUP SEG1,SEG2,SEG3 ASSUME DS:GROUP1 MOV AX,GROUP1 MOV DS,AX MOV BX,GRPUP1:VAR1 ,9、 其它伪指令语句 (l)外部伪指令语句 格式:PUBLIC 名称1,名称2, EXTRN 名称1:类型,名称2:类型, 功能:PUBLIC定义全局标识符,名称在本模块中定义的 EXTRN指出外部标识符,名称为在其他模块中用PUBLIC定义的 类型:BYTE WORD NEAR FAR 常数为ABS,例4-12 用EXTRN和PUBLIC语句实现模块间标识符的交叉访问 模块1 EXTRN

18、DATA2:BYTE, SUBTR1:NEAR PUBLIC TABLE, DATA1 DSEG SEGMENT TABLE DB 100 DUP(?) DATA1 DW ? DSEG ENDS,CODE SEGMENT ASSUME CS:CODE, DS:DSEG MOV AX, DSEG MOV DS, AX MOV AL, DATA1 CALL SUBTR1 MOV AX, SEG DATA2 MOV ES, AX MOV BX, ES:DATA2 CODE ENDS END,模块2 EXTRN TABLE:BYTE PUBLIC SUBTR1, DATA2 DSEG SEGMENT

19、DATA2 DB ? DSEG ENDS CODE SEGMENT SUBTR1: CODE ENDS END,(2)对准伪指令语句 格式:EVEN ;下一个语句的地址调整为偶地址 例4-13 EVEN直接放在某一语句前,汇编程序汇编时就会完成将地址调整在偶地址上。 DATA SEGMENT ORG 100H A1 DB 0DH EVEN A2 DW 100 DUP(?) DATA ENDS,(3)条件汇编伪指令语句 一般格式是: IF ;如果条件成立 ELSE ;否则 END IF ;结束条件汇编语句,IF有多种形式,它们是:P138 IF 操作数 IFE 操作数 IFDEF 标号或变量 I

20、FNDEF 标号或变量 IFB IFNB IFIDN , IFDIF , IF1 IF2,4.4 汇编语言中的表达式 表达式-运算对象和运算符组成。汇编语言中有类运算 符,即: 算术运算符; 逻辑运算符; 关系运算符; 分析运算符; 修改属性运算符; 其它运算符 。,、算术运算符 算术运算符有:加()、减()、乘(*)、除()、取模运算(MOD)、左移(SHL)和右移(SHR)。 取模运算是取两数相除的余数,对象必须为正整数。 例如: 92 MOD 16 结果为12(相当于取低4位的值) 97H MOD 20H 结果为23(相当于取低5位的值) 33H MOD 7 结果为2,例4-14 包含乘

21、法和减法算术运算符的表达式 DATA SEGMENT ARY DB 10,20,30,40,50 TY DB 20 DATA ENDS CODE SEGMENT MOVBX, 50*4 MOVCX, (TY-ARY) CODE ENDS,例4-15 源程序包含除法、减法、模运算和移位运算的表达式 DATA SEGMENT KA EQU 900 DATA ENDS CODE SEGMENT MOV BX, KA-70 MOV AX, KA MOD 100 MOV CX, KA/100 MOV DH, 01100100B SHR 3 CODE ENDS,MOV BX,830 MOV AX,0 MO

22、V CX,9 MOV DH,0CH,2、逻辑运算符 逻辑运算符有:与(AND)、或(OR)、非(NOT)和异或(XOR),例 4-16 AND、OR、NOT、XOR逻辑运算的表达式 MOV AL,NOT 0AAH ;含有表达式NOT 0AAH MOV BL,23H AND 0FH ;含有表达式23H AND 0FH MOV CH,24H OR 0F0H ;含有表达式24H OR 0F0H MOV DH,25H XOR 0FFH ;含有表达式25H XOR 0FFH 汇编时,汇编程序对表达式进行计算,汇编后相应的指令变成: MOV AL,055H MOV BL,03H MOV AH0F4H MO

23、V CH,0DAH,3、关系运算符 关系运算符有:相等 EQ、不等 NE、小于 LT、大于 GT、小于 或等于 LE、大于或等于。 4、分析运算符 分析运算符有:OFFSET、SEG、TYPE、LENGTH、SIZE (1)OFFSET 格式:OFFSET 变量或标号 ;取偏移地址,例4-17 用OFFSET返回标号或变量偏移地址值的表达式 DATA SEGMENT DAT1 DB 81H DATA ENDS CODE SEGMENT MOV SI,OFFSET LAB1 LAB1: MOV BX,OFFSET DAT1 CODE ENDS,(2)SEG 格式:SEG 变量或标号 ; 取段基址

24、 (3)TYPE 格式:TYPE 变量或标号 ;返回类型和距离 表4-1 TYPE运算符返回值,例 4-18 TYPE加在变量和标号前的表达式 DATA EGMENT XX1 DW 40H, 14H XX2 DD 1048H XX3 DB 30H,31H,32H DATA ENDS CODE SEGMENT LP1: MOV AL,TYPE XX1 MOV BL,TYPE XX2 ADD AH,TYPE XX3 MOV BH,TYPE LP1 CODE ENDS,汇编时,汇编软件首先把表达式计算成常数,汇编后的相应指令如下: LP1: MOV AL, 2 MOV BL, 4 ADD AH, 1

25、 MOV BH,0FFH,(4) LENGTH 格式:LENGTH 变量 返回变量的个数,只有当变量中使用DUP时,才返回个数,否则为1 例 4-19 LENGTH加变量的表达式 DATA SEGMENT XX1 DD 150 DUP (?) XX2 DW ?,12,13 XX3 DB HOW ARE YOU DATA ENDS CODE SEGMENT MOV AX, LENGTH XX1 MOV AL, LENGTH XX2 MOV BL, LENGTH XX3 CODE ENDS,汇编后的相应指令如下: MOV AX,150 MOV AL,1 MOV BL,l,(5) SIZE 格式:S

26、IZE 变量 ;返回变量所包含的总字节数 把例4-19中含有LENGTH表达式改为SIZE表达式,即: MOV AX, SIZE XX1 MOV AL, SIZE XX2 MOV BL, SIZE XX3 汇编后的相应指令如下: MOV AX,600 MOV AL,2 MOV BL,l,SIZE=LENGTH*TYPE,5、修改属性运算符(综合运算符) 修改属性运算符有:段操作符、PTR、THIS、HIGH、LOW、 SHORT (1) 段操作符 格式: 段前缀 : 变量或地址表达式 (2) PTR 格式: 类型 PTR 变量 距离 PTR 标号 ;将左边赋给右边,例 4-20 带PTR表达式

27、的变量 DATA SEGMENT CC1 DB 16H,36H CC2 DW 1122H,3344H DATA ENDS CODE SEGMENT LL1: MOV AX,WORD PTR CC1 MOV BL,BYTE PTR CC2 MOV BYTE PTR BX, 10H MOV WORD PTR BX, 10H JMP FAR PTR LL1 CODE ENDS,(3) THIS 格式: 变量 EQU THIS 类型 ;将右边赋给左边 标号 EQU THIS 距离 例如: DATA1 EQU THIS BYTE TABLE DW 200 DUP(?) 又如: LL1 EQU THIS

28、FAR MOV AX,100,DATA1的偏移地址值与TABLE相同,但DATA1为字节,TABLE为字!,给MOV AX,100前的标号LL1修改距离为FAR,(4) SHORT 格式:SHORT 标号 功能:指出转移类指令,目的地址范围在-128127间,(5) HIGH和 LOW 它们称为字节分离运算符 格式: HIGH 变量或标号 ;分别 分离高低字节部分 LOW 变量或标号,例4-21 带HIGH和 LOW表达式的变量 DATA SEGMENT BB1 EQU 1234H BB2 EQU 0A0B0H DATA ENDS CODE SEGMENT MOV AH,HIGH BB1 MOV BL,LOW BB2 CODE ENDS,6、其它运算符 不介绍 7、注意点: (1)注意表达式中各运算符和操作符的优先级 P145 (2)注意数制统一 : 计算时将数据统一成同一进制数表示,4.5 指令语句 指令语句的格式: 标号: 前缀指令 助记符 操作数 ;(注释),(1) 立即寻址和直

温馨提示

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

最新文档

评论

0/150

提交评论