资源预览内容
第1页 / 共97页
第2页 / 共97页
第3页 / 共97页
第4页 / 共97页
第5页 / 共97页
第6页 / 共97页
第7页 / 共97页
第8页 / 共97页
第9页 / 共97页
第10页 / 共97页
亲,该文档总共97页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1,主要内容: 一、汇编语言语句格式 二、汇编语言伪指令 三、汇编语言源程序的汇编与连接 四、汇编语言程序设计的基本方法,汇编语言程序设计,2,本讲重点: 伪操作 汇编语言程序格式 简单汇编程序设计,汇编语言程序设计,3,一、汇编语言语句格式,汇编语言语句有指令性语句、伪指令语句和宏指令语句三种类型。 1、指令性语句: 标号: 操作码 操作数 ;注释 是机器指令的符号表示,经汇编产生对应的机器指令代码,在形成执行文件时执行。 2、伪指令语句: 名字 伪指令助记符 操作数 ;注释 只是给汇编程序提供一些控制信息,帮助汇编程序正确汇编指令性语句,没有对应的机器码。 说明:名字可以是符号常量名、变量名、过程名、段名等,名字后面不能有“:”。 伪指令命令助记符共有40多个,按功能不同分成八类。操作数之间须用逗号分隔。 3、宏指令语句:宏名 宏操作助记符 操作数 ;注释 是指令性语句和指示性语句的复合体,在汇编时被展开。 说明:宏名即宏指令名,是一标识符,宏名后面不能有“:”。 宏操作助记符有MACRO、ENDM、LOCAL、REPT、IRP、PURGE等8个。,汇编程序不区分大小写,4,汇编语言语句统一格式规定,指令性语句、伪指令语句和宏指令语句的统一格式: 名字项 操作项 操作数项 ;注释项 1.名字项:最多由21个字符组成。可由下列字符组成。 字母AZ、az 数字09 特殊符号?、 、 、 、$等 注意: 名字项的第一个字符不可以是数字,必须是字母或特殊字符,但是问号本身不能单独作为名字; 如果用到特殊符号,则它必须是首字符。 汇编语言的专用保留字、寄存器名、8088/8086汇编语言中的指令助记符、伪指令名、表达式中使用的运算符和属性运算符等均不能作为名字项,否则汇编会给出错误信息; 名字项在程序中不能重复定义。,5,(1) 段属性:可用SIG伪指令求出 此属性用于定义标号和变量的段起始地址。标号通常在代码段CS中定义,变量通常在DS、ES和SS段中定义。 (2) 偏移属性:可用OFFSET伪指令求出 此属性指出标号或变量距离段起始地址的字节数,它是一个16位的无符号数。 (3) 类型属性:可用TYPE伪指令求出 对标号而言,此属性指出其引用类型,段内引用属于NEAR类,指针长度为2字节;段间引用属于FAR类,指针长度为4字节。对变量而言,此属性指出其字节长度,可为1、2、4、8、10个字节。,名字项属性,6,2.操作项,可以是指令、宏指令、伪指令的助记符。 【例】LOOP: MOV AX , BX BUFFER DB 1,2,3,4,5,6,7 ;数据定义伪指令,在主存中开辟7个连续的字节单元,初值依次为17,BUFFER表示首地址,7,3. 操作数项,操作数项可以由常量、寄存器、标号、变量或表达式等组成。 (1)常量 常量是没有属性的纯数,其数值在汇编过程中被确定,并在程序运行时保持不变。分为数值常量和字符型常量。,各种形式数字常量格式对照表,8,字符串常量,字符串常量是用单引号或双引号引起来的一个或多个字符。字符串常量是以各字符的ASC码表示的。如A用41H 表示,字符串A1B2用41H,31H,42H,32H表示。,9,常数项举例,例5.2 SUB DH,22;常数22为立即数,汇编后为16H MOV BX,SI十32H;常数32H作位移量 DB12H;定义一个字节数据 DW1234H;定义一个字数据 DD12345678H;定义一个双字数据 DB 9BD;定义三个字节的字符串数据,在 内存中就是39H、42H、44H,10,(2)表达式及运算符,算术运算符 移位运算符 逻辑运算符 关系运算符 分析运算符 综合运算符,表达式由常数、寄存器、标号、变量与一些运算符组合而成,分为数字表达式和地址表达式。汇编过程中,汇编程序按照一定的优先规则,对表达式进行计算后得到一个数值或地址,用作指令的操作数。,11,算术运算符: (加)、(减)、*(乘)、(除)、MOD(求模) 移位运算符: SHL(左移)、SHR(右移) 可以用于数值表达式又可用于地址表达式。,算术运算符和移位运算符,12,【例】 算术和移位运算符进行数值表达式运算, NUM1EQU25*4 50;NUM1=50 NUM2EQUNUM1 / 7;NUM2=7 NUM3EQUNUM1 MOD 7;NUM3=1 NUM4EQU0FH MOVAL,NUM4 SHL 4 ;(AL)=11110000B,13,与(AND)、或(OR)、异或(XOR)、非(NOT)四种运算。 由于逻辑运算是按位操作,且在汇编过程中完成,因而运算的结果仍为整数常量。 【例】 用逻辑运算符进行运算。 MOVAL,34H AND 0FH ;04HAL MOVBL,05H OR 30H ;35HBL MOVCX,NOT 00FFH ;0FF00HCX MOVDX,789AH XOR 000FH ;7895HDX,逻辑运算符,14,相等(EQ),不等(NE),小于(LT),大于(GT),小于等于(LE)及大于等于(GE)。 运算结果成立时逻辑值为真,用0FFFFH表示; 关系不成立时逻辑值为假,用0表示。 【例】用关系运算符进行数值表达式运算。 NUM1EQU10 LT 5 ;NUM1=0 NUM2EQU0AAAAH GT 7FFFH ;NUM2=0FFFFH MOVAX,A EQ 41H;0FFFFHAX MOVBX,NUM2 LT NUM1;0BX,关系运算符,15,把标号或变量所指存储器地址的属性(段、偏移量和类型)或一些特征分离出来,作为操作数使用。主要介绍3个: SEG 运算符 OFFSET运算符 TYPE运算符,分析运算符号,16,格式:SEG 变量或标号 功能:分离出其后变量或标号所在段的段首址。 【例】已知数据段从存储器的23000H地址开始,DBUF是该段中的一个变量名。 MOV BX,SEG DBUF 汇编为: MOV BX,2300H, SEG 运算符,17,格式:OFFSET 变量或标号 功能:分离出其后变量或标号的偏移地址。 【例】已知标号START的段地址为2100H,物理地址为21200H。 MOV DX,OFFSET START 汇编为: MOV DX,0200H 这条指令与指令 LEA DX,START功能相同。, OFFSET 运算符,18,格式:TYPE 变量或标号 功能:分离出其后变量或标号的类型。如果是变量,将返回该变量的类型对应字节数;如果是标号,则返回代表标号类型的数值。它们之间的关系见下表所示。, TYPE运算符,【例】已定义 ARRAY DB 22,33 指令 ADD SI,TYPE ARRAY汇编为: ADD SI,1,19, 段属性前缀运算符“” 格式为: 段寄存器名地址表达式 或 段名地址表达式 或 组名地址表达式 此运算符用来表示一个标号、变量或地址表达式的段属性。 【例】用段前缀指定附加段内操作数的地址 MOV AL,ESDATA ;指令源操作数在附加段DATA地址单元中,(5)综合运算符,20, LOW和HIGH 格式为: LOW 表达式 或 HIGH 表达式 此运算符用于对一个16位数据或地址表达式,用HIGH取其高位字节、LOW取其低位字节。所以此运算符又称为字节分离运算符。 【例】已知 RESULT EQU 7788H 则MOV AH , HIGH RESULT 汇编为:MOV AH,77H MOV AL , LOW RESULT 汇编为: MOV AL,88H,(5)综合运算符,21,本节介绍了几种常用的运算符。为了正确计算表达式的数值,应该按照运算符的优先级: 先高后低、自左向右(优先级相同时)地进行计算。括号内的表达式应优先计算。 下面给出相关运算符 从高到低的优先级排列顺序:,表达式及运算符小结,22,(在圆括号中的项),方括号中的项,结构变量(变量、字段) LENGTH,SIZE、WIDTH和MASK PTR,OFFSET,SEG,TYPE,THIS及段运算符 HIGH和 LOW *,MOD,SHL(左移),SHR(右移) +,- EQ,NE,LT,LE,GT,GE NOT AND OR,XOR SHORT,表达式及运算符小结,23,4.注释项,一行语句分号后面的内容,主要用来说明程序或语句功能,增加程序的可读性。对于较大的程序,注释项更不能缺少。 分号(;)放在语句后,用来说明该语句的功能; 分号放在某一行的开头,用来说明下面一段程序的功能; 分号加到指令前,可暂时冻结有疑问的指令,调试正确后,再把这些指令解冻或删除,这样可减少语句增、删的编辑工作。,24,MOV CX,0;传送指令,具有2个操作数 DELAY:NOP ;空操作指令,没有操作数,带有标号 LOOP DELAY;循环指令,标号DELAY说明转移位置 BUFFER DB 1,2,3,4,5,6,7 ;数据定义伪指令,在主存中开辟7个连续的字节单元,初值依次为17,BUFFER表示首地址,汇编语言语句实例,25,本节小结,汇编语言指令格式 名字项 操作项 操作数项 ;注释项 标号和变量的属性: 段属性、偏移属性、类型属性 操作数的表达形式 算术、移位、逻辑、关系、属性、综合运算符,首页,26,二、汇编语言伪指令,伪指令:在汇编程序对源程序汇编期间由汇编程序处理的操作(不是真正执行的指令),可以完成处理器选择、定义程序模式、定义数据、分配存储区、指示程序结束等功能。 常用伪指令:,处理器选择伪指令; 段定义伪指令 程序开始与结束伪指令; 数据定义与存储器分配伪指令;,赋值伪指令; 地址计数器与对准伪指令; 基数控制伪指令; 偶地址对准伪指令;,27,1.处理器选择伪操作,.8086 选择 8086 指令系统 .286 选择 80286 指令系统 .286P 选择保护模式下的 80286 指令系统 .386 选择 80386 指令系统 .386P 选择保护模式下的 80386 指令系统 .486 选择 80486 指令系统 .486P 选择保护模式下的 80486 指令系统 .586 选择 Pentium 指令系统 .586P 选择保护模式下的 Pentium 指令系统,一般放在整个程序的最前面。默认值为.8086,28,2.段定义伪指令,完整的汇编语言源程序由段组成 一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列。 需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点 所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内 通常,程序还需要一个堆栈段,29,2.段定义伪操作,源程序分别用两种格式书写 第一种格式从MASM 5.0开始支持 简化段定义格式 第二种格式MASM 5.0以前就具有 完整段定义格式,Hello, Everybody !,30,;EXAMPLE5.42;程序注释 ;数据段说明 2 DATA SEGMENT;数据段 3 DATA ENDS ;堆栈段说明 STACK SEGMENT PARA STACKSTACK;堆栈段 5 STACK ENDS ;代码段说明 6 CODE SEGMENT;代码段 7 START PROC FAR; 远过程调用定义 8ASSUME CSCODE,DSDATA,ESDATA,SSSTACK,完整段定义伪操作基本格式(1),31,9 PUSH DS ;保存返回地址 10 MOV AX , 0 11PUSH AX 12MOV AX , DATA ;初始化DS,ES 13MOV DS , AX 14MOV ES , AX ;自己编写的程序 ; 15RET;返回DOS 16START ENDP ; 17 CODE ENDS;代码段结束 ; 18 END START;汇编到此结束,32,;EXAM
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号