汇编语言程序设计.ppt_第1页
汇编语言程序设计.ppt_第2页
汇编语言程序设计.ppt_第3页
汇编语言程序设计.ppt_第4页
汇编语言程序设计.ppt_第5页
已阅读5页,还剩138页未读 继续免费阅读

下载本文档

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

文档简介

南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 第四章 8086汇编语言程序设计 n几个概念 n8086汇编语言的语句 n8086汇编中的伪指令 n8086汇编中的运算符 n汇编语言程序设计 n宏定义与宏调用 n汇编语言系统程序设计实例与上机调试 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 几个概念 u程序是一组为完成某种功能而按一定顺序(由算法 确定)编排的指令序列。 u本章将首先介绍8086宏汇编语言的基本语法及常用 伪指令,然后用实例说明8086宏汇编语言源程序的 设计方法。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 1. 3种语言 u机器语言:当指令和数据都用二进制代码表示时, 计算机能够直接识别与执行,因而称 之为机器语言。 u高级语言:是完全独立于机器的通用语言,效率低。 面向过程、面向对象,必须译成机器语言。 u汇编语言:汇编语言是一种用符号表示的、面向CPU 指令系统的程序设计语言。 是用指令的助记符、符号地址、标号等 编写程序的语言 。 汇编语言程序是机 器语言程序的符号 表示 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 用汇编语言编写程序能够: 程序目标代码占用内存少,执行速度快,效率高,具有实时 性. 直接利用硬件系统的特性(如寄存器、标志、中断系统等), 直接对位、字节、字、寄存器或存储单元、I/O端口进行处理 ,同时也能直接使用CPU指令系统提供的各种寻址方式,编制 出高质量的程序。 从源程序获得目标程序的过程 汇编语言源程序 机器语言程序 (目标代码) 汇编(可由汇编程序完成 ) 高级语言源程序编译或解释 (可由编译程序完成) v 为了能顺利完成汇编,用户必须为汇编程序提供一些额外的、与 硬件有关的信息. 如:程序使用的变量应分别存放在内存的哪个 单元、堆栈应从内存的什么地址开始等等。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 2. 汇编程序的作用 n将源程序翻译成机器语言程序。 n按用户要求自动分配存储区域(如程序区、数据 区等) 。 n自动地把各种进制数 二进制数。 n把字符 ASCII码。 n计算表达式的值。 n自动对源程序进行检查,指出语法错误(如非法 格式、未定义的助记符、标号、漏掉操作数等) 。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 3. 汇编语言程序的上机与处理过程 上机环境 硬件 系统软件 应用软件 操作系统:DOS系统 编辑器: EDIT.exe 编译程序:MASM.exe 连接程序:LINK.exe 调试程序:DEBUG.exe 用户开发的程序:ABC.exe等 CPU、存储器(ROM、RAM)、I/O接口、输入、输出设备 汇编语言上机过程 D:EDIT ABC.asm D:MASM ABC 有语法错,回EDIT下改该程序 D:LINK ABC 有错,回在EDIT下改程序 D:ABC 运行结果错,回EDIT下改程序 或在DEBUG下调试,找原因。 D:DEBUG ABC.exe 编辑源程序 EDIT ABC.ASM 汇编源程序 MASM ABC.ASM 形成目标程序 ABC.OBJ 连接目标程序 LINK ABC.OBJ 有连接错误信息? 形成可执行程序 ABC.EXE 装入可执行程序到内存 , 并执行 D:subABC 下一程序 用DEBUG 调试可执行程序 D:sub DEBUG ABC.EXE 找到原因 Y N Y N N Y N 有汇编错误信息 ? Y 运行结果正确 ? 用DEBUG调试程序查错 ? 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 4.1 汇编语言的程序结构与语句格式 n语法语句和程序结构必须遵循的规则。 源程序按其编译器能够理解的语法 编 写方可。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 4.1.1 汇编语言源程序的框架结构 1. 源程序由若干个逻辑段组成每段由伪指令SEGMENT开始、由 ENDS结束。 通常有:代码段(必不可少) 堆栈段建立一个堆栈区,以存放中断时的断 点地址,子程序调用时断点地址及子程序 间传递参数。 数据段和附加数据段用来在内存中建立一个 适当容量的工作区用以存放数据。 一、源程序的结构特点 按逻辑段组织源程序。包括代码段、堆栈段、数据段等。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 【例题4.1】实现:123 + 456sum 的源程序 CODESEGMENT ;语句6 ASSUME CS:CODE,DS:DATA MAIN PROC FAR ;语句8 START:PUSH DS ;语句9 . ; RET ;语句17 MAIN ENDP ;语句18 CODE ENDS ;语句19 数据段 代码段 DATA SEGMENT ;语句1 A DW 123 ;语句2 B DW 456 ;语句3 SUM DW ? ;语句4 DATA ENDS ;语句5 END START ;语句20 n汇编语言语法 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 3. 每段由若干语句行组成, 每行只有一条语句且不能超过128个字符,允许有后续 行。 整个源程序以END结束,它通知汇编程序停止汇编。END后 的START标号为程序运行时的起始地址。 2. 在代码段起始处, 用ASSUME伪指令说明各个段Reg与逻辑段的关系,并在程序 起始处设置段Reg的初值(代码段CS除外)。 4. 每条语句由4个字段构成。各字段间用空格分开。 5. 源程序中设有返回DOS的指令语句,使程序执行完后返回DOS系统 的命令接受状态。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 二、源程序与PC DOS的接口 汇编语言源程序(.ASM)经过汇编转变为目标程序(.OBJ), 当用链接程序对其进行链接和定位时,操作系统为每个用户程序 建立: 一个256字节的程序段前缀区( PSP),存放用户程序信息。 在PSP的开始处(偏移地址0000H) 安排一条INT 20H 软中断指令。 INT 20H功能是使系统返回到DOS管 理状态。因此,用户执行程序完后 ,必须能够转到PSP起始处执行INT 20H指令。 INT 20H PSP起始 0000H 定位用 户程序 定位用户程序 设置DS和ES的值使之指向PSP的开始处, 即PSP的段地址 DS和ES。 将用户程序的段基址、第一条指令的偏移地址设置CS、IP; 同时设置SS、SP。 运行用户程序 保证用户程序执行完后返回DOS的方法 第一种方法:标准序法 将用户程序中的主程序定义为FAR过程,其最后一条指令为RET(当程序 执行到RET时,会将栈顶的两个字分别送IP、CS) 在主程序的开始处将PSP的段地址和偏移地址(DS、ES和0000H)进栈保 护: PUSHDS;保护PSP段地址 MOVAX,0 ;保护偏移0地址 PUSHAX ; 用户程序开始 当用户程序返回时,会返回到DOS(执行INT 20H)。 注:由于DS、ES由 DOS设置,所以在 用户程序开始处应 重新设置DS、ES。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 第二种方法:非标准方法 不定义主程序为FAR过程,并去掉标准序。 在代码段结束之前(即CODE ENDS之前)增加两句: MOVAH,4CH INT21H;4CH号的DOS系统功能调用 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 4.1.2 8086汇编语言的语句 源程序是一个语句序列,每条语句规定一个基本操作,语句 序列完成某个特定的操作任务。 一、语句的种类与格式 1. 语句的种类 (1)指令语句 _可执行语句,对应CPU指令系统规定的一条指令 。 汇编时,汇编程序为之产生一一对应的机器目标代码。 例:MOVAH,4CH INCBX (2) 伪指令语句 _汇编时给汇编程序提供与硬件有关的汇编信息, 本身并不产生目标代码,CPU不执行。是指示汇编 程序进行汇编的操作。 例:MESSAGE DB THIS IS A SAMPLE PROGRAM. ;定义变量 MESSAGE在数据段DATA中的存放形式汇编时,汇编程序将MESSAGE定义 为一个字节类型数据区的首地址,并按字节存储字符串。 2. 语句格式 指令语句的一般格式: 标号:前缀 指令助记符 操作数;注释 伪指令语句的格式: 名字 伪指令定义符 操作数;注释 u标识符字段 标识符字段由各种有效字符组成,一般表示符号地址,具有段基址、偏 移量、类型三种属性。 很多情况下标识符字段是语句中的可选部分,主要为便于程序的读写方 便而使用。 u标识符字段通常有: 标号 后跟冒号,在程序中作为JMP、LOOP指令的转移目标,与具体 的指令地址相联系。 名字 用于定义常量名、变量名、过程名、段名等。 (1) 标号和名字 标号和名字必须符合汇编语言对标识符的规定: 以字母开头,由字母(不分大小写)、数字(09)及部分特殊字符(? $和下划线_等)组成,字符串长度不超过31个。 标识符不能是汇编语言中有特定意义的保留字、助记符、Reg等, 如:CPU的内部寄存器名AH、AL、AX等。 (2)助记符、定义符 规定指令或伪指令的操作功能,是语句中唯一不可缺少的部分。 对于指令,汇编程序将其翻译成机器语言指令。 MOV AX, 100 B8 00 01 对于伪指令,汇编程序据其要求的功能进行处理。 data SEGMENT data与一段地址对应 string DB Tsinghua string与一内存地 址对应 前缀仅可出现在指令助记符前。 (3)操作数 指令语句中提供给指令的操作对象、存放位置。 操作数可以是1个、2个或0个,2个时用逗号,分开。 (INC BX; MOV AX,DATA ; RET) 伪指令语句中操作数的格式和含义随伪操作指令不同而不同。 (4)注释 以“ ;”开始,给以编程说明。 汇编程序对“ ;”后的内容不做处理。 注释对汇编不起任何作用,不对应于任何机器码,仅增强源程序的可读性 。 u操作数可能为以下几种情况: 常量操作数:如 34 等。 寄存器操作数:如 AX 等。 存储器操作数:如0100H 等。 表达式操作数:如AX+2、SEG NUM1等。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 4.2 8086汇编中的伪指令 指示汇编、链接程序如何进行汇编和链接,影响目标代 码生成,本身不产生目标代码。 有符号定义语句、数据定义语句、程序结构语句、模块 链接语句、有关宏的语句、条件汇编语句等。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 给表达式赋予一种符号名,以便在程序中用它替代表达式 1、等值语句 格式:符号名 EQU 表达式 例: PORT EQU 40H ; 用PORT代替40H号端口 COUNT EQU CX ; 用COUNT代替CX寄存器 M EQU MOV ; 用M代替MOV指令助记符 注:EQU语句不能重新定义,即在同一源程序中,用EQU 定义过的符号不能赋予不同的值。 例:B EQU bp+8 B EQU 20H 不行! 4.2.1 符号定义语句 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 2、等号语句 格式:符号名 表达式 功能与EQU类似。 例: PP = 89FAH;赋值 PP = PP+1; PP = 89FBH 注: u 等号语句与EQU语句的相同点: 符号不是变量,所以用EQU、= 定义的符号不占用存储器单 元。 u区别: 等号语句可以在同一源程序中重复定义符号。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 4.2.2 变量定义语句 用于定义变量(程序中所用的存储器操作数),指定变量的类 型和名称,并为其分配存储单元和预置初值。 1. 格式 变量名 数据定义符 操作数 ,操作数,操作数 变量名指示存储器操作数的地址(符号地址) 数据定义符指示存储器操作数的类型(字节、字、双字等) 操作数指示存储器操作数的内容,是赋给变量的初值。 多个相同类型的变量可在一条语句中定义 表示可选 汇编程序将定义的操作数,按其类型分配内存单元数, 并顺 序存入变量名指向的内存单元中。 常用的数据定义符有: DB 变量为字节数据类型 DW 变量为字数据类型,存放时低对低高对高。 DD 变量为双字数据类型,存放时低对低高对高。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 经过定义的变量有3种属性:段值、段内 偏移量和类型。 若某个变量表示的是一个数组,则其类型 属性为变量的单个元素所占用的字节数。 其它的数据定义符有: DQ 变量为4字数据类型(64位) DT 变量为10字节数据类型(80位)xx yy zz 01 FF FC 01 00 FF FF FC 00 01 00 00 00 FF FF FF FF FC 00 00 00 1 -1 FC 1 -1 FC 1 -1 FC 例: 定义赋初值的变量 data SEGMENT xx DB 1, -1, 0fcH yy DW 1, -1, 0fcH zz DD 1,- 1, 0fcH data ENDS 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 2. 具体形式和功能 (1)为数据项分配存储单元,用变量名作为该存储单元的名称 。 例:X DB25H Y DW4142H Z DD12345678H 存储形式如图: X Y Z 12H 34H 56H 78H 41H 42H 25H 初始值也可以是表达式 如: IN_PORT DBPORT_VAL OUT_PORT DBPORT_VAL+1 其中,PORT_VAL已由EQU语句赋了值 。 (2)预留内存单元,但不赋值,以存放运算结果. 例: A DB ? B DB ? 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 (3)定义一个数组 例:W_TABLE DW 1122H,3344H B_TABLE DB 1,2,4,9,16 当表中的操作数相同时, 可用重复操作符DUP来缩写: u格式: 重复次数 DUP( 操作数) 例:ALL_ZERO DB 0,0,0,0,0,0 ALL_ZERO DB 6 DUP(0) (4)定义字符串(只能用DB定义 ) 例:MESSAGE DB HELLO 每个字符的值为它的ASCII码值,所以 用DB来定义。 例: str1 DB TsingHua str2 DB INPUT: , 0dH , 0aH ,$ str1 str2 54 73 69 6e 67 48 75 61 49 4e 50 55 54 3a 0d 0a 24 T s i n g H u a I N P U T : 0dH 0aH $ 43H 44H 41H 42H 41H 42H 42H 41HSTRING1 STRING2 STRING3 存放形式如右图: 当字符串长度不超过两个字符时,也可以用DW来定义。 例: STRING1 DBAB STRING2 DWAB STRING3 DWAB,CD 注意:3个及其以上的字符, 只能用DB定义。 例: str1 DW abcd str2 DD abcd data SEGMENT xx DB 1, -1, 0FCH yy DW 1,- 1, 0FCH zz DD 1, -1, 0FCH str DB TsingHua buf DB 4, ?,4 DUP (?) DB dataend data ENDS code SEGMENT ASSUME CS:code ASSUME DS:data start: MOV AX , data MOV DS , AX LEA BX , xx LEA SI , yy LEA DI , zz MOV AH , 4CH INT 21H code ENDS END start 例: 在DEBUG下查看变量存放情况。 例: XX DW CYCLE YY DD CYCLE CYCLE: MOV BX,AX ; CYCLE是程序的一个NEAR标号 例:VAR3 DW VAR+1 ;将VAR+1的的偏移地址存入 VAR3开始的两个字节 或 VAR3 DD VAR+1 ;将VAR+1的的全地址存入 VAR3开始的两个字 (5)将已定义的地址存放内存单元 当操作数是标号或变量时,可用DW或DD将标号或变量操作数 的偏移地址或全地址来初始化存储器。 例:TABLE DB 12H,34H TAL_PS DD TABLE TABLE SEG TABLE OFFSE T 34H 12H TAL_PS TABLE 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 4.2.3 段定义伪指令(将程序分成若干逻辑段 ) 用于告诉汇编程序和链接程序如何按逻辑段 来组织程序和利用存储器。 具体来说 规定 段的起始和结束 指定属性 开始地址边界 段类型 同名段如何结合在一起 有两种段定义 简化段定义:对MASM5.0以上版本 完整段定义:对所有版本 只介绍完整段定义 1. 段定义语句 SEGMENT/ENDS 用于对 DS、ES、SS、CS 段的定义 格式: 段名 SEGMENT 定位类型组合属性类别名 (段体) 段名 ENDS 功能:指出段名和段的各种属性, 并表示段的开始和结束位置。 合法标识符,与某个存储单元相联 系。 段定义由伪操作SEGMENT开始、ENDS结束。 SEGMENT 和ENDS 必须成对出现,且段名必须相同。 SEGMENT和ENDS语句之间可以有指令和其他伪指令, 表示存放在该段内存中的变量、指令或其他伪指令对该段内存的处理 程序中可以定义多个段 程序经汇编、连接及装入内存后,段名为一具体的段值(常量值)。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 (1)定位类型告诉链接程序链接时段的起始边界,有4种选择: PAGE:段起始地址必须是256的倍数(XXX00H),最低8位为0。 PARA:段起始地址必须是16的倍数(XXXX0H),最低4位必须为0。 WORD:段起始地址必须是偶数(XX0B),最低1位必须为0。 BYTE:段起始地址为任意值,即从任何地址开始都行。 缺省类型为PARA。 (2) 组合类型 在多模块(每个模块有自己的代码段、数据段 、堆栈段)组合时,告诉链接程序本段与其他模块中同名段的链接关 系,有6种选择: NONE:本段与其它同名段逻辑上不发生关系,有自己的段基地址( 缺省选择)。 PUBLIC:在满足定位类型的前提下,链接程序将其与其他模块中的 同名段邻接在一起,共用一个段地址。链接的先后次序由链接命令指 定。 段定义的相关约定 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 STACK:与PUBLIC同样处理,链接后作为堆栈段,并自动初始化 SS、SP,SS指向第一个STACK段。 若程序中不说明STACK ,则必须由用户在程序的开始处,自己通 过语句设置SS、SP。 COMMON:各模块中同名段重叠覆盖,有着相同的起始地 址。段的长度 取决于最长的COMMON段。段的内容为所链接的最后一个模块中COMMON段 的内容。 AT表达式:链接程序把本段装在表达式值所指定的段地址(此方式不 能指定代码段)。 例:AT 0903H;本段从09030H开始存放。 MEMORY:链接在其他所有段的后面(高端存储区 )。若有多个MEMERY 段,则只认第一个,其余按COMMON处理。 段定义的相关约定 (3)类别名给各段的名字信息,表示段的类别。类别必须用单引 号括起来,典型类别名如:STACK、CODE和DATA等。 若缺省类别名,则表明该段类别为空。同名同类别的段 在内存中依序连续存放。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 2 . 段寄存器说明伪指令 格式:ASSUME 段寄存器:段名,段寄存器:段名 , (1) 设定特定的Sreg指向特点的段,说明源程序中定 义的段应由哪一个Sreg去寻址。否则,汇编程序无法生 成机器代码程序。 (2)ASSUME并未真正的将段地址装入相应的Sreg。 Sreg的初值还必须由用户在程序的开始处用MOV指令来 设置(CS除外) 。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 3. 指定地址伪指令 ORG 在汇编程序中,有一个软件计数器(LC)地址计数器。 在每个段定义开始处,它被复位为0。当汇编程序逐行扫描语句 时,用LC保存当前指令的地址。 格式1:ORG 表达 ;将表达式的值(065535) LC 格式2:ORG $+表达式 ;将LC的当前值$表达式的值 LC 功能:强行指定地址计数器LC的当前值,在段内改变它以后的 代码或数据存放的偏移地址。 uORG语句之后段内所有的代码或数据均以表达式(常量)的值为起 始偏移量连续存放,除非遇到另一个ORG语句。 u 此语句本身并不占内存。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 例 VECT SEGMENT ORG 10 VECT1 DW 47A5H ORG 20 VECT2 DW 0C956H ORG $+8 (跳过8个字节的存储区) VECT3 DW 0123H 01 23 . . . C9 56 . . . 47 A5 10 20 16H+8=1EH 14H 15H 16H 1EH 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 4. 模块的定义和通信 MASM宏汇编语言提供了模块化编程伪指令,用以实现模块 的定义与通信。 一个任务的源程序由若干模块组成,每个模块有代码段、数 据段等,对应一个 .ASM,是个独立的编译单位。 当各个模块编译完毕,可用LINK连接各模块形成一个完整的 可执行程序(.exe)。 1). 模块定义伪指令 NAME/ END NAME 模块名 ;为模块命名 ;语句 END 标号 ;结束模块 模块名的作用是指示给连接程序进行连接用。 源程序中可无模块定义,此时源文件名作为模块名。 主模块的END后要跟标号,子模块不跟标号。 部分可省略。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 2). 模块间通信伪指令 实现模块间数据或过程的互访和共享。 格式:PUBLIC名字 ,名字, EXTRN名字:类型 ,名字:类型, PUBLIC 和EXTRN配对使用。 由PUBLIC 说明的名字是全局的,可以在其他模块中使用, EXTRN表明本模块中使用的名字在别的模块中定义过,且类型 一致。 其中,名字可以是标号、变量名、过程名或由EQU(或)伪指令 定义的符号名。 类型可以是BYTE、WORD、DWORD、NEAR、FAR和ABS(常量属性) 等 。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 格式: 过程名 PROCNEAR/FAR RET 过程名 ENDP 4.2.4 过程和宏定义伪指令 过程和宏是模块化程序设计的基础。 汇编语言中常用定义过程和宏的方法来实现按模块管理 程序代码的功能。 1. 过程定义伪指令 过程:一段可以由CALL指令调用,用RET返回的程序。 当整个源程序由主、子程序构成时,主、子程序 都在代码段,且都可用过程来表示(即定义为过程)。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 功能:定义一个过程,并指出过程名及过程的属性。 过程定义由伪指令PROC开始、ENDP结束。 v PROC和ENDP之间为过程的指令序列。 v 程序中可以定义多个过程。 v 程序经汇编、连接及装入内存后, 过程名为一具体的 内存地址,指示子程序入口。 过程的属性有NEAR和FAR NEAR过程只能被定义该过程的段中的其他程序调用(段内调用) FAR过程可由任何段中的程序调用(段间调用) 缺省时为NEAR 根据过程的属性,汇编程序自动对CALL、RET翻译成段内(段 间)调用及段内(段间)返回的目标代码。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 COD1SEGMENT ASSUME CS: COD1, ; 代码段中的其它语句(主程序) SUB1PROC FAR; 名为SUB1的FAR过程开始 RET; 返回 SUB1ENDP; SUB1结束 SUB2PROC ; 名为SUB2的NEAR过程开始 RET; 返回 SUB2ENDP; SUB2结束 ; 可能定义的其它过程 COD1ENDS; 代码段结束 例 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 (1)宏定义 格式:宏指令名MACRO形参,形参 :; 指令序列 ENDM 宏扩展:汇编时,将相应的程序段中的每条语句前冠以 “”,代替宏指令以产生目标代码。 宏调用在源程序中用宏指令代替所定义的程序段。 格式:宏指令名 实参,实参 2. 宏定义伪指令 u为减少重复编写相同语句段的工作,我们可以使用“宏”功能。 u宏定义是指用一个标识符(宏名)来代替一组指令序列(可同时 包含指令性语句和指示性语句) u宏功能的使用过程是:宏定义、宏调用、宏展开。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 【例】完成2个压缩 BCD数加法的宏定义 DECADD MACRO OP1,OP2 MOV AL,OP1 ADD AL,OP2 DAA MOV OPR1,AL ENDM DECADD DL,BUFFER DECADD AREA1,AREA2 宏调用 宏定义 加号表示该 语句由宏展 开得到。 DECADD DL,BUFFER扩展成: + MOV AL,DL + ADD AL,BUFFER + DAA + MOV DL,AL 注:当宏调用中实参数个数和形式参数个数不等时,若实参数个数大于形式参 数个数,在替换时多余的实参数不予考虑。若实参数个数小于形式参数个数, 则多余的形式参数作为空(字符)或零(数字)处理。 宏展开 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 3.过程与宏的区别 对需重复使用的模块既可定义为过程,也可定义为宏 。 (1)宏:由汇编程序识别,并将宏体代码插入。 过程:汇编时仅产生CALL指令代码,该代码在程序执行时 完成。 (2)宏可以直接传递参数。但过程传递参数的编程困难。 (3)汇编成机器代码时: 宏扩展增加空间开销。 过程调用却能缩短源程序目标代码的长度,无论过程被调 用多少次,仅增加CALL、RET代码。 (4)宏体执行时并不增加时间开销。 过程调用时,CALL、RET指令需保护、恢复现场和断点, 增加时间开销。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 4.2.5 结束语句 END伪指令: 格式 END 启动地址 作用: 指示源程序到此结束。(汇编程序对 END 之后的语句不进行处理。 源程序中必须有 END 结束语句。 启动地址可是一个标号或过程名, 指示程序的 入口。 程序装入内存后,系统跳转到入口处, 开始执 行程序。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 常用: 数值常量 2 (B) 、10 (D)、8 (Q)、16 (H)的整型常量。 对16:必须以数字打头,若最高位为字母AF,必须加 前缀0,以与H结尾的标识符区别(如:AH,abcdH) 。 字符串常量 1234 是用单引号括起来的一个或多个字符,值为字符的ASCII码值 。 例:A=41H AB=4142H 1234 31H,32H,33H,34H 31323334H MOV AL, G 2. Reg操作数 操作数部分是寄存器名,如:AX、SI和DS等。 4.3 8086汇编中的运算符 1. 常量操作数 在运行期间不变化的量:立即数、端口地址。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 (3)标号和变量都与存储器地址相关联,都具有以下三种属性: 段属性(SEGMENT)段基址,标号或变量所在段的段地址。 偏移量属性(OFFSET)段内偏移地址,标号或变量所在地 址与所在段的段起始地址之差。 类型属性(TYPE)对变量,指变量存取单位的字节数大小。 有字节(BYTE) 、字(WORD)、双字(DWORD)、4字、10字节5种。 对标号,指标号与使用它的指令之间的距离远近。 (如:对转移指令来说,有NEAR标号或FAR标号) 3. 存贮器操作数 有标号与变量两种 (1)标号:在代码段内 与指令地址相关联。(或某个过程起点位置相关联) (2)变量:在数据段或堆栈段内 是存放数据的存贮单元的符号地址,与各种存储器操作数 寻址方式有关。常以变量名的形式出现在程序中。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 4. 表达式操作数 表达式由各种操作数、运算符和操作符组成,可出现于源程 序的任何地方,在汇编时计算(而不是在程序执行过程中). 汇编程序对表达式进行运算后,得到一个确定的数值,再把这个数值 汇编到指令中。 (1)有两类表达式 根据表达式所表示的内容而分。 数值表达式:由常量及算术逻辑运算符、或关系运算符连接而成。 在汇编时产生一个数值。 地址表达式:由常量、变量、标号、寄存器的内容及一些运算符组成 。 其值表示存储器地址,有以上三种属性。 例: MOV AX, 12 - 4 ; MOV AX, 8 ;数字表达式 LEA BX,string+4 ;地址表达式 ES:SI+4 ;地址表达式 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 (2)运算符和操作符 MASM宏汇编中有三种运算符:算术、逻辑和关系运算符 两种操作符:分析和合成操作符 运算符:实现对操作数的相关运算。 操作符:完成对操作数属性的定义、调用和修改。 主要有: 1. 算术运算符 ( +、/、MOD ) 2. 逻辑运算符 ( AND、OR、NOT、XOR ) 3. 关系运算符 ( EQ、NE、GT、GE、LT、LE ) 真:FFFFH; 假: 0 4. 分析操作符 ( SEG、OFFSET 、TYPE、SIZE、 LENGTH 、HIGH、LOW ) 5. 合成操作符 ( PTR 、DS:、THIS、SHORT) 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 数值表达式中可使用所有算术运算符 地址表达式仅使用+、两种算术运算符 常用: 标号或变量常量形式 运算后仍为标号或变量,其3个属性中的类型及 段基址属性不变,仅修改了偏移量属性。 例:PLACE23 ;若PLACE与某存贮单元地址相关,则 PLACE+23仍与某存贮单元相关。 算术运算符不影响标志位 例:完成80H+90H 解:MOV AL,80H+90H ;使用数值表达式 ;(AL)=10H、CF=不变 n MOV AL,80H;使用加法指令 ADD AL,90H ;(AL) = 10H、CF = 1 算术运算符 ( +、/、MOD(取余数) ) MOV AX, 6 8 MOV AX, 48 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 v 作为运算符时,是在程序汇编时由汇编程序计算的,计算结果充是在程序汇编时由汇编程序计算的,计算结果充 当指令的某一个操作数或构成操作数的部分当指令的某一个操作数或构成操作数的部分 v 作为指令助记符时,是在程序运行时被执行,操作对象可以是是在程序运行时被执行,操作对象可以是 寄存器或存储器操作数。寄存器或存储器操作数。 例:AND DX AND DX ,PORT AND 0FEHPORT AND 0FEH 运算符 汇编时产生一立即数,并得到并得到 “ “ AND DX, AND DX, immimm ” ” 的目标码的目标码 CPU执行时完成 注:逻辑运算符与逻辑指令助记符形同意不同 逻辑运算符AND、OR、XOR和NOT 实现操作数按位逻辑操作,只适用于数值表达式。 MOV AX, 80h OR 70h MOV AX,0F0h 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 关系运算符EQ、NE、LT、GT、LE和GE。 在两个无符号操作数之间进行大小关系比较 两个操作数必须同是数值或同是一个段内的两个存储器地址。 关系不成立(为假)则结果为“0”(假: 0); 若关系成立(为真)则结果为全“1”(真:FFFFH)。 结果值在汇编时获得。 例:MOV BX,PORT LT 5 汇编为:MOV BX,0FFFFH(条件成立) 或 MOV BX,0000H (条件不成立) 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 分析操作符与合成操作符 分析操作符(数值返回运算符) 运算对象是存储器操作数,它返回变量或标号的属性值。 合成操作符(修改属性运算符) 作用于存储器操作数时可以改变它们的属性。 用分析或合成操作符,可以返回或修改存储器操作数的3种属性. 例: ARRAY DB 100 DUPARRAY DB 100 DUP(0 0) MOV AXMOV AX,SEG ARRAYSEG ARRAY MOV DSMOV DS,AXAX ;对DS初始化 MOV BX,OFFSET ARRAY MOV ALMOV AL,BXBX (1)分析操作符(SEG、OFFSET、TYPE、SIZE 、LENGTH) 使用格式: 操作符 标号或变量 SEG、OFFSET返回标号或变量的段地址和偏移地址 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 TYPE LENGTH SIZE TYPE 返回存储器操作数(标号或变量)的类型值。 LENGTH 返回变量用DUP定义的重复次数。 SIZE 返回TYPE和LENGTH的乘积,表示为变量所分 配的字节存储单元总数。 -2FAR标号 -1NEAR标号 4DWORD双字变量 2WORD字变量 1BYTE字节变量 类型值类型属性存储器操作数 例:BUFFER1 DB 100 DUP(0)BUFFER1 DB 100 DUP(0) BUFFER2 DW 200 DUP(20H) BUFFER2 DW 200 DUP(20H) BUFFER3 DD 100 DUP(13) BUFFER3 DD 100 DUP(13) 则则 LENGTH BUFFER1=100LENGTH BUFFER1=100 LENGTH BUFFER2=200 LENGTH BUFFER2=200 LENGTH BUFFER3=100 LENGTH BUFFER3=100 注:注:用LENGTH返回的存储区必须用DUP来定义,否则返回1。 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 使用格式: 类型 PTR 标号或变量 例:ARRAY1 DB 0ARRAY1 DB 0,1 1,2 2,3 3,4 4 ARRAY2 DW 0 ARRAY2 DW 0,1 1,2 2,3 3,4 4 MOV BX MOV BX,WORD PTR ARRAY13WORD PTR ARRAY13 MOV CL MOV CL, BYTE PTR ARRAY26 BYTE PTR ARRAY26 MOV WORD PTRSI MOV WORD PTRSI,4 4 (2) 合成操作符 (PTR、LABLE、THIS) PTR临时修改或指定存储器操作数的类型属性,而保持或指定存储器操作数的类型属性,而保持 原有的段、偏移地址属性,且原定义的类型属性不变原有的段、偏移地址属性,且原定义的类型属性不变 。 仅在当前所在 的指令中有效 例:INC BXINC BX INC BYTE PTR BX INC BYTE PTR BX INC WORD PTR BX INC WORD PTR BX 对变量:对变量: 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西 力求精进力求精进 配合配合EQU伪指令,还可以为原变量定义新的变量名,如:伪指令,还可以为原变量定义新的变量名,如: ARRAY1 DB 0ARRAY1 DB 0,1 1,2 2,3 3,4 4 ARRAY2 DW 0ARRAY2 DW 0,1 1,2 2,3 3,4 4 WBYTE WBYTE EQU WORD PTR ARRAY1WORD PTR ARRAY1 BWORDBWORD EQU BYTE PTR ARRAT2BYTE PTR ARRAT2 MOV BX MOV BX , WBYTE3 WBYTE3 MOV CL MOV CL , BWORD6 BWORD6 PTR用来指明用来指明标号的类型属性时,可确定是段内转移或段间转移的类型属性时,可确定是段内转移或段间转移. . 例:INCHESINCHES:CMP SUMCMP SUM,100100 JMP NEAR PTR INCHES JMP NEAR PTR INCHES ;段内转移段内转移 ; ; NEAR PTR NEAR PTR 可省略可省略 JMP FAR PTR INCHESJMP FAR PTR INCHES 对标号:对标号: 南 通 大 学 NATOG UNIVERSITYNATOG UNIVERSITY 祈通中西祈通中西

温馨提示

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

评论

0/150

提交评论