收藏 分享(赏)

第4章+伪指令及汇编语言程序结构.ppt

上传人:scg750829 文档编号:5957320 上传时间:2019-03-22 格式:PPT 页数:69 大小:678.50KB
下载 相关 举报
第4章+伪指令及汇编语言程序结构.ppt_第1页
第1页 / 共69页
第4章+伪指令及汇编语言程序结构.ppt_第2页
第2页 / 共69页
第4章+伪指令及汇编语言程序结构.ppt_第3页
第3页 / 共69页
第4章+伪指令及汇编语言程序结构.ppt_第4页
第4页 / 共69页
第4章+伪指令及汇编语言程序结构.ppt_第5页
第5页 / 共69页
点击查看更多>>
资源描述

1、,第4章 伪指令及汇编语言程序结构,重点掌握: 汇编语言和汇编程序 源程序的格式及程序分段 参数的表达、变量的定义 伪指令的格式、功能及应用 汇编语言源程序的建立、汇编、连接、调试及运行,4.1 汇编语言和汇编程序,汇编语言的特点,汇编语言是一种以处理器指令系统为基础的低级程序设计语言,它采用助记符表达指令操作码,采用标识符号表示指令操作数。 利用汇编语言编写程序的主要优点是可以直接、有效地控制计算机硬件,因而容易创建代码序列短小、运行快速的可执行程序。 在有些应用领域,汇编语言的作用是不容置疑和无可替代的。 汇编程序设计的过程是与其他高级语言程序设计大致相同。,汇编程序功能,汇编程序的主要功

2、能:检查源程序,给出出错信息。产生目标文件(.obj)和列表文件(.lst)。展开宏指令。,汇编语言程序的处理过程(开发步骤):,编辑程序,. ASM文件,汇编程序,. OBJ文件,连接程序,. EXE文件,Edit 等,MASM,LINK,运行 与 调试,1、编辑:形成 .ASM文件 (EDIT) 2、汇编(编译):将.ASM文件翻译成二进制代码的目标文件(即将助记符语言翻译成机器指令),形成.OBJ文件。(MASM) 3、连接:.OBJ虽是二进制文件,但不能直接上机运行,必须经过连接,把目标文件与库文件等其他连接在一起,形成可执行文件.EXE。(LINK) 4、运行:可在DOS提示符下键入

3、文件名运行。 5、调试:在DEBUG下进行动态调试,检查错误等。,4.2 汇编语言语句格式,汇编语言程序由三种基本语句组成:指令语句、伪指令语句、宏指令语句,指令语句格式:,完整的汇编语言程序格式,;大于50送数,小于等于则省略 my_data segment again: Mov al,si array1 db 05,a2H,00,10H,85H Inc sin equ 5 Cmp al, 50 array2 db n dup(?) Jbe next my_data ends Mov di, al my_code segment Inc diassume cs:my_code next: d

4、ec cx assume ds:my_data jnz again begin: mov ax, my_data mov ah,4chmov ds, ax int 21hLea si, array1 my_code endsLea di, array2 end begin Mov cx, n,汇编语言源程序格式,完整的汇编语言源程序由段组成。 一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列。 需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点。 所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内

5、。 通常,程序还需要一个堆栈段。,源程序由语句序列构成,汇编语言的语句格式,执行性语句执行性语句用于表达处理器指令(也称为硬指令),汇编后对应一条指令代码。由处理器指令组成的代码序列是程序设计的主体。 标号: 硬指令助记符 操作数,操作数 ;注释 说明性语句说明性语句用于表达伪指令,指示源程序如何汇编、变量怎样定义、过程怎么设置等。 名字 伪指令助记符 参数,参数, ;注释,汇编语言程序格式,标号 指令 寄存器 说明程序或语句 变量 伪指令 标号 的功能宏指令 变量常数表达式,源程序的每条语句可表示为:名字 操作项 操作数 ; 注释,标号/变量:段值、偏移量、类型三种属性表达式:数字表达式 地

6、址表达式,一、名字项,每条语句中的名字项可以是标号,或伪指令定义的对象。 例:START:PUSH DSXOR AX,AXPUSH AXMESS1 DB NO$ ,标号,用来表示一条指令的地址。,变量,用来表示数据的地址。,不论是标号还是伪指令定义的对象,都可称标识符。 标识符的组成: 标识符的规定:不能以数字开头。标识符的长度31。专用字符?不能单独构成标识符。一般情况下,名字项可以是标号或变量。他们用来表示本语句的符号地址,是可有可无的,只有当需要用符号地址来访问该语句时才出现。,1、标号标号实际上是用符号表示的地址。标号在代码段中定义,后跟“:”号。是一条指令目标代码所在存储单元的符号地

