文档详情

微机系统原理与接口技术--第四章 伪指令与程序设计

海****n
实名认证
店铺
PPT
649.50KB
约98页
文档ID:202832576
微机系统原理与接口技术--第四章 伪指令与程序设计_第1页
1/98

第四章 宏汇编语言程序设计,8 学时,目 录,4.1 汇编语言程序设计特点4.2 8086宏汇编源程序的组成4.3 8086宏汇编语言的基本语法4.4 8086宏汇编语言常用伪指令4.5 8086宏汇编语言程序设计技术,程序是一组为完成某种功能而按一定顺序(由算法确定)编排的指令序列本章将首先介绍8086宏汇编语言的基本语法及常用伪指令,然后用实例说明8086宏汇编语言源程序的设计方法4.1 汇编语言程序设计特点,汇编语言是一种用符号表示的、面向CPU指令系统的程序设计语言汇编语言具有以下两个基本特点:程序设计人员能更充分地利用机器硬件的全部功能,发挥机器的长处;程序目标代码占用内存少,执行速度快,效率高,具有实时性;,汇编语言与高级语言,由于汇编的特点,汇编语言常用于编写计算机系统程序、实时通信程序和实时控制程序但汇编语言程序依赖于机器硬件,其通用性和移植性都较差相对于汇编语言,高级语言的编程方便快捷,通用性和移植性都较好,在一些涉及大量数据处理、人机界面等设计任务的应用程序中,采用高级语言编程更为合适从源程序获得目标程序的过程,为了能顺利完成汇编,用户必须为汇编程序提供一些额外的、与硬件有关的信息,如:程序使用的变量应分别存放在内存的哪个单元、堆栈应从内存的什么地址开始等等。

4.2 8086宏汇编源程序的组成,由 “指令”和 “伪指令”共同构成的指令”由8086CPU规定的;“伪指令”说明与硬件有关的信息;“段”结构因为8086系统的存储器采用分段管理,段 (例4.1),; 段名1SEGMENT; 一个段的开始语句1语句2 段名1ENDS; 一个段的结束; 段名2SEGMENT; 另一个段的开始段名2ENDS; 另一个段的结束; ; 其它段; END; 源代码结束,语 句,语句是由各种符号(标记)及分隔符按照一定的规则组织起来的一个有序序列标识符 操作符 操作数 注释有三种基本语句: 指令性语句(指令)、指示性语句(伪指令)和宏指令指令性语句:即执行性语句(指令),与机器码一一对应,表示某种确定操作,包括四部分: 标号: 指令操作码 操作数 ;注释 例: AGAN:ADC SUM,AX;累加指示性语句:即说明性语句(伪指令),不对应机器码,只为汇编提供所需信息,由四部分组成: 名字 伪指令 操作数 ;注释 例:SUMDW 0;为结果保留一个字 宏指令:由伪指令定义的指令序列,包括宏定义、宏调用和宏扩展三部分,标识符字段,标识符字段由各种有效字符组成,一般表示符号地址,具有段基址、偏移量、类型三种属性。

很多情况下标识符字段是语句中的可选部分,主要为便于程序的读写方便而使用通常有: 标号 名字,操作符字段,操作符字段:由保留字组成,是语句中不可缺少的部分包括:指令助记符伪指令助记符,操作数字段,操作数字段:表示操作符操作的对象操作数可能为以下几种情况:常量操作数:如 34 等寄存器操作数:如 AX 等存储器操作数:如0100H 等表达式操作数:如AX+2、SEG NUM1等注释字段,注释字段:用于说明、解释程序使之便于阅读或检查的任何文字或字符,位于语句行的末尾,用分号( ; )引导注释对汇编不起任何作用,不对应于任何机器码,仅增强源程序的可读性DATASEGMENT;定义数据段D1DB 5 DUP(?);连续的字节单元CCEQU $D1;对单元计数SUMDW 0;为结果保留一个字DATAENDS;数据段定义结束STACK SEGMENT PARA STACK STACK;定义堆栈段DB 100 DUP (?);100字节的栈空间STACKENDS;堆栈段定义结束CODESEGMENT;定义代码段ASSUME DS:DATA,SS:STACK,CS:CODE;对各段进行说明BEGIN:MOV AX,DATA; DS初始化为DATAMOV DS,AXLEA SI,D1;预置源数据的指针,例4.6: 多个连续字节单元的累加,MOV CX,CC;预置次数LODS BYTE PTR SI;取一个数并修改指针MOV AH,0;清AX的高字节CLC;清CF位AGAN:ADC SUM,AX;累加LODS BYTE PTR SI;再取数并修改指针LOOP AGAN;控制循环MOV AH,4CH;完成,返回DOSINT 21HCODEENDS;代码段结束ENDBEGIN;整个程序结束,4.3 8086宏汇编语言的基本语法,介绍8086宏汇编语言MASM5.0规定的一些基本语法,包括各种可使用的助记符、保留字,以及各种数据类型及表达式。

