




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第2章章 汇编语言程序中的指令与伪指令汇编语言程序中的指令与伪指令本本 章章 提提 要要 本章在第一章的基础上,更深入详细地说本章在第一章的基础上,更深入详细地说明了明了8086/80888086/8088处理器的汇编语言中的指令和处理器的汇编语言中的指令和伪指令的格式、成分和使用方法及注意要点。伪指令的格式、成分和使用方法及注意要点。本章知识的是读者学习和掌握其它处理器汇编本章知识的是读者学习和掌握其它处理器汇编语言的指令和伪指令的基础,也是学习第三章语言的指令和伪指令的基础,也是学习第三章编程的基础,非常重要。编程的基础,非常重要。2.1 汇编语言的语句格式、汇编语言的语句格式、运算符及
2、表达式运算符及表达式 2.1.1 汇编语言语句格式汇编语言语句格式 组成:组成:名字名字 操作符操作符 操作数操作数 ;注释;注释 指令语句指令语句 LOP1:MOV BL ,SI ; 伪指令语句伪指令语句 A DW 5 名字,又称为标识符。名字,又称为标识符。 指令语句的名字称为指令语句的名字称为“标号标号”, 后面一般要跟后面一般要跟冒号。表示该指令所存放内存单元的符号地址;冒号。表示该指令所存放内存单元的符号地址; 伪指令语句名字的成分较多,有:段名、变量伪指令语句名字的成分较多,有:段名、变量名、符号、记录、结构等,名、符号、记录、结构等, 与标号不同,后面与标号不同,后面不跟冒号,跟
3、空格符。不跟冒号,跟空格符。 (2)命名)命名 使用的字符有:字母使用的字符有:字母AZ,字母,字母az ;不区别大小写。;不区别大小写。 数字数字09;数字不能作为名字的第一个字符。;数字不能作为名字的第一个字符。 专用字符专用字符 ? _ $ * . 等。其中等。其中“.”只能作为名字只能作为名字的第一个字符,的第一个字符,“?”不能单独使用。不能单独使用。 不能用汇编语言的指令助记符、伪指令名、寄存器名、及不能用汇编语言的指令助记符、伪指令名、寄存器名、及其他符号名,其他符号名, 如如SEGMENT、START、SUM等等来命名。名字要好记易等等来命名。名字要好记易用。名字使用的字符长度
4、不得超过用。名字使用的字符长度不得超过31个。个。 合法的名字项,如:合法的名字项,如:DATA1 STR $A1 A? .S2 _CODE OA_2 fah 非法的名字项,如:非法的名字项,如:3DATA,因数字打头;,因数字打头; S.TR ,因,因“.”不在名字的第一个字符;不在名字的第一个字符; $-A1 ,因含非法字符,因含非法字符“-”; ? ,因,因“?”不能单独使不能单独使用;用; .S%2 ,因含非法字符,因含非法字符“%”; -CODE ,因含非法字符,因含非法字符“-”; 0A_2,因,因0不能打头;不能打头; MOV ,因,因MOV是指令助记符;是指令助记符; (3 3
5、)名字属性)名字属性 名字有名字有3 3种属性:段属性、偏移属性及类型属性。这些属性可以种属性:段属性、偏移属性及类型属性。这些属性可以 通过一些运算符重新指定或重新定义通过一些运算符重新指定或重新定义. . 1 1)段()段(SEGSEG)属性。表示名字所在段的段起始地址。)属性。表示名字所在段的段起始地址。 2 2)偏移)偏移(OFFSET)(OFFSET)属性。表示名字在段内偏移地址,标号的偏属性。表示名字在段内偏移地址,标号的偏 移地址存在移地址存在IPIP(指令地址指针)中;变量的偏移地址是(指令地址指针)中;变量的偏移地址是1616位或位或 3232位无符号数,位数取决于段的长度。
6、位无符号数,位数取决于段的长度。 3 3)类型)类型(TYPE)(TYPE)属性。属性。 标号的类型:标号的类型:反映标号转移距离的属性称为标号的类型属性,有反映标号转移距离的属性称为标号的类型属性,有 三种类型:该标号在本段内引用,距离在三种类型:该标号在本段内引用,距离在128128+127+127之间时称之间时称 短标号属性,记为短标号属性,记为SHORTSHORT,指令指针,指令指针IPIP长度为长度为1 1字节。若指明该字节。若指明该 指令是段内使用,指令指针指令是段内使用,指令指针IPIP长度为长度为2 2字节,距离在字节,距离在3276832768 +32767+32767之间时
7、称近标号属性,记为之间时称近标号属性,记为NEARNEAR。而。而FARFAR指明该指令指明该指令 是段外使用,指令指针是段外使用,指令指针IPIP长度为长度为4 4字节,两个高字节指明段地字节,两个高字节指明段地 址,两个低字节指明偏移地址。址,两个低字节指明偏移地址。 变量的类型变量的类型主要定义该变量保留的字节数:主要定义该变量保留的字节数:DBDB,DWDW,DF(6DF(6个个字字 节长度节长度) ),DD (DD (双字,双字,4 4个字节长度个字节长度) ),DQ(8DQ(8个字节长度个字节长度) ),DT(10DT(10 个字节长度个字节长度) )等。对应的类型号等。对应的类型
8、号1 1、2 2、4 4、6 6、8 8、1010。 2操作符操作符 操作符就是指令、伪指令或宏指令的助记操作符就是指令、伪指令或宏指令的助记符。符。 对于指令,汇编程序把操作符翻译成机器对于指令,汇编程序把操作符翻译成机器语言指令,说明要机器语言指令,说明要机器“作什么?作什么?”; 对于伪指令,汇编程序根据操作符的提对于伪指令,汇编程序根据操作符的提示,完成数据定义、分配存储区域、表达式赋示,完成数据定义、分配存储区域、表达式赋值、指令系统的选择、地址计数器的设置与定值、指令系统的选择、地址计数器的设置与定位、指示源程序结束以及位、指示源程序结束以及“宏定义宏定义”等等工作。等等工作。 不
9、产生机器语言指令,仅指示汇编程序怎不产生机器语言指令,仅指示汇编程序怎样将源汇编程序翻译成目标程序。样将源汇编程序翻译成目标程序。 对于宏指令,汇编程序根据操作符的提对于宏指令,汇编程序根据操作符的提示,完成宏调用和宏展开。示,完成宏调用和宏展开。 3操作数操作数 操作数是操作符的操作对象,由一个或多个表达式(详见2.1.2操作数的表达式)组成,当有两个或两个以上的操作数时,各操作数之间用逗号隔开。 对于指令,操作数通常是操作数的地址表达式(请读者回忆“寻址方式”),如常数、寄存器,存储单元; 对于伪指令或宏指令,操作数通常是它们所要求的参数,要给出定义。 4注释字段注释字段 注释字段是以“;
10、”开头的说明部分,可以用英文或者中文书写。注释字段是语句的非执行部分,用来说明本条指令(或本段程序)在程序中的功能和作用。 2.1.2操作数及其表达式操作数及其表达式 1常量常量 (1) 数值常数数值常数 (2) 字符串常量字符串常量 (3) 符号常量符号常量2表达式表达式 (1)(1)数值表达式数值表达式 X +1 ;表达式为变量名;表达式为变量名“X”的值加的值加1 19 MOD 7 ;19除除7的余数是的余数是5 AND AX ,075FH ;将(;将(AX)和)和075FH按位作按位作“与与”运运算算 (2) “?“表示预留的存储空间表示预留的存储空间。 (3) 地址表达式地址表达式的
11、运算结果是内存的偏移地址。的运算结果是内存的偏移地址。 第一章讲过的第一章讲过的“寻址方式寻址方式”,都是简单的地址表达式。如,都是简单的地址表达式。如地址表达式地址表达式 offset data ;表示取变量;表示取变量“data”的偏移量的偏移量 1)两个地址相加、相乘、相除是无意义两个地址相加、相乘、相除是无意义 2) 地址加地址加(减减)数字量的表达式是有意义的,数字量的表达式是有意义的, 3)两个地址相减也是有意义的两个地址相减也是有意义的 而指令而指令MOV AX,(ARRAY_END ARRAY)2 则表示把数组长度则表示把数组长度(即字数即字数)存入寄存器存入寄存器AX中。中。
12、 (4) 操作数字段可以使用复制定义符操作数字段可以使用复制定义符DUP。 2.1.3操作数表达式中的运算符操作数表达式中的运算符1算术运算符算术运算符 有有+、/、MOD(求余)、(求余)、SHL(左移)、(左移)、SHR(右移)(右移)7种运算。种运算。 如:如:50H+23;50H + 23 = 50H + 17H = 67H 43H35 = 6735 = 2345 = 0929H 0DEH MOD 3 = 222 MOD 3 = 00H2逻辑运算符逻辑运算符 有有AND(与)、(与)、OR(或)、(或)、XOR(异或)和(异或)和NOT(非)(非) 例:例:NOT 0AH的作用就是将的
13、作用就是将0AH按位取按位取“反反”。 = NOT 00001010B = 11110101B = 0F5H 而而23 AND 66 的作用就是将的作用就是将23 = 17H = 0000000000010111B和和66 = 42 H = 0000000001000010 B按位作逻辑按位作逻辑“与与”运算,结果运算,结果0000000000000010B = 0002H 又如又如0CDH XOR 85H的作用就是将的作用就是将0CDH = 11001101B和和85H = 10000101 H按位作逻辑按位作逻辑“异或异或”运算,结果运算,结果01001000B = 48H 3关系运算符关
14、系运算符 有有EQ(相等)、(相等)、NE(不相等)、(不相等)、LT(小于)、(小于)、GT(大(大于)、于)、LE(小于或等于)、(小于或等于)、GE(大于或等于)(大于或等于)6种。其种。其结果为逻辑值:结果为真,用结果为逻辑值:结果为真,用1的补码的补码0FFFFH表示;结表示;结果为假,用果为假,用0表示;表示; 例如:例如:10 LE 0AH是正确的,运算的结果是是正确的,运算的结果是0FFFFH4分析运算符分析运算符 分析运算符是对存储器地址进行运算的,又称数值回送运分析运算符是对存储器地址进行运算的,又称数值回送运算符。算符。5个:个:SEG(求段首址)、(求段首址)、OFFS
15、ET(求偏移量)、(求偏移量)、TYPE(求变量类型)、(求变量类型)、LENGTH(求变量长度)和(求变量长度)和SIZE(求变量字节数)。(求变量字节数)。 LENGTH(求变量长度)求变量复制次数的分析运算符,(求变量长度)求变量复制次数的分析运算符,取取DUP前面的数值,前面的数值, 例如:例如:DATA1 DD 30 DUP(0,3 DUP(1), 2),这里,这里(LENGTH DATA1)= 30 , 而对于而对于 ARRAY2 DB 20,30 DUP(0),这里,这里(LENGTH ARRAY2 )= 1。 但但 ARRAY3 DB 20 DUP(0),20,这里(,这里(L
16、ENGTH ARRAY3 )=20。 SIZE (求变量字节数)(求变量字节数) ,有公式如下:,有公式如下: SIZE 某变量某变量 = (LENGTH 某变量某变量) (TYPE 某变量某变量) 例如(例如(SIZE DATA1)= 304 = 120 = 78H ,而(,而(SIZE ARRAY2)= 1,(,(SIZE ARRAY3)= 205综合运算符综合运算符5.1 5.1 属性定义操作符属性定义操作符PTRPTR VARl DB 10H,20H,30H VAR2 DW 1234H0A845H 则在指令中,运用则在指令中,运用PTR运算符使运算符使VARl由原来的字节变量由原来的字
17、节变量“临时临时”改变成字变量,使改变成字变量,使VAR2由原来的字变量字节变由原来的字变量字节变量量“临时临时”变成字节变量。如下:变成字节变量。如下: MOV AX,WORD PTR VARl ;2010H传送到传送到 AX MOV BL,BYTE PTR VAR2 ; ;34H传送到传送到 BL 而指令:而指令:ADD 2SI,2 操作数的类型不明确,是错误指令,应改为:操作数的类型不明确,是错误指令,应改为: MOV BYTE PTR 2SI,2; 或或 MOV WORD PTR 2SI,2;表示把立即数送入;表示把立即数送入EA = SI+2的字存储单元中。的字存储单元中。(2) 类
18、型指定运算符类型指定运算符 格式:格式:THIS 属性或类型属性或类型 功能:该运算符主要用来为相应的变量名或标功能:该运算符主要用来为相应的变量名或标号指定类型属性,用来指定下一个能分配的存号指定类型属性,用来指定下一个能分配的存储单元的类型。被指定变量或标号的地址属性储单元的类型。被指定变量或标号的地址属性(段基址和偏移量段基址和偏移量)和下一条邻接语句的变量或标和下一条邻接语句的变量或标号相同。号相同。(3) 段属性前缀段属性前缀 格式:段寄存器格式:段寄存器(或或“段名段名”,或,或“段组名段组名”): 地址表达式地址表达式 如如 MOV AX,ES:BX+SI (4) 短转移运算符短
19、转移运算符SHORT 见见 转移指令转移指令(5) 分离字节运算符分离字节运算符 例:例: HIGH 3C5FH = 3CH LOW 3C5FH = 5FH 6运算符优先级运算符优先级 同级运算,按照自左向右的顺序进行。优先级如下:同级运算,按照自左向右的顺序进行。优先级如下: (1) 圆括号中的项圆括号中的项,操作优先执行。多重圆括号由内向外操作优先执行。多重圆括号由内向外逐层执行。逐层执行。 (2) 方括号中的项。方括号中的项。 (3) 结构变量结构变量(变量、字段变量、字段)。 (4) LENGTH、SIZE、WIDTH和和MASK。 (5) 段属性前缀:段属性前缀: (6) PTR、O
20、FFSET、SEG、 TYPE、THIS及段操作符。及段操作符。 (7) HIGH和和LOW。 (8) 乘法和除法:、乘法和除法:、MOD、SHL、SHR: (9) 加法和减法:加法和减法:+、一。、一。 (10) 关系操作:关系操作:EQ、NE、LT、LE、GT、GE。 (11) 逻辑操作:逻辑操作:NOT。 (12) 逻辑操作:逻辑操作:AND。 (13) 逻辑操作:逻辑操作:OR、XOR。(14) SHORT2.2 汇编语言程序中的伪指令汇编语言程序中的伪指令 段定义伪指令: 段名段名 SEGMENT 定位类型定位类型 组合类型组合类型 类别类别 如:如:DATA1 SEGMENT ;D
21、ATA1是段名。是段名。 又如:又如:CODE SEGMENT ;CODE是段名。是段名。 一般情况下,定位类型、组合类型、和类别三个属性可以不一般情况下,定位类型、组合类型、和类别三个属性可以不用说明。但是,如果需要把一个程序与其它程序模块相连接用说明。但是,如果需要把一个程序与其它程序模块相连接时,就要用到这些属性。将在第七章作进一步地讨论。时,就要用到这些属性。将在第七章作进一步地讨论。2.2.2ASSUME伪指令伪指令 CODE1 SEGMENT ASSUME CS:CODE1, DS:DATA1, ES:DATA2 ASSUME DS:DATA3, ES:NOTHING;改变前面;改
22、变前面ASSUME语句所说明的对应关系,语句所说明的对应关系,DS对应于数据段对应于数据段DATA3,而段寄存器而段寄存器ES不与任何段相对应。不与任何段相对应。 1CS的装入的装入 当源程序当源程序 CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:EXTRA CODE ENDS END START 经过汇编、连接后,由经过汇编、连接后,由DOS系统将其装入存储器中,同时系统将其装入存储器中,同时将程序要执行的第一条指令地址装入将程序要执行的第一条指令地址装入CS、IP中,然后从这中,然后从这条指令开始执行。条指令开始执行。2DS和和ES的装入的装入 在程序中,必
23、须使用在程序中,必须使用MOV指令才能将对应段的段地址指令才能将对应段的段地址装入寄存器装入寄存器DS和和ES中。中。 例如:例如:MOV AX , DATA1 MOV DS , AX MOV ES , AX 3SS的装入的装入 堆栈段是一个特殊的段,一个完整的源程序一般最好定堆栈段是一个特殊的段,一个完整的源程序一般最好定义堆栈段。除了要生成义堆栈段。除了要生成COM型执行文件的源程序外,型执行文件的源程序外,如果在程序中不定义堆栈段,那么,操作系统在装入该如果在程序中不定义堆栈段,那么,操作系统在装入该执行程序时将自动为其指定一个执行程序时将自动为其指定一个64K字节的堆栈段。字节的堆栈段
24、。 在程序没有定义堆栈段的情况下,在由连接程序生在程序没有定义堆栈段的情况下,在由连接程序生成执行文件时,将会产生警告信息,但可以不理会,所成执行文件时,将会产生警告信息,但可以不理会,所生成的执行文件是可以正常运行的。生成的执行文件是可以正常运行的。 warning xxxx: no stack segment (其中:其中:xxxx是错是错误号误号) SS装入段地址的方法有两种:装入段地址的方法有两种: (1) 定义堆栈段时,定义堆栈段时,SEGMENT语句中的组合类型选择语句中的组合类型选择STACK。如:。如:STACK1 SEGMENT PARA STACK DW 40 DUP(0)
25、 ;40是堆栈的长度,可根据需要进行改变是堆栈的长度,可根据需要进行改变 TOP LABEL WORD ;说明栈顶别名,可省略此语句;说明栈顶别名,可省略此语句STACKL ENDS 在源程序经过汇编、连接时,由在源程序经过汇编、连接时,由DOS系统自动将系统自动将STACKL段段的段地址装入的段地址装入SS中,同时使中,同时使SP指向栈底指向栈底+2的存储单元。的存储单元。 (2)如果在程序中要调换堆栈段,则可用类似装入)如果在程序中要调换堆栈段,则可用类似装入DS、ES的方法,即的方法,即 用指令来实现用指令来实现SS、SP的装入。的装入。 例如:例如: CODE SEGMENT ASSU
26、ME CS:CODE,SS:STACK1START: MOV AX,STACK2 MOV SS,AX MOV SP,0FFSET TOS ;栈底;栈底+2的地址存入的地址存入SP 应注意,应注意,SS、SP必须同时初始化。必须同时初始化。 2.2.3 数据定义伪指令数据定义伪指令 格式为:格式为: 变量名变量名 数据定义符数据定义符 操作数操作数 ,操作数,操作数 ;注释;注释 常用的数据类型定义符有:常用的数据类型定义符有: DB:字节变量定义符。:字节变量定义符。 DW:字变量定义符。:字变量定义符。 DD:双字变量定义符。:双字变量定义符。 DQ:四字变量定义符。:四字变量定义符。 DF
27、:六字节变量定义符。:六字节变量定义符。 DT:十字节变量定义符。常用于表示压缩的:十字节变量定义符。常用于表示压缩的BCD码。码。 还有一些其他的数据类型定义符,见还有一些其他的数据类型定义符,见2.4.2 等值定义伪等值定义伪指令指令EQU与属性定义操作符与属性定义操作符PTR的联合使用以及的联合使用以及2.4.3 等值定义伪指令等值定义伪指令EQU与类型指定运算符与类型指定运算符THIS的联合使的联合使用。用。 2.2.4 符号定义伪指令符号定义伪指令 1等值定义伪指令等值定义伪指令EQU 例如:例如: NUM EQU 100 ;给缓冲区的长度取一个符号名。;给缓冲区的长度取一个符号名。
28、 BUFF_LEN EQU NUM + 5 ;BUFF_LEN的偏移地址为的偏移地址为105 BFD EQU DS:BP + 6; (3) 用符号名代表字符串用符号名代表字符串 例如:例如:GREETINGEQU“How are you!” MOVEEQUMOV ;给指令;给指令MOV取另一个符号名取另一个符号名MOVECOUNTER EQUCX ;给寄存器;给寄存器CX取一个叫取一个叫 ;“COUNTER(计数器)(计数器)”的符号名的符号名2等值定义伪指令等值定义伪指令EQU与属性定义操作符与属性定义操作符PTR的联合使用的联合使用 如下面语句已定义如下面语句已定义START属性是属性是N
29、EAR(因为(因为START的后面接的后面接冒号),冒号), START:MOV CX,100重新将其标号命名为重新将其标号命名为FAR_START,使属性变为,使属性变为FAR。 FAR_START EQU FAR PTR START 又如对于变量:又如对于变量: ACS DW ? 这里定义了一个字的保留存储单元,若要对这个字的这里定义了一个字的保留存储单元,若要对这个字的两个字节分别使用,就必须对这个字的两个字节赋予两个字节分别使用,就必须对这个字的两个字节赋予另一种类型的定义:另一种类型的定义: ACS0 EQU BYTE PTR ACS ACS1 EQU BYTE PTR (ACS+1
30、)3等值定义伪指令等值定义伪指令EQU与类型指定运算符与类型指定运算符THIS的联合使用的联合使用(1) 用于变量用于变量 FIRST_BYTE EQU THIS BYTE;给后面的字存储单元取;给后面的字存储单元取 字节属性符号名。字节属性符号名。 WORD_TYPE DW 1122H 有了上述定义后,可编写如下语句:有了上述定义后,可编写如下语句: MOV AL,FIRST_BYTE ;FIRST_BYTE作为字节变量,作为字节变量, 将将22H传送给寄存器传送给寄存器AL MOV BX,WORD_TYPE ;WORD_TYPE作为字变量,将作为字变量,将 1122H传送给寄存器传送给寄存
31、器BX 又例如又例如: STACK SEGMENT DW 100 DUP(?) TOP EQU THIS WORD STACK END 变量变量TOP被定义为字类型,它的偏移量应为被定义为字类型,它的偏移量应为STACK段定义段定义100个字后的下一个字的偏移量,它恰就是堆栈指针个字后的下一个字的偏移量,它恰就是堆栈指针SP的初值,因的初值,因此经常用这种方法为此经常用这种方法为SP赋初值。赋初值。 (2) 用于标号用于标号 START EQU THIS FAR ;赋予传送指令;赋予传送指令(MOV)有一个有一个FAR属性的地址属性的地址START。 MOV CX,100 4等号语句伪指令等号
32、语句伪指令 汇编语言提供了用等号来定义符号常数的方法,即汇编语言提供了用等号来定义符号常数的方法,即可用符号名代表一个常数。其一般格式如下可用符号名代表一个常数。其一般格式如下: 符号名符号名 数值表达式数值表达式 ABC = 10 + 200 5;ABC的值为的值为1010 ABC1 = 5 ABC + 21;ABC1的值为的值为5071 COUNT = 1;COUNT的值为的值为1 COUNT = 2COUNT + 1;COUNT的值为的值为3 2.2.5 用伪指令用伪指令LABEL定义变量和标号定义变量和标号 1定义变量定义变量 格式:变量名格式:变量名LABEL类型类型 例如:例如:B
33、UF LABEL BYTE DB 21 它等价于它等价于BUF DB 21 2定义标号定义标号 对于属性为对于属性为NEAR 和和FAR标号均可以用这种定义。标号均可以用这种定义。 格式是格式是: 标号名标号名LABEL类型类型 例如:例如: NEXT LABEL 类型类型 LOOP NEXT 2.2.6 LABEL和和THIS作为双类型数据定义符的使用作为双类型数据定义符的使用双重定义变量名利用隐含或显式的双重方式,可以对同一内存位置定义为双重变量。例如:AB EQU THIS BYTE (或AB LABEL BYTE ) AW DW 50 DUP(0)AW定义为字变量,在AW前使用了THI
34、S BYTE,定义了一个字节类型变量,访问同一内存位置,用AB按字节访问,用AW则按字访问。可以归纳为如下格式:(变量名)EQU THIS (类型) 和 (变量名)LABEL (类型) (变量名)DB/DW/DD (变量名)DB/DW/DD PTR操作符、操作符、LABEL伪指令与伪指令与THIS操作符的区别。操作符的区别。格式不同格式不同 PTR操作符的格式:操作符的格式: 用于指令中,用于指令中, 类型类型 PTR PTR 表达式表达式 用于等值定义伪指令用于等值定义伪指令EQU中,中, 变量或标号的新名变量或标号的新名 EQU EQU 属性或类型属性或类型 PTR PTR 变量或标号的原
35、名变量或标号的原名双类型数据定义符双类型数据定义符THIS的格式的格式 EQU THIS EQU THIS 属性或类型属性或类型双类型数据定义符双类型数据定义符LABEL格式。格式。 LABEL LABEL 属性或类型属性或类型范围不同范围不同PTR操作符既可用于操作符既可用于指令指令,又可用于等值定义伪指令,又可用于等值定义伪指令EQU。 双类型数据定义符双类型数据定义符THIS只用于等值定义伪指令只用于等值定义伪指令EQU中。中。 双类型数据定义符双类型数据定义符LABEL只作只作定义伪指令定义伪指令用。用。时限不同时限不同 PTR操作符既可用于指令,又可用于伪指令操作符既可用于指令,又可
36、用于伪指令EQU。 当当PTR操作符用于指令操作符用于指令中,中,只在该语句中有效只在该语句中有效. 当当PTR操作符用于等值定义伪指令操作符用于等值定义伪指令EQU,在整个程序中起作用在整个程序中起作用。 与与THIS用于等值定义伪指令用于等值定义伪指令EQU中,以及中,以及LABEL作定义伪作定义伪指令用,指令用,都是在整个程序中起作用的都是在整个程序中起作用的。2.2.7 置汇编地址计数器伪指令置汇编地址计数器伪指令 地址计数器的值用地址计数器的值用“$”来表示,用户可以通过来表示,用户可以通过“$”直接引用直接引用地址计数器的值。地址计数器的值。 例如:例如:COUNT EQU $VA
37、R2 ; 给表达式给表达式$-VAR2起名字起名字COUNT,如果变量,如果变量VAR2开始的符号开始的符号地址(偏移地址)为地址(偏移地址)为7,其数值一直延续到当前偏移地址,设,其数值一直延续到当前偏移地址,设为为EA = 16,即,即$ = 16,则,则COUNT的值表示的值表示VAR2的长度,的长度,16 7 = 9,不占内存。,不占内存。 又例如:又例如: VAR6 DW 1, 2 , $ + 4 ,3 , 4 , $ + 4; 这里这里VAR6数组中的两个数组中的两个$ + 4得到的结果是不同的,这是由得到的结果是不同的,这是由于于$的值在不断变化的缘故。的值在不断变化的缘故。 如
38、汇编时为如汇编时为VAR6分配的偏移地址值为分配的偏移地址值为0100H,则前面的,则前面的$ + 4的当前值是的当前值是 0108,因,因$保存的当前偏移地址保存的当前偏移地址EA = 0104,则,则(VAR6 + 4)= (0104H)= 0108H ,(,(VAR6 + 5)=(0105H)= 010A H ,;后面的;后面的$+4的当前值是的当前值是 010EH,因因 $ 保存的当前偏移地址保存的当前偏移地址EA = 010AH,则(,则(VAR6+10)=(010AH)= 0E H ,(,(VAR6+11)=(010BH)= 010E H 。 2.2.8 地址定位伪操作地址定位伪操
39、作1偶对齐伪指令偶对齐伪指令EVEN 格式:格式:EVEN 功能:使下一个字节地址成为偶数。功能:使下一个字节地址成为偶数。 例如:例如:DATA SEGMENT A DB ABCDEFG ;7个字符占个字符占7个字节,下一个存储单元是奇地址。个字节,下一个存储单元是奇地址。 EVEN ;以下;以下100个个“字字”从偶地址开始。从偶地址开始。 ARRAY DW 100 DUP(?)DATA ENDS2对齐伪指令对齐伪指令ALIGN格式:格式: ALIGN NUM 其中:其中:NUM必须是必须是2的幂,如:的幂,如:2、4、8和和16等。等。功能:告诉汇编程序,本伪指令下面的内存变量必须从下一
40、个能被功能:告诉汇编程序,本伪指令下面的内存变量必须从下一个能被NUM整整除的地址开始分配。如果下一个地址正好能被除的地址开始分配。如果下一个地址正好能被NUM整除,那么,该伪指令整除,那么,该伪指令不起作用;不起作用;否则,汇编程序将空出若干个字节,直到下一个地址能被否则,汇编程序将空出若干个字节,直到下一个地址能被NUM整除为止。整除为止。试比较下面二组变量定义,它们的对齐效果一致吗?试比较下面二组变量定义,它们的对齐效果一致吗?B1 DB12H B1 DB12HEVEN ALIGN2W1 DW4567H W1 DW4567H从上面对比,我们不难看出:伪指令从上面对比,我们不难看出:伪指令
41、ALIGN的说明功能要比伪指令的说明功能要比伪指令EVEN强。强。3调整偏移量伪指令调整偏移量伪指令ORG 格式:格式:ORG 表达式表达式 功能:使下一个字节的地址成为表达式的值。该伪指令可用于数据功能:使下一个字节的地址成为表达式的值。该伪指令可用于数据段、代码段的任何位置。段、代码段的任何位置。 例如:例如: DATA SEGMENT ORG 10H ;使下一个字节的偏移地址成为表达式的值:;使下一个字节的偏移地址成为表达式的值:10H。 VARL DW 4567H ;VARL的偏移地址为的偏移地址为10H。 ORG $ + 10H ;使下一个字节的偏移地址成为表达式的值:设;使下一个字
42、节的偏移地址成为表达式的值:设 $ = 10H, $ + 10H = 0022H 。 VAR2 DW 1234H DATA ENDS CODE SEGMENT ORG 100HSTART: MOV AX,DATA ;此指令的偏移地址为;此指令的偏移地址为0100H。 CODE ENDSEND START 再举一例,假设在给变量再举一例,假设在给变量W1W1分配内存单元时,当前分配内存单元时,当前偏移量计数器偏移量计数器$ $ 的值为的值为2 2: W1 DW $, $ ;变量;变量W1后面第一个后面第一个“$”代表数值代表数值2,第一个字分,第一个字分配后,偏移量计数器配后,偏移量计数器$的值
43、为的值为4,第二个字分配完后,第二个字分配完后,“$”就代表数值就代表数值6。 ORG $+3 ;从当前地址;从当前地址$ = 6开始空开始空3个字节。个字节。$+3的值为的值为9,所以,伪指令所以,伪指令“ORG $+3”就表示下一个变量从偏就表示下一个变量从偏移量为移量为9的单元地址开始分配。的单元地址开始分配。 B1 DB 43H 注意:如果在指令中用到注意:如果在指令中用到“$”,它只代表该指令的,它只代表该指令的首地址,而与首地址,而与“$”本身所在的字节无关。本身所在的字节无关。 比如指令:比如指令:JNZ $ + 6 ;表示指令由此跳转到下面表示指令由此跳转到下面 第第6条指令执
44、行。条指令执行。2.2.9 基数控制伪指令基数控制伪指令 格式:RADIX 基数值 RADIX 16 MOV BX,0FFH MOV AX,178DH 应当注意,在把基数定为十六进制后,十进制数后面都应加字母D。在这种情况下,如果某个十六进制数的末字符为D,则应在其后跟字母H,以免与十进制数发生混淆。 2.3 8086/8088处理器的汇编语言处理器的汇编语言常用指令常用指令 2.3.1 数据传送指令数据传送指令 2.3.2 算术运算指令算术运算指令 2.3.3 逻辑运算指令逻辑运算指令 2.3.4 移位指令移位指令 2.3.5 串操作指令串操作指令 2.3.6 控制转移指令控制转移指令 2.
45、3.7 循环指令循环指令 2.3.8 过程调用和返回指令过程调用和返回指令 2.3.9 中断指令中断指令 2.3.10 处理机控制指令处理机控制指令2.3.1 数据传送指令数据传送指令返回第3章作用:它们在存贮器、寄存器和输入输出端口之间传送数据。作用:它们在存贮器、寄存器和输入输出端口之间传送数据。分类:数据传送指令可以分为分类:数据传送指令可以分为:传送指令、交换指令、地址传送指令、传送指令、交换指令、地址传送指令、堆栈操作指令、标志传送指令、查表指令、输入输出指令。堆栈操作指令、标志传送指令、查表指令、输入输出指令。1、传送指令、传送指令格式格式: MOV DST,SRC(DST为目的操
46、作数,为目的操作数,SRC为源操作数)为源操作数)功能:该指令把一个字节或一个字从功能:该指令把一个字节或一个字从SRC送到送到DST。例例3-17 MOV AH,AL ;通用寄存器之间传送;通用寄存器之间传送 MOV AL,3 ;立即数与通用寄存器之间传送;立即数与通用寄存器之间传送 MOV AX,DI ;寄存器与存储器之间传送;寄存器与存储器之间传送(寄存器间接寻寄存器间接寻址址)说明:说明:1)源操作数可以是立即数、寄存器、存储单元或者是累加器。)源操作数可以是立即数、寄存器、存储单元或者是累加器。2)目的操作数可以是累加器、寄存器(除)目的操作数可以是累加器、寄存器(除CS 外)和存储
47、单元。外)和存储单元。3)禁止:立即数)禁止:立即数段段寄存器;存储器寄存器;存储器存储器;存储器;段段寄存器寄存器段段寄存寄存器;器; 4)MOV指令不改变指令不改变SRC;不影响标志位。;不影响标志位。2、交换指令、交换指令格式格式: XCHG OPRD1,OPRD2(OPRD为操作数)为操作数)功能:该指令把功能:该指令把OPRD1的内容与的内容与OPRD2的内容交换。的内容交换。例例3-18 XCHG SI+3,AL ;存储器与寄存器之间交换数据;存储器与寄存器之间交换数据 XCHG DI,BX ;寄存器之间交换数据;寄存器之间交换数据说明:说明:OPRD1和和OPRD2可以是通用寄存
48、器和存储单元但不包括段寄存器,可以是通用寄存器和存储单元但不包括段寄存器,也不能同时为存储单元,不能包含立即数。也不能同时为存储单元,不能包含立即数。OPERAND-操作数操作数地址传送指令又有地址传送指令又有3条指令条指令(1)LEA 装入有效地址指令装入有效地址指令(Load effective address )格式:格式:LEA REG,OPRD(REG为寄存器,为寄存器,OPRD为操作数)为操作数)功能:该指令把操作数功能:该指令把操作数OPRD的有效地址传送到的有效地址传送到REG寄存器中。寄存器中。例例3-19 LEA AX,BX+3 ;将操作数的有效地址(即偏移地;将操作数的有
49、效地址(即偏移地 址)送入寄存器址)送入寄存器AX LEA DX,BUFFER;BUFFER为变量名为变量名说明:说明:1)OPRD必须是一个存储器操作数。必须是一个存储器操作数。2)REG必须是一个必须是一个16位通用寄存器。位通用寄存器。3、地址传送指令、地址传送指令-1(2)LDS 传送目标指针传送目标指针,把指针内容装入把指针内容装入DS指令指令(Load DS with Pointer )格式:格式:LDS REG,OPRD(REG为寄存器,为寄存器,OPRD为操作数)为操作数)功能:该指令把操作数功能:该指令把操作数OPRD中包含的中包含的32位地址指针段值部分(高位地址指针段值部
50、分(高16位)位)送到数据段寄存器送到数据段寄存器DS,把偏移部分(低,把偏移部分(低16位)送到通用寄存器位)送到通用寄存器REG。例例3-20 LDS DI,BX LDS SI,FARPOINTER ;FARPOINTER是一个双字变量是一个双字变量解:若已知解:若已知(DS)=4000H,(BX)=1234H,(41234H)=78H, (41235H)=56H,(,(41236H)=BCH, (41237H)=9AH,则(则( DI )= 5678H, (DS)=9ABCH, 若已知(若已知(FAR POINTER)=76BF3498H,则则 ( SI )= 3498H, (DS)=7
51、6BFH,说明:说明:1)REG表示除段寄存器之外的表示除段寄存器之外的16位通用寄存器。位通用寄存器。2)OPRD表示双字的各种寻址方式的存储器操作数的首地址。表示双字的各种寻址方式的存储器操作数的首地址。(3)LES 传送目标指针传送目标指针,把指针内容装入把指针内容装入ES指令指令(Load ES with Pointer )格式:格式:LES REG,OPRD功能:该指令把操作数功能:该指令把操作数OPRD中包含的中包含的32位地址指针的段值部分(高位地址指针的段值部分(高16位)位)送到附加段寄存器送到附加段寄存器ES中,把偏移部分(低中,把偏移部分(低16位)送到通用寄存器位)送到
52、通用寄存器REG中。中。例例3-20 LES DI,BX LES SI,FARPOINTER ;FARPOINTER是一个双字变量是一个双字变量解:若已知解:若已知(ES)=8000H,(BX)=1234H,(81234H)=78H, (81235H)=56H,(,(81236H)=BCH, (81237H)=9AH,则(则( DI )= 5678H, (ES)=9ABCH, 若已知(若已知(FAR POINTER)=76BF3498H,则则 ( SI )= 3498H, (ES)=76BFH,说明:说明:1)REG表示除段寄存器之外的表示除段寄存器之外的16位通用寄存器。位通用寄存器。2)O
53、PRD表示双字的各种寻址方式的存储器操作数的首地址。表示双字的各种寻址方式的存储器操作数的首地址。3、地址传送指令、地址传送指令-2 堆栈是只允许在一端进行数据插入和数据删除操作的线性表,它是一段堆栈是只允许在一端进行数据插入和数据删除操作的线性表,它是一段RAM,其中地址较大的为栈底,地址较小的为栈顶(进行数据插入和删除操作,其中地址较大的为栈底,地址较小的为栈顶(进行数据插入和删除操作的一端)。堆栈的段值存放在段寄存器的一端)。堆栈的段值存放在段寄存器SS中,指针中,指针SP始终指向栈顶。栈的操作始终指向栈顶。栈的操作遵循先进后出的原则。遵循先进后出的原则。(1)PUSH 把字压入堆栈指令
54、把字压入堆栈指令格式:格式:PUSH SRC(SRC为源操作数)为源操作数)功能:该指令把源操作数功能:该指令把源操作数SRC压入堆栈,压入堆栈,SP随着压栈而减小。随着压栈而减小。例例3-21 PUSH SI PUSH DS PUSH SI说明:数据进入堆栈的时候遵守说明:数据进入堆栈的时候遵守”高高低低高高低低”原则,即高位数据放在高字节中,原则,即高位数据放在高字节中,低位数据放在低字节中。低位数据放在低字节中。(2)POP 把字弹出堆栈指令把字弹出堆栈指令格式:格式:POP DST(DST为目的操作数)为目的操作数)功能:该指令从堆栈弹出一个字数据到目的操作数功能:该指令从堆栈弹出一个
55、字数据到目的操作数DST,SP随着出栈而增大。随着出栈而增大。例例3-22 POP SI POP ES POP SI说明:说明:DST可以是通用寄存器以及段寄存器可以是通用寄存器以及段寄存器(除除CS外外),也可以是字存储单元。也可以是字存储单元。4、堆栈操作指令、堆栈操作指令8086/80888CPU中有专用于标志寄存器的指令。中有专用于标志寄存器的指令。(1)LAHF标志位送标志位送AH指令指令格式:格式:LAHF功能:该指令把标志寄存器低功能:该指令把标志寄存器低8位位(SF、ZF、AF、PF、CF)传送到传送到寄存器寄存器AH的指定位的指定位(即即7、6、4、2、0)。(2)SAHF将
56、将AH送入标志寄存器指令送入标志寄存器指令格式:格式:SAHF功能:该指令把寄存器功能:该指令把寄存器AH的指定位传送到标志寄存器的低的指定位传送到标志寄存器的低8位位(即即该指令为该指令为LAHF逆操作逆操作)。(3)PUSHF标志寄存器进栈指令标志寄存器进栈指令格式:格式:PUSHF功能:该指令把标志寄存器的内容压入堆栈。该指令不影响标志。功能:该指令把标志寄存器的内容压入堆栈。该指令不影响标志。(4)POPF标志寄存器出栈指令标志寄存器出栈指令格式:格式:POPF功能:该指令把当前堆栈的一个字传给标志寄存器,同时功能:该指令把当前堆栈的一个字传给标志寄存器,同时SP加加2,该指令影响对应
57、的标志位。该指令影响对应的标志位。5、标志传送指令、标志传送指令(1)IN I/O端口输入指令端口输入指令格式:格式:IN AL,端口地址或,端口地址或IN AX,端口地址,端口地址功能:从功能:从8位端口读入一个字节到位端口读入一个字节到AL寄存器中,或从寄存器中,或从 16位端口读入一个字到位端口读入一个字到AX寄存器中。寄存器中。(2)OUT I/O端口输出指令端口输出指令格式:格式:OUT 端口地址,端口地址,AL 或或 OUT 端口地址,端口地址,AX功能:将功能:将AL中的一个字节写到一个中的一个字节写到一个8位端口,或把位端口,或把 AX中的一个字写到一个中的一个字写到一个16位
58、端口。位端口。返回第3章6、输入输出端口传送指令、输入输出端口传送指令作用:完成对数值的加、减、乘、除等运算。作用:完成对数值的加、减、乘、除等运算。3.2.2 算术运算指令算术运算指令1、加法运算指令、加法运算指令(1)ADD加法指令加法指令格式:格式:ADDDST,SRC(DST为目的操作数,为目的操作数,SRC为源操作数)为源操作数)功能:将功能:将DST内容与内容与SRC内容相加,结果存入内容相加,结果存入DST当中,当中,SRC内容不变。内容不变。例例3-23 执行如下指令:执行如下指令: MOV AX,1234H MOV BX,2211H ADD AX,BX 说明:说明:1)当)当
59、SRC是立即数或寄存器操作数时,是立即数或寄存器操作数时,DST可以是寄存器或存储器操作数。可以是寄存器或存储器操作数。2)当)当SRC是存储器操作数时,是存储器操作数时,DST只能是寄存器操作数。只能是寄存器操作数。3)段寄存器操作数不能为)段寄存器操作数不能为SRC和和DST。4)该指令会影响)该指令会影响OF,PF,SF,ZF ,AF标志位。标志位。(2)ADC带进位加法指令带进位加法指令(add with carry)格式:格式:ADC DST ,SRC(DST为目的操作数,为目的操作数,SRC为源操作数)为源操作数)功能:将功能:将DST内容加上内容加上SRC内容再加上内容再加上CF
60、进位标志,并将结果送进位标志,并将结果送DST中。中。例例3-24 设(设(CF)=0,问下列指令执行过程?,问下列指令执行过程?MOV AX,4653HADD AX,0F0F0HMOV DX,0234HADC DX,0F01H答:第一条指令和第二条指令计算低答:第一条指令和第二条指令计算低16位的和;第三条指令和第四条指令计位的和;第三条指令和第四条指令计算高算高16位的和;还要加上低位的和;还要加上低16位的进位。位的进位。第一条指令是将第一条指令是将4653H值送入值送入AX中;第二条指令是将中;第二条指令是将AX中的内容加上中的内容加上0F0F0H,因为有进位,所以(,因为有进位,所以
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版环保设施运营合同范本指南
- 二零二五版建筑设备租赁与维护服务合同范本
- 黑龙江哈三中2025年高一物理第二学期期末达标检测模拟试题含解析
- 2025年搬家服务合同含搬家服务期间法律咨询
- 2025版餐饮废弃物处理与废弃物处理设施运营管理合同
- 二零二五年绿色照明灯具安装与节能改造合同范本
- 2025版智能餐饮企业员工福利及休假合同
- 二零二五年度酒店宾馆保洁托管服务合作协议
- 2025年河南省信阳市第一高级中学物理高一第二学期期末监测试题含解析
- 2025版爆破作业安全生产责任书及合同
- 直播带货主播用工合同范本
- 四川成都环境投资集团有限公司及下属公司招聘笔试题库2025
- 企业研究院可行性研究报告
- 2025年3月三级老年人能力评估师模拟试题及答案(附解析)
- 社区矫正工作实务培训课件
- 2025年行政管理期末试题及答案
- 2024-2025学年广东省深圳市高一数学下学期7月期末考试(附答案)
- 泰安宏生光电科技有限公司钙钛矿零碳建筑新材料BIPV项目可行性研究报告
- 九年级化学上册(沪教版2024)新教材解读课件大纲
- DB11T 1072-2025 城市桥梁工程施工质量检验标准
- 江山南方水泥有限公司浙江省江山市大陈乡乌龙村铁锤山水泥用灰岩矿建设项目环境影响报告表
评论
0/150
提交评论