7、址,表明该指令代码在存储器中的位置,可作为转移指令或CALL指令的操作数,以确定程序转移的目标地址。 标号有三种属性:,段属性(SEG):表明该条指令目标代码在哪个逻辑段中,即提供标号所在段的基址。(16位) 偏移量属性(OFFSET):表明标号所在段的偏移地址,即标号所在单元与首地址之间的字节距离。(16位) 类型属性(距离属性):表明标号可作为段内或段间转移的特性。NEAR(近距离):段内转移,只修改IP值,不修改CS值。类型值为-1(0FFH)。FAR(远距离):段间转移,修改CS、IP值。类型值为-2(0FEH)。,2、变量变量是除代码段以外的其他段中的定义,后面不跟“:”号。一般指存

8、放在存储单元中的数据,在程序运行过程中,可随时修改,常以变量名的形式出现在程序中,可作为是存放数据的存储单元的地址。 变量的定义与预置定义变量就是给变量分配存储单元,并且对存储单元赋予一个符号名变量名,同时对这些单元预置初值。,变量的属性: 段属性(SEG):表明变量在哪个逻辑段中,即变量单元所在段的基址。(16位) 偏移量属性(OFFSET):表明变量所在段的偏移地址。(16位) 类型属性(TYPE):表明变量所占存储单元的字节数。类型: 字节(DB) 字(DW) 双字(DD) 属性值: 1 2 4,二、操作项可以是指令、伪指令或宏指令的助记符。,三、操作数项,操作数项由一个或多个表达式组成

9、,中间用逗号隔开。对于指令,一般给出操作数的地址;对于伪指令或宏指令,则给出所要求的参数。操作数项可以是常数、寄存器、标号、变量或由表达式组成。表达式由操作数和运算符组成。,表达式操作运算符:,(1) 算术操作符: 、 、 、mod,MOV DX, BLOCK+(6-1)*2,ARRAY DW 1,2,3,4,5,6,7 ARYEND DW ? MOV CX, (ARYEND-ARRAY)/2,ADD AX, BLOCK+2 ; 符号地址常数 有意义; 时意义不明确 MOV AX, BX+1 ; ,MOV CX,7,OPR1 EQU 25 OPR2 EQU 7AND AX, OPR1 AND

10、OPR2,(2) 逻辑和移位操作符: AND、OR、XOR、NOTSHL、SHR,; AND AX,1,IN AL, PORT_VAL OUT PORT_VAL AND 0FEH, AL,MOV AX, 0FFFFH SHL 2,; MOV AX,0FFFCH,(3) 关系操作符: EQ、NE、LT、LE、GT、GE,计算结果为逻辑值:真 0FFFFH假 0000H,X: Y: ,若 128 (真) 汇编结果: MOV FID, -1 若 128 (假) 汇编结果: MOV FID, 0,MOV FID, (OFFSET Y - OFFSET X) LE 128,(4) 数值回送操作符: OF

11、FSET、SEG、TYPE、LENGTH、SIZE,OFFSET / SEG 变量 / 标号 功能:回送变量或标号的偏址 / 段址,TYPE 变量 / 标号 / 常数DB DW DD DF DQ DT NEAR FAR 常数1 2 4 6 8 10 -1 -2 0,LENGTH 变量 功能:回送由DUP定义的变量的单元数,其它情况回送1,SIZE 变量 功能:LENGTH * TYPE, SIZE = TYPE LENGTH,ARRAY DW 100 DUP (?) TABLE DB ABCDADD SI, TYPE ARRAY ; ADD SI, 2 ADD SI, TYPE TABLE ;

12、 ADD SI, 1 MOV CX, LENGTH ARRAY ; MOV CX, 100 MOV CX, LENGTH TABLE ; MOV CX, 1 MOV CX, SIZE ARRAY ; MOV CX, 200 MOV CX, SIZE TABLE ; MOV CX, 1,(5) 属性操作符: PTR、段操作符、SHORT、THIS、HIGH、LOW、HIGHWORD、LOWWORD,类型 PTR 表达式 例: MOV WORD PTR BX, 5 段操作符 例:MOV ES: BX, AL SHORT 标号 例:JMP SHORT NEXT,THIS 类型 例: TA EQU T

13、HIS BYTENEXT EQU THIS FAR,CONS EQU 1234H MOV AH, HIGH CONS MOV AL, LOW CONS,操作符的优先级,1 () LENGTH SIZE WIDTH MASK 2 PTR OFFSET SEG TPYE THIS : 3 HIGE LOW 4 * / MOD SHL SHR 5 + - 6 EQ NE GT LT GE LE 7 NOT 8 AND 9 OR XOR 10 SHORT,建议采用圆括号“( )”显式表达,它可以极大地提高程序的可阅读性,4.3 伪指令语句,何谓伪指令:并非由CPU执行的指令,而是在汇编程序对源程序进行