4.3.1 字符集,英文字母:包括大写字母AZ和小写字母az宏汇编语言中的大小写字母的作用相同,不予区分 阿拉伯数字:09注:数字不用于标识符第一位特殊符号:包括可打印字符和不可打印字符其中:可打印字符包括、$、&等等不可打印字符包括空格符、制表符(Tab键)、回车符、换行符4.3.2 常量,数字常量二进制数:以“B”结尾,如00001101B;八进制数:以“O”结尾,如725O;十六进制数:以“H”结尾,并且必须以数字打头,即若最高位为字母AF,前面应加0,如0A12H;十进制数:以“D”结尾或无任何字母作结尾,如10D、10字符串常量字符串常量表示为包含在两个单引号之间的一连串ASCII字符当单引号本身作为一个串元素时,需连写两个单引号每个串元素的值定义为该元素所对应的1字节ASCII码值4.3.3 保留字,汇编源程序中标识符不能使用的字符串8086CPU规定的所有指令助记符:如MOV、ADD等8086CPU中各寄存器名:包括16位和8位寄存器如AL、DH、AX、CS、TF等宏汇编程序规定的所有伪指令助记符:如ASSUME、DB、DW、DD等宏汇编程序规定的其他助记符:ABS、BYTE、DUP、EQ、GE、SEG、SIZE等。

4.3.4 符号,符号是由用户自行定义的、具有特殊意义的字符序列,最长不超过31个字符(多余字符将被忽略)符号由字母、数字(不可打头)以及特殊字符(_、?)组成不能与任何保留字相同包括:变量名、标号、段名、过程名,4.3.5 表达式,由若干操作数和运算符组成的有意义的组合序列表达式可出现于源程序的任何地方,在汇编过程中(而不是程序执行过程中)即可产生确定的值表达式中的操作数,常量操作数:直接写出的数或用常量名表示的数存储器操作数:可以为变量名或标号表达式中的运算符,多包括算术运算符、逻辑运算符、关系运算符、分析运算符以及合成运算符五种有优先级的区别ref:表4.1,4.2),算术运算符:+、-、*、/、MOD、SHL、SHR逻辑运算符:AND、OR、XOR、NOT关系运算符:EQ、NE、GT、 LT、 GE 、LE分析运算符:SEG、OFFSET、TYPE、SIZE、LENGTH 、HIGH、LOW综合运算符:PTR、DS:、THIS、SHORT,算术运算符,数值表达式中可使用所有算术运算符地址表达式仅使用+、-算术运算符算术运算符不影响标志位例:完成80H+90H解:MOV AL,80H+90H;使用数值表达式 ;(AL)=10H、CF=不变 MOV AL,80H ADD AL,90H ;使用加法指令 ;(AL) = 10H、CF = 1,逻辑运算符,逻辑运算符在两个操作数之间按位进行二进制布尔运算,结果产生确定的数值。

逻辑运算符与逻辑指令助记符形同意不同例:AND BL, 46H AND 0FH; 汇编后得到 “ AND BL, 06H ” 的目标码,关系运算符,在两个无符号数操作数之间进行大小关系比较若关系满足则返回全1,否则返回全0例: MOV AX, 0A2H NE 02H ; 汇编后得到 “ MOV AX, 0FFFFH ” 的目标码,分析运算符,对单个操作数进行属性分解,分别返回不同属性的值SEG取变量或标号所在段的段寄存器值作为段基址,结果为16位值 OFFSET取变量或标号的段内偏移量,结果为16位值 TYPE取变量或标号的类型 LENGTH取DUP重复次数 SIZE取分配给变量的字节个数,例 4.13 /4.14,CSEG SEGMENTBUFF DW 10DUP(1234H),10H,00HCOUN DD 12345678HCSEG EDNS,则:SEG BUFF = CSEG ;段基址 OFFSET BUFF = 0 ;偏移量 TYPE BUFF = 2(字) ;类型 SIZE BUFF = 10*2 = 20 ;字节数 LENGTH BUFF = 10 ;DUP次数 HIGH 12A0H = 12H ;高字节 LOW 12A0H = 0A0H ;低字节,SEG COUN = CSEGOFFSET COUN = 22TYPE COUN = 4(双字) SIZE COUN = 4 LENGTH COUN = 1,合成运算符,合成运算符修改已定义的单个操作数,重新生成段基址、偏移量相同而类型不同的新操作数。

有: PTR、THIS、SHORT,PTR:“新类型 PTR 原操作数”,新操作数的类型为表达式中指定的“新类型”,新操作数的段基址和偏移量与“原操作数”相同THIS:“THIS 新类型”,类似PTR,不同的是:新操作数的段基址和偏移量为汇编过程中遇到THIS运算符时的当前值.SHORT:“SHORT Near-label”,表达式代表的新标号的类型为SHORT,4.4 8086宏汇编语言常用伪指令,8086宏汇编语言MASM5.0规定的常用伪指令,包括数据定义语句、程序结构语句、模块链接语句、列表控制语句、结构性数据语句、有关宏的语句、条件汇编语句等4.4.1数据定义伪指令,符号定义语句EQUCOUNT EQU CX; 用COUNT代替CX通用寄存器 MEQU MOV; 用M代替MOV指令助记符 例 4.20 “$” 与EQU结合使用BUFDW?, ? ; 定义两个字变量,共占用4个字节的内存空间SUMDD?; 定义一个双字变量,占用4个字节的内存空间NO EQU$BUF; NO表示当前内存单元与BUF单元之间的“距离”,; NO等同于立即数“8”,不占内存空间,符号定义语句 ;赋值PP = 89FAHPP = PP+1; PP = 89FBH等号语句与EQU语句的相同点在于:符号而非变量,故用EQU、= 定义的符号不占用存储器单元区别在于:等号语句可以在同一源程序中重复定义符号而无需解除,数据定义语句DB、DW、DD等,用于为数据项分配存储单元并预置初值。

DB 变量为字节数据类型(8位)DW 变量为字数据类型(16位)DD 变量为双字数据类型(32位)DQ 变量为4字数据类型(64位)DT 变量为10字节数据类型(80位),ONEDB 8; 给变量ONE分配一个字节,并预置初值为8TWODB ?; 字节变量TWO初值不定ST DB 96, 20, ?, 57; 以STR为首址连续分配4个字节的存储单元STR DB How are you ? $ ; 定义字符串TWIN DB 5 DUP( 0FFH );连续分配5个字节,初值均为0FFH DB 100 DUP( ? );连续分配100个字节单元,初值不定,DB 与DW的应用,DATA SEGMENTARE1 DB 20H,30H ARE2 DW 2030HARE3 DB A,B ARE4 DW ABDATA ENDS,ARE1,ARE2,ARE3,ARE4,4.4.2 程序结构伪指令,段定义语句 SEGMENT / ENDS用于对 DS、ES、SS、CS 段的定义语句格式:段名 SEGMENT 定位选择 链接类型 类别标识符 段名 ENDSENDS必须与SEGMENT成对出现,且段名必须一致。

段定义的相关约定,组合类型:表示与其它段的关系,为连接程序提供信息,可以有6种选择:,定位类型:规定段的起始边界,有4种选择:PAGE:段起始地址的最低8位必须为0PARA:段起始地址。

下载提示
相似文档
正为您匹配相似的精品文档