14、汇编期间,由汇编程序执行的操作。主要是为汇编程序服务的,为其提供一些必要的格式、信息等。可以处理器选择、存储模式定义、数据定义、存储器分配、指示程序开始结束等功能。,指令和伪指令采用易于记忆的符合表达,这就是助记符,伪指令语句格式:,处理器选择伪操作 段定义伪操作 程序开始和结束伪操作 数据定义及存储器分配伪操作表达式赋值伪操作 地址计数器与对准伪操作 基数控制伪操作,标号、名字与标识符,标号是反映硬指令位置(逻辑地址)和属性的标识符,后跟一个冒号分隔。 名字是反映伪指令位置(逻辑地址)和属性的标识符,后跟空格或制表符分隔,没有冒号。 标识符(Identifier)一般最多由31个字母、数字及

15、规定的特殊符号(如 _、$、?、)组成,不能以数字开头。默认情况下,汇编程序不区别标识符中的字母大小写。 一个源程序中,每个标识符的定义是唯一的,还不能是汇编语言采用的保留字。,保留字,保留字(Reserved Word)是汇编程序已经利用的标识符(也称为关键字),主要有: 硬指令助记符例如:MOV、ADD 伪指令助记符例如:DB、DW 操作符例如:OFFSET、PTR 寄存器名例如:AX、CS 预定义符号例如:data,汇编语言大小写不敏感,操作数和参数,处理器指令的操作数可以是立即数、寄存器和存储单元。 伪指令的参数可以是常数、变量名、表达式等,可以有多个,参数之间用逗号分隔。,注释,语句

16、中由分号“;”开始的部分为注释内容,用以增加源程序的可读性。 必要时,一个语句行也可以由分号开始作为阶段性注释。 汇编程序在翻译源程序时将跳过该部分,不对它们做任何处理。,分隔符,语句的4个组成部分要用分隔符分开。 标号后用冒号,注释前用分号。 操作数之间和参数之间使用逗号分隔。 其他部分通常采用空格或制表符。 多个空格和制表符的作用与一个相同。 MASM支持续行符 “”。,一、数据定义及存储器分配伪操作指令,1、功能:定义变量。变量主要用来定义存储器中的数据,在程序运行中,变量是可以被修改的运算对象。 2、格式: 变量名 DB/DW/DD ;注释,单元地址,数据定义伪指令,数据表达式,变量定

17、义伪指令最常使用,定义数据的操作符有: 字节定义DB字定义DW双字定义DD四字定义DQ十字节定义DT重复定义 m DUP (n) (重复m次个数据 n ) 3、含义在定义变量后,就为变量分配若干个存储单元,并由变量名作为单元起始地址,并把后跟数据存入指定单元即可。,字节变量的定义DB(Define Byte),DB伪指令用于分配一个或多个字节单元,并可以将它们初始化为指定值 初值表中每个数据一定是字节量,存放一个8位数据: 可以是0255的无符号数 或是128127带符号数 也可以是字符串常数,实例,字节变量定义实例,;数据段 X db a,-5db 2 dup(100),? Y db ABC

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

19、位的双字量: 可以是有符号或无符号的32位整数 也可以用来表达16位段地址(高位字)和16位的偏移地址(低位字)的远指针 vardd DD 0,?,12345678h Farpoint DD 00400078h,变量的应用,变量具有存储单元的逻辑地址。 程序代码中 通过变量名引用其指向的首个数据。 通过变量名加减位移量存取以首个数据为基地址的前后数据。,数据定义伪指令的几种数据表达式:数值表达式:由立即数构成。字符串表达式:表示将字符串中的字符的ASCII码存放在存储单元中。?号表达式:不带引号的?表示可预置任何内容。 DUP表达式:DUP是定义重复数据操作符。格式: 变量名 DB/DW/DD

20、 表达式1 DUP(表达式2),重复次数,重复内容,通过上述定义,在存储器中将产生如图所示的结果,以DATA1到DATA6为例: 例:DATA1 DB ?DATA2 DW 1000HDATA3 DD 3000A455HDATA4 DB 4 DUP(0)DATA5 DW 0120H, 0240H, 0360H,例: DATA6 DB THIS IS A EXAMPLE,OPER1 DB ?, ? OPER2 DW ?, ?MOV OPER1, 0 ;字节指令MOV OPER2, 0 ;字指令MOV AX, OPER1+1 MOV AL, OPER2 类型不匹配MOV AX, WORD PTR O

21、PER1+1MOV AL, BYTE PTR OPER2,二、表达式赋值伪操作:,表达式名 EQU 表达式B EQU BP+8 ALPHA EQU 9 BETA EQU ALPHA+18,1、作用:为了使程序便于阅读和修改,我们有时使用一个符号来代表一个数,而符号代表了一定的意义,在程序中使用一个符号代表一个数进行操作。 2、格式:, = 号操作 对符号的赋值还可使用“=”操作,它与EQU的区别是“=”操作可以重复定义,而EQU则不能重复定义。如:X=3Y=6Y=Y*Y-XMOV AX, Y通过上述操作,最后使Y=33,后面的MOV语句中,当生成目标代码时将用33取代Y。即MOV AX, 21

22、H (33D),三、段定义伪操作指令,1、格式:,段名 SEGMENT 定位类型 组合类型 类别名 ; 语句序列段名 ENDS,完整的段定义伪操作,从上述程序中,我们可总结出如下结论: SEGMENT和ENDS前面必须有标号,而且在相互配对的段,它们前面要使用相同的标号。对于不同的段定义标号,尽管这些标号可以是任意字串,但为了程序的可读性,应使其有一定的意义。 ASSUME语句可使汇编器知道CS、DS、SS指向哪个段,但它只在汇编时起作用,在运行时CPU并不知道除CS外的其它段地址,所以必须在程序中用指令进行赋值。 格式:ASSUME 段寄存器:段名1,段寄存器:段名2, 首条被执行的语句有一

23、个标号,用以标出这个程序的开始执行处。(在程序的结尾处使用END后跟这个标号)。,除代码段外,其余段可以省略,也可以与代码段共用一个段。 例:CODE SEGMENTASSUME CS:CODE,DS:CODE,ES:CODESTART: 段定义时的参数(可以省略)定位类型组合类型类别,在程序的开始可以用 NAME 或 TITLE 为程序取名字。 格式为: NAME 程序名TITLE 程序名 整个程序的结束使用 END 标出,当汇编器读到 END 时,它认为程序到此就结束了。(通常使用END后跟程序开始处的标号。) 注: NAME 、TITLE 操作不是必须的。END 则必不可少。,四、程序开

24、始和结束伪操作:,五、对准伪操作,EVEN ;使下一地址从偶地址开始(规则字)A DB morningEVEN B DW 2 DUP (?) ORG ;用于指定目标程序存放单元的起始偏移地址,通常写在第一条源程序的前面,用于指定这段程序的首地址。ORG 100 则程序执行时就从CS:100处开始执行其后面的程序。,地址计数器与对准伪操作:,地址计数器 $ :保存当前正在汇编的指令的地址ORG $+8 ; 跳过8个字节的存储区JNE $+6 ; 转向地址是 JNE 的首址 +6$ 用在伪操作的参数字段: 表示地址计数器的当前值,ARRAY DW 1, 2 , $+4 , 3 , 4 , $+4,

25、六、基数控制伪操作:,. RADIX 表达式(基数值) ; 规定无标记数的基数,MOV BX, 0FF MOV BX, 178D,MOV BX, 0FFH MOV BX, 178,.RADIX 16,4.5 汇编语言程序上机过程,汇编语言程序的上机过程,一、建立ASM文件(EDIT) 二、用MASM(或ASM)产生OBJ文件 三、用LINK产生EXE文件 四、程序的执行和DEBUG调试,汇编语言程序的开发过程,源程序:文件名.asm,目标模块:文件名.obj,可执行文件:文件名.exe,错误,开发过程1:源程序的编辑,源程序文件要以ASM为扩展名。 源程序文件的形成(编辑)可以通过任何一个文本

26、编辑器实现: DOS中的全屏幕文本编辑器EDIT 其他程序开发工具中的编辑环境 Windows中的记事本Notepad EDIT wj.asm,开发过程2:源程序的汇编,MASM 5.x提供的汇编程序是MASM.EXE: MASM wj.asm; 如果利用分号“;”结尾命令,则汇编程序不再提示输入模块文件名、列表文件名等,直接采用默认的文件名。 默认采用源程序文件相同的主文件名,扩展名则是相应类型文件的扩展名,例如模块文件(.obj)和列表文件(.lst)等,开发过程3:目标模块的连接,连接程序能把一个或多个目标文件和库文件合成一个可执行程序(.EXE、.COM文件): LINK wj.obj; 如果没有严重错误,LINK将生成一个可执行文件(wj.exe);否则将提示相应的错误信息。这时需要根据错误信息重新修改源程序文件后再汇编、链接,直到生成可执行文件。,开发过程4:可执行程序的调试,经汇编、连接生成的可执行程序在操作系统下只要输入文件名就可以运行: wj 操作系统装载该文件进入主存,并开始运行 如果出现运行错误,可以从源程序开始排错,也可以利用调试程序帮助发现错误 采用DEBUG.EXE调试程序: DEBUG wj.exe,作 业,习题(第135页)4.1 4.2 4.4 4.6 4.8 4.10 4.15,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > 开发文档

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报