微型计算机原理:第3章汇编语言程序设计基本方法2015

上传人:努力****83 文档编号:187506316 上传时间:2023-02-15 格式:PPT 页数:360 大小:4.11MB
收藏 版权申诉 举报 下载
微型计算机原理:第3章汇编语言程序设计基本方法2015_第1页
第1页 / 共360页
微型计算机原理:第3章汇编语言程序设计基本方法2015_第2页
第2页 / 共360页
微型计算机原理:第3章汇编语言程序设计基本方法2015_第3页
第3页 / 共360页
资源描述:

《微型计算机原理:第3章汇编语言程序设计基本方法2015》由会员分享,可在线阅读,更多相关《微型计算机原理:第3章汇编语言程序设计基本方法2015(360页珍藏版)》请在装配图网上搜索。

1、1第第3 3章章 IBM PCIBM PC汇编语言程序设计汇编语言程序设计内容提要:内容提要:n 基本概念基本概念n Intel80 x86系列系列CPU指令系统指令系统n 汇编语言程序设计的基本方法汇编语言程序设计的基本方法n 汇编语言程序的上机过程汇编语言程序的上机过程 2 2/360/3603.1基本概念基本概念之之机器语言机器语言n机器(机器(CPUCPU)能直接认识的一种二进制代码语言。)能直接认识的一种二进制代码语言。CPUCPU能认识的一组二进制代码就是一条指令。能认识的一组二进制代码就是一条指令。n如:如:B0H 12H 05H 02H 00H这一组二进制代码,就是告诉这一组二

2、进制代码,就是告诉CPU将将AL 12H。这一组二进制代码,就是告诉这一组二进制代码,就是告诉CPU将将(AL)+2 AX。就是一条指令代码,或者机器语言代码就是一条指令代码,或者机器语言代码3 3/360/360基本概念基本概念之之机器语言程序机器语言程序n采用机器语言编写的程序,即二进制代码程序。采用机器语言编写的程序,即二进制代码程序。n优点优点:程序送入计算机后,:程序送入计算机后,CPU可以直接执行。可以直接执行。n缺点缺点:不易书写,不易检查,编写程序十分困难:不易书写,不易检查,编写程序十分困难4 4/360/360基本概念之基本概念之汇编语言汇编语言n汇编语言汇编语言q 为了克

3、服机器语言不易书写、记忆复杂等缺点,人们采用一为了克服机器语言不易书写、记忆复杂等缺点,人们采用一组字母、数字和符号来代替一条二进制代码指令,这种表示组字母、数字和符号来代替一条二进制代码指令,这种表示指令的符号称为助记符。指令的符号称为助记符。q这种用一组符号来代替一条指令编写程序时采用的语言,称这种用一组符号来代替一条指令编写程序时采用的语言,称为汇编语言。为汇编语言。n汇编语言程序汇编语言程序q用汇编语言编写的程序称为汇编语言程序,或者称为用汇编语言编写的程序称为汇编语言程序,或者称为汇编语汇编语言源程序言源程序。这种编程方法称为汇编语言程序设计。这种编程方法称为汇编语言程序设计。q汇编

4、语言源程序名必须为:汇编语言源程序名必须为:文件名文件名.ASM。5 5/360/360基本概念之基本概念之汇编语言汇编语言n 优点:优点:要比一串二进制代码清晰多了,书写容易,要比一串二进制代码清晰多了,书写容易,记忆也方便。记忆也方便。n 缺点:缺点:CPU不能直接执行。用汇编语言编写的汇不能直接执行。用汇编语言编写的汇编语言源程序必须经过汇编,将其翻译成机器语言格编语言源程序必须经过汇编,将其翻译成机器语言格式,式,CPU才能执行。才能执行。例如:例如:6 6/360/360基本概念之基本概念之汇编汇编n汇编汇编q把汇编语言源程序翻译成机器语言程序的过程称为把汇编语言源程序翻译成机器语言

5、程序的过程称为汇编。汇编。n汇编程序汇编程序q能把汇编语言源程序翻译成机器语言程序的系统程能把汇编语言源程序翻译成机器语言程序的系统程序(语言加工程序)。序(语言加工程序)。q8086宏汇编程序为宏汇编程序为MASM.EXE。7 7/360/360基本概念之基本概念之汇编汇编8 8/360/360从汇编语言源程序到可执行程序所经过从汇编语言源程序到可执行程序所经过的处理过程的处理过程9 9/360/360n汇编语言的语句有两种基本类型:汇编语言的语句有两种基本类型:指令指令和和伪指令伪指令。n指令指令可以通过汇编程序翻译成机器语言指令,它与机可以通过汇编程序翻译成机器语言指令,它与机器语言指令

6、基本上是一一对应的。器语言指令基本上是一一对应的。n伪指令伪指令不汇编成机器语言指令,仅仅在汇编过程中帮不汇编成机器语言指令,仅仅在汇编过程中帮助汇编程序(助汇编程序(MASM.EXE)完成汇编过程。所以,)完成汇编过程。所以,伪指令是在汇编时使用的,在汇编过程完成后,它就伪指令是在汇编时使用的,在汇编过程完成后,它就不在目标程序中了。不在目标程序中了。n指令和伪指令都是汇编语言的指令和伪指令都是汇编语言的基本语句基本语句。n宏指令宏指令,程序员利用基本语句,程序员利用基本语句自己定义的新指令自己定义的新指令,一,一条宏指令可以对应多条基本指令。条宏指令可以对应多条基本指令。汇编语言汇编语言1

7、010/360/3603.1.2 汇编语言中语句的组成汇编语言中语句的组成n汇编语言的源程序是由一条条语句组成的,语句则汇编语言的源程序是由一条条语句组成的,语句则由由标识符标识符、操作助记符操作助记符、操作数操作数、注释注释四部分组成。四部分组成。n其中,操作助记符指出该条语句的基本操作功能,是必其中,操作助记符指出该条语句的基本操作功能,是必须有的部分。而须有的部分。而 项可有可无,视情况而定。项可有可无,视情况而定。n若是指令语句,标识符就是一个标号名,以若是指令语句,标识符就是一个标号名,以冒号结尾;冒号结尾;若是伪指令语句,标识符就是变量名或者段名等,以若是伪指令语句,标识符就是变量

8、名或者段名等,以空空格结尾格结尾。标识符标识符空格空格或或:操作助记符操作助记符空格空格操作数操作数;注释注释1111/360/360 CYCLE:ADD AX,02;(AX)(AX)+2 DATA1 DB 20H,30H,40H,50H标识标识符符操作助记操作助记符符操作数操作数注释注释标识标识符符操作助记操作助记符符操作数操作数汇编语言中语句的组成(汇编语言中语句的组成(2)1212/360/360n标识符标识符p标识符的命名规则:标识符的命名规则:可由大小写英文字母,数字可由大小写英文字母,数字(0、9)以及特殊符号以及特殊符号(?、?、.、-、$)组成。组成。标识符必须由字母打头,若标

9、识符中有圆点符,则圆点符必须标识符必须由字母打头,若标识符中有圆点符,则圆点符必须作为第一个字符,数字不能作第一个字符。作为第一个字符,数字不能作第一个字符。构成名称的字符总数可以多达构成名称的字符总数可以多达31个,超过个,超过31个字符的部分无效。个字符的部分无效。不能使用系统保留字。不能使用系统保留字。n标识符分为标识符分为标号标号和和名称名称两大类。通常把指令前的标识符称为两大类。通常把指令前的标识符称为标号标号,书写时在标号和指令之间加书写时在标号和指令之间加冒号冒号;把定义数据(或变量)的伪指令;把定义数据(或变量)的伪指令和其它伪指令之前的标识符称为和其它伪指令之前的标识符称为名

10、称名称,书写时在名称和伪指令之间,书写时在名称和伪指令之间加加空格空格。汇编语言中语句的组成(汇编语言中语句的组成(3)1313/360/360n若语句带有标识符,通常都表示该标识符后面各项在内若语句带有标识符,通常都表示该标识符后面各项在内存存放的第一个存储单元的地址(包括段地址和段内偏存存放的第一个存储单元的地址(包括段地址和段内偏移地址),也称符号地址。移地址),也称符号地址。n标识符不是所有语句都必须的。标识符不是所有语句都必须的。汇编语言中语句的组成(汇编语言中语句的组成(4)CYCLE:ADD AX,02;DATA1 DB 20H,30H,40H,50H1414/360/360p操

11、作助记符操作助记符 操作助记符是语句的必要部分,每条语句都必须要操作助记符是语句的必要部分,每条语句都必须要有操作助记符。有操作助记符。操作助记符指出该语句的基本操作功能操作助记符指出该语句的基本操作功能 它是汇编语言中规定了明确含义的一组符号,不能它是汇编语言中规定了明确含义的一组符号,不能随意使用。随意使用。例如:例如:ADDAX,5 DB 20H其中其中“ADD”是操作助记符,代表着加法;是操作助记符,代表着加法;“DB”也是操作助记符,表示定义字节变量也是操作助记符,表示定义字节变量汇编语言中语句的组成(汇编语言中语句的组成(5)1515/360/360p操作数操作数 操作数可以是立即

12、数,寄存器,内存地址。操作数可以是立即数,寄存器,内存地址。操作数不是每条语句所必需的。操作数不是每条语句所必需的。例如:例如:LAHF ;(;(AH)()(FLAG低低8位)位)若语句为伪指令,则可以有多个操作数,操作数之若语句为伪指令,则可以有多个操作数,操作数之间应用间应用逗号逗号“,”分隔分隔,而操作数与操作助记符之间,而操作数与操作助记符之间必须以必须以空格分隔空格分隔。例如:例如:DB 20H,30H,40H,50H汇编语言中语句的组成(汇编语言中语句的组成(6)1616/360/360p注释注释 分号及分号以后的内容叫注释。分号及分号以后的内容叫注释。注释仅仅用作语句或程序段的说

13、明,它不是程序可注释仅仅用作语句或程序段的说明,它不是程序可执行的部分,汇编时不会形成机器代码。执行的部分,汇编时不会形成机器代码。汇编语言的注释是汇编语言的注释是单行注释单行注释,如果注释的语句部分,如果注释的语句部分超过一行,另起一行时,超过一行,另起一行时,还要以分号开头还要以分号开头。汇编语言中语句的组成(汇编语言中语句的组成(7)1717/360/3603.1.3 汇编语言的常数和表达式汇编语言的常数和表达式1、常数、常数常数可以分为数值常数和字符串常数两类。常数可以分为数值常数和字符串常数两类。p数值常数数值常数 数值常数按其数制基数的不同,分为二进制、八数值常数按其数制基数的不同

14、,分为二进制、八进制、十进制、十六进制等几种不同的形式,分别用进制、十进制、十六进制等几种不同的形式,分别用不同的后缀来表示:不同的后缀来表示:B:二进制。例如:二进制。例如:10110011BO:八进制。例如:八进制。例如:263OD:十进制。例如:十进制。例如:179D或或179H:十六进制。例如:十六进制。例如:B3H。1818/360/360 当一个数值数据后面没有后缀的时候,将默认为十当一个数值数据后面没有后缀的时候,将默认为十进制。进制。汇编语言中数值常数的第一位必须是数字,否则汇汇编语言中数值常数的第一位必须是数字,否则汇编时将被看成是标识符。编时将被看成是标识符。例如:十六进制

15、例如:十六进制FFH应表示为应表示为0FFH。汇编语言的常数和表达式(汇编语言的常数和表达式(2)1919/360/360p字符串常数字符串常数字符串常数是由字符串常数是由单引号单引号括起来的一串字符。例如:括起来的一串字符。例如:THIS IS A SUBROUTINE 179注意:注意:此处的此处的179并不代表十进制数并不代表十进制数179,而是字符,而是字符1、7、9的的ASCII码,即码,即31H,37H和和39H。汇编语言的常数和表达式(汇编语言的常数和表达式(3)2020/360/3602、表达式、表达式表达式是由操作数和操作符组成的,表达式是由操作数和操作符组成的,p操作数可以

16、是常数或标识符或表达式。操作数可以是常数或标识符或表达式。p算术操作符:、算术操作符:、MOD。算术运算都是双操作数,操作数必须为数字,例如:算术运算都是双操作数,操作数必须为数字,例如:59 MOD运算的两个操作数必须都为运算的两个操作数必须都为正整数正整数,该运算,该运算是取是取两数相除的余数两数相除的余数,例如:,例如:79 MOD 16150B5H MOD 10H05H汇编语言的常数和表达式(汇编语言的常数和表达式(4)2121/360/360p逻辑操作符:逻辑操作符:AND(逻辑与逻辑与)、OR(逻辑或逻辑或)、NOT(逻逻辑非辑非)、XOR(逻辑异或逻辑异或)。逻辑运算的两个操作数

17、的值也应为数字,逻辑运算的两个操作数的值也应为数字,两数进行逻辑运算的时候按位进行。两数进行逻辑运算的时候按位进行。p关系操作符关系操作符 主要有:主要有:EQ(相等相等)、NE(不等不等)、LT(小于小于)、GT(大大于于)、LE(小于或等于小于或等于)、GE(大于或等于大于或等于)关系运算的操作数也必须是数字。当关系成立时,关系运算的操作数也必须是数字。当关系成立时,其结果为全其结果为全1;否则,其结果为全;否则,其结果为全0。汇编语言的常数和表达式(汇编语言的常数和表达式(5)2222/360/360说明:说明:q汇编语言中的表达式不能单独构成语句,只能是语句的汇编语言中的表达式不能单独

18、构成语句,只能是语句的一部分,例如:一部分,例如:MOV AX,BUF+2 ADD AL,VAL AND 0FH JMP AGAIN+3 MOV BL,VB LE VAq语句中表达式的求值不是在执行指令时完成的,而是在语句中表达式的求值不是在执行指令时完成的,而是在对源程序进行汇编时完成的。即语句中各表达式的值在对源程序进行汇编时完成的。即语句中各表达式的值在汇编时必须是确定的。汇编时必须是确定的。汇编语言的常数和表达式(汇编语言的常数和表达式(6)2323/360/3603.1.4 标号、变量及伪指令标号、变量及伪指令1、标号、标号n标号是写在指令前的标识符,用以指示对应指令在标号是写在指令

19、前的标识符,用以指示对应指令在内存中的存储地址,也称符号地址。内存中的存储地址,也称符号地址。n标号有三个属性:标号有三个属性:段地址段地址、偏移地址偏移地址和和类型类型。n段地址和偏移地址指标号所对应的指令的段地址和段地址和偏移地址指标号所对应的指令的段地址和偏移地址偏移地址n类型属性有两种,即类型属性有两种,即NEAR和和FAR。pNEAR类型表示该标号在段内使用类型表示该标号在段内使用(指针长度为指针长度为2个字个字节节),是默认类型;,是默认类型;pFAR类型表示该标号可以在段间使用类型表示该标号可以在段间使用(指针长度为指针长度为4个个字节字节)。2424/360/360p标号的基本

20、定义方法是在指令的操作助记符前加上标号的基本定义方法是在指令的操作助记符前加上标标识符和冒号识符和冒号,例如:,例如:START:PUSH DS START就为一个标号,它代表了指令就为一个标号,它代表了指令PUSH的地址,的地址,从而标号可以从而标号可以作为程序转移指令的操作数作为程序转移指令的操作数,即要,即要转向转向的地址的地址。例如:。例如:JZ START标号、变量及伪指令(标号、变量及伪指令(2)2525/360/3602、变量、变量变量的值在程序运行时是可以改变的。变量的值在程序运行时是可以改变的。p变量定义变量定义汇编语言中的变量是通过伪指令定义的,其格式如下:汇编语言中的变量

21、是通过伪指令定义的,其格式如下:变量名变量名DB 表达式;定义字节变量表达式;定义字节变量 变量名变量名DW表达式;定义字变量表达式;定义字变量 变量名变量名DD表达式;表达式;定义双字变量定义双字变量 变量名变量名DQ表达式;表达式;定义四字变量定义四字变量 变量名变量名DT表达式;表达式;定义十字节变量定义十字节变量标号、变量及伪指令(标号、变量及伪指令(3)2626/360/360说明:说明:u变量名是一个标识符,变量名是一个标识符,变量名后面只能用空格变量名后面只能用空格。u变量的类型由变量名后面的关键字变量的类型由变量名后面的关键字DB、DW、DD、DQ、DT确定。确定。u格式中的表

22、达式可以有如下几种情况:格式中的表达式可以有如下几种情况:一个或多个常数或表达式。如为多个的时候,中间一个或多个常数或表达式。如为多个的时候,中间用逗号隔开。用逗号隔开。带引号的字符串。带引号的字符串。一个问号?一个问号?,表示任意值表示任意值。重复方式。此时表达式的格式为:重复方式。此时表达式的格式为:重复次数重复次数DUP(表达式表达式)标号、变量及伪指令(标号、变量及伪指令(4)2727/360/360DATA1 DB 20HDATA1 DB 20HDATA2 DW 0204H,1000HDATA2 DW 0204H,1000HDATA3 DB (-1DATA3 DB (-1*3),(1

23、5/3)3),(15/3)DATA4 DD 12345HDATA4 DD 12345HDATA5 DB 0123DATA5 DB 0123DATA6 DW AB,C,DATA6 DW AB,C,DDDATA7 DB?DATA7 DB?DATA8 DD?DATA8 DD?DATA9 DB 5 DUP(00)DATA9 DB 5 DUP(00)DATA10 DW 3 DUP(?)DATA10 DW 3 DUP(?)例例1:变量的定义:变量的定义0100:0000H0100:0000H2828/360/360DATA1 DB 20HDATA1 DB 20HDATA2 DW 0204H,1000HDA

24、TA2 DW 0204H,1000HDATA3 DB (-1DATA3 DB (-1*3),(15/3)3),(15/3)DATA4 DD 12345HDATA4 DD 12345HDATA5 DB 0123DATA5 DB 0123DATA6 DW AB,C,DATA6 DW AB,C,DDDATA7 DB?DATA7 DB?DATA8 DD?DATA8 DD?DATA9 DB 5 DUP(00)DATA9 DB 5 DUP(00)DATA10 DW 3 DUP(?)DATA10 DW 3 DUP(?)0100:0000H0100:0000HDATA1DATA120H20H例例1:变量的定义

25、:变量的定义2929/360/360DATA1 DB 20HDATA1 DB 20HDATA2 DW 0204H,1000HDATA2 DW 0204H,1000HDATA3 DB (-1DATA3 DB (-1*3),(15/3)3),(15/3)DATA4 DD 12345HDATA4 DD 12345HDATA5 DB 0123DATA5 DB 0123DATA6 DW AB,C,DATA6 DW AB,C,DDDATA7 DB?DATA7 DB?DATA8 DD?DATA8 DD?DATA9 DB 5 DUP(00)DATA9 DB 5 DUP(00)DATA10 DW 3 DUP(?

26、)DATA10 DW 3 DUP(?)0100:0000H0100:0000HDATA1DATA120H20H0001H0001H04H04H02H02H00H00H10H10HDATA2DATA20002H0002H0003H0003H0004H0004H例例1:变量的定义:变量的定义3030/360/360DATA1 DB 20HDATA1 DB 20HDATA2 DW 0204H,1000HDATA2 DW 0204H,1000HDATA3 DB (-1DATA3 DB (-1*3),(15/3)3),(15/3)DATA4 DD 12345HDATA4 DD 12345HDATA5 D

27、B 0123DATA5 DB 0123DATA6 DW AB,C,DATA6 DW AB,C,DDDATA7 DB?DATA7 DB?DATA8 DD?DATA8 DD?DATA9 DB 5 DUP(00)DATA9 DB 5 DUP(00)DATA10 DW 3 DUP(?)DATA10 DW 3 DUP(?)0100:0000H0100:0000HDATA1DATA120H20H0001H0001H04H04H02H02H00H00H10H10HDATA2DATA20002H0002H0003H0003H0004H0004HFDHFDH05H05HDATA3DATA30005H0005H0

28、006H0006H例例1:变量的定义:变量的定义3131/360/360DATA1 DB 20HDATA1 DB 20HDATA2 DW 0204H,1000HDATA2 DW 0204H,1000HDATA3 DB (-1DATA3 DB (-1*3),(15/3)3),(15/3)DATA4 DD 12345HDATA4 DD 12345HDATA5 DB 0123DATA5 DB 0123DATA6 DW AB,C,DATA6 DW AB,C,DDDATA7 DB?DATA7 DB?DATA8 DD?DATA8 DD?DATA9 DB 5 DUP(00)DATA9 DB 5 DUP(00

29、)DATA10 DW 3 DUP(?)DATA10 DW 3 DUP(?)0100:0000H0100:0000HDATA1DATA120H20H0001H0001H04H04H02H02H00H00H10H10HDATA2DATA20002H0002H0003H0003H0004H0004HFDHFDH05H05HDATA3DATA30005H0005H0006H0006H45H45H23H23H01H01H00H00HDATA4DATA40007H0007H0008H0008H0009H0009H000AH000AH例例1:变量的定义:变量的定义3232/360/360DATA1 DB 2

30、0HDATA1 DB 20HDATA2 DW 0204H,1000HDATA2 DW 0204H,1000HDATA3 DB (-1DATA3 DB (-1*3),(15/3)3),(15/3)DATA4 DD 12345HDATA4 DD 12345HDATA5 DB 0123DATA5 DB 0123DATA6 DW AB,C,DATA6 DW AB,C,DDDATA7 DB?DATA7 DB?DATA8 DD?DATA8 DD?DATA9 DB 5 DUP(00)DATA9 DB 5 DUP(00)DATA10 DW 3 DUP(?)DATA10 DW 3 DUP(?)0100:0000

31、H0100:0000HDATA1DATA120H20H0001H0001H04H04H02H02H00H00H10H10HDATA2DATA20002H0002H0003H0003H0004H0004HFDHFDH05H05HDATA3DATA30005H0005H0006H0006H45H45H23H23H01H01H00H00HDATA4DATA40007H0007H0008H0008H0009H0009H000AH000AH30H30H31H31H32H32H33H33HDATA5DATA5000BH000BH000CH000CH000DH000DH000EH000EH例例1:变量的定义

32、:变量的定义3333/360/360DATA1 DB 20HDATA1 DB 20HDATA2 DW 0204H,1000HDATA2 DW 0204H,1000HDATA3 DB (-1DATA3 DB (-1*3),(15/3)3),(15/3)DATA4 DD 12345HDATA4 DD 12345HDATA5 DB 0123DATA5 DB 0123DATA6 DW AB,C,DATA6 DW AB,C,DDDATA7 DB?DATA7 DB?DATA8 DD?DATA8 DD?DATA9 DB 5 DUP(00)DATA9 DB 5 DUP(00)DATA10 DW 3 DUP(?

33、)DATA10 DW 3 DUP(?)0100:0000H0100:0000HDATA1DATA133H33H42H42H41H41H000EH000EH000FH000FH0010H0010H43H43H00H00H0011H0011H0012H0012H44H44H00H00H0013H0013H0014H0014HDATA6DATA6例例1:变量的定义:变量的定义3434/360/360DATA1 DB 20HDATA1 DB 20HDATA2 DW 0204H,1000HDATA2 DW 0204H,1000HDATA3 DB (-1DATA3 DB (-1*3),(15/3)3),(

34、15/3)DATA4 DD 12345HDATA4 DD 12345HDATA5 DB 0123DATA5 DB 0123DATA6 DW AB,C,DATA6 DW AB,C,DDDATA7 DB?DATA7 DB?DATA8 DD?DATA8 DD?DATA9 DB 5 DUP(00)DATA9 DB 5 DUP(00)DATA10 DW 3 DUP(?)DATA10 DW 3 DUP(?)0100:0000H0100:0000HDATA1DATA133H33H42H42H41H41H000EH000EH000FH000FH0010H0010H43H43H00H00H0011H0011H0

35、012H0012H44H44H00H00H?0013H0013H0014H0014H0015H0015HDATA6DATA6DATA7DATA7例例1:变量的定义:变量的定义3535/360/360DATA1 DB 20HDATA1 DB 20HDATA2 DW 0204H,1000HDATA2 DW 0204H,1000HDATA3 DB (-1DATA3 DB (-1*3),(15/3)3),(15/3)DATA4 DD 12345HDATA4 DD 12345HDATA5 DB 0123DATA5 DB 0123DATA6 DW AB,C,DATA6 DW AB,C,DDDATA7 DB

36、?DATA7 DB?DATA8 DD?DATA8 DD?DATA9 DB 5 DUP(00)DATA9 DB 5 DUP(00)DATA10 DW 3 DUP(?)DATA10 DW 3 DUP(?)0100:0000H0100:0000HDATA1DATA133H33H42H42H41H41H000EH000EH000FH000FH0010H0010H43H43H00H00H0011H0011H0012H0012H44H44H00H00H?0013H0013H0014H0014H0015H0015H0016H0016H?0017H0017H0018H0018H0019H0019HDATA6D

37、ATA6DATA7DATA7DATA8DATA8例例1:变量的定义:变量的定义3636/360/360DATA1 DB 20HDATA1 DB 20HDATA2 DW 0204H,1000HDATA2 DW 0204H,1000HDATA3 DB (-1DATA3 DB (-1*3),(15/3)3),(15/3)DATA4 DD 12345HDATA4 DD 12345HDATA5 DB 0123DATA5 DB 0123DATA6 DW AB,C,DATA6 DW AB,C,DDDATA7 DB?DATA7 DB?DATA8 DD?DATA8 DD?DATA9 DB 5 DUP(00)DA

38、TA9 DB 5 DUP(00)DATA10 DW 3 DUP(?)DATA10 DW 3 DUP(?)0100:0000H0100:0000HDATA1DATA1?00H00H00H00H0019H0019H001AH001AH001BH001BH00H00H00H00H001CH001CH001DH001DH00H00H001EH001EHDATA9DATA9例例1:变量的定义:变量的定义3737/360/360DATA1 DB 20HDATA1 DB 20HDATA2 DW 0204H,1000HDATA2 DW 0204H,1000HDATA3 DB (-1DATA3 DB (-1*3

39、),(15/3)3),(15/3)DATA4 DD 12345HDATA4 DD 12345HDATA5 DB 0123DATA5 DB 0123DATA6 DW AB,C,DATA6 DW AB,C,DDDATA7 DB?DATA7 DB?DATA8 DD?DATA8 DD?DATA9 DB 5 DUP(00)DATA9 DB 5 DUP(00)DATA10 DW 3 DUP(?)DATA10 DW 3 DUP(?)0100:0000H0100:0000HDATA1DATA1?00H00H00H00H0019H0019H001AH001AH001BH001BH00H00H00H00H001C

40、H001CH001DH001DH00H00H001EH001EHDATA9DATA9001FH001FH0020H0020H0021H0021H0022H0022H0023H0023H0024H0024H?DATA10DATA10例例1:变量的定义:变量的定义3838/360/360p变量的属性变量的属性段地址段地址(SEG):变量所在段的首地址。:变量所在段的首地址。偏移地址偏移地址(OFFSET):变量所在段的偏移地址。:变量所在段的偏移地址。类型类型(TYPE):变量的类型是变量所占据的字节数,对于:变量的类型是变量所占据的字节数,对于DB、DW、DD、DQ、DT定义的变量类型分别为定义

41、的变量类型分别为1、2、4、8、10。长度长度(LENGTH):变量个数。在含有:变量个数。在含有DUP操作符的变量定操作符的变量定义中,变量个数为定义格式中的重复次数。在其他定义中,义中,变量个数为定义格式中的重复次数。在其他定义中,变量个数均为变量个数均为1。大小大小(SIZE):变量所占的总的字节数,其值为该变量的:变量所占的总的字节数,其值为该变量的类型与长度的乘积。类型与长度的乘积。标号、变量及伪指令(标号、变量及伪指令(7)3939/360/360n变量的部分属性变量的部分属性DATA101000000111DATA201000001212DATA301000005111DATA4

42、01000007414DATA50100000B111DATA60100000F212DATA100100001F236变量名变量名段地址段地址偏移地址偏移地址类型类型长度长度大小大小标号、变量及伪指令(标号、变量及伪指令(8)4040/360/3603.1.5 属性操作符及表达式属性操作符及表达式p属性操作符:用来获取变量或标号的属性或重新定义其属属性操作符:用来获取变量或标号的属性或重新定义其属性的操作符,它的操作对象一般为变量名或者标号。性的操作符,它的操作对象一般为变量名或者标号。p对于属性操作符,也有相应的属性表达式。对于属性操作符,也有相应的属性表达式。操作符操作符表达式表达式表达

43、式的意义表达式的意义SEGSEG 变量名或标号变量名或标号取出变量名或标号所在取出变量名或标号所在段的段地址段的段地址OFFSETOFFSET 变量名或标号变量名或标号取出变量名或标号所在取出变量名或标号所在段的偏移地址段的偏移地址TYPETYPE 变量名或标号变量名或标号变量名或标号的类型变量名或标号的类型LENGTHLENGTH 变量名变量名取出变量的长度取出变量的长度SIZESIZE 变量名变量名取出变量的大小取出变量的大小4141/360/360例如:例如:SEG DATA1 结果为结果为0100HOFFSET DATA1 结果为结果为0000HLENGTH DATA6 结果为结果为1

44、TYPE DATA6 结果为结果为2SIZE DATA9 结果为结果为5p这些属性表达式只能是语句的一部分,而不能单独构成语这些属性表达式只能是语句的一部分,而不能单独构成语句,并且表达式的求值也是在汇编的过程中完成。例如:句,并且表达式的求值也是在汇编的过程中完成。例如:MOV AX,SIZE DATA9 MOV BL,TYPE DATA6属性操作符及表达式(属性操作符及表达式(2)4242/360/360pPTR操作符操作符PTR操作符的功能是用来重新定义已定义的变量或标号操作符的功能是用来重新定义已定义的变量或标号的类型。格式为:的类型。格式为:类型类型PTR表达式表达式格式中的类型可以

45、是:格式中的类型可以是:BYTE、WORD、DWORD、NEAR和和FAR。前三个类型为变量类型,后两个为标号。前三个类型为变量类型,后两个为标号类型。例如:类型。例如:MOV BYTE PTR DATE2,AL注意:注意:该语句的功能是将该语句的功能是将AL的值传送到的值传送到DATA2对应的一个字对应的一个字节中。节中。DATA2只是在该语句中作为字节变量使用,只是在该语句中作为字节变量使用,DATA2原来定义的字变量类型没有修改。原来定义的字变量类型没有修改。属性操作符及表达式(属性操作符及表达式(3)4343/360/3603.2 Intel 80X86系列系列CPU指令系统指令系统I

46、ntel 80X86CPU指令系统的指令可以分为以下几类:指令系统的指令可以分为以下几类:u数据传送类指令;数据传送类指令;u算术运算类指令;算术运算类指令;u逻辑运算类指令;逻辑运算类指令;u移位指令;移位指令;u标志处理指令和标志处理指令和CPU控制指令;控制指令;u转移和循环控制指令;转移和循环控制指令;u调用和返回指令;调用和返回指令;u字符串操作指令;字符串操作指令;u输入、输出指令。输入、输出指令。4444/360/3608086/8088指令系统指令系统 缩写与符号缩写与符号缩写与符号缩写与符号意意义义OPR操作数操作数SRC源操作数源操作数DST目的操作数目的操作数REG寄存器

47、寄存器RSRC源寄存器源寄存器RDST目的寄存器目的寄存器CNT计数计数DISP位移量位移量D88位位移量位位移量D1616位位移量位位移量ADDR地址地址缩写与符号缩写与符号意义意义EA有效地址有效地址SEG段段DATA立即数立即数互相交换互相交换替代替代(X)X的内容的内容逻辑与逻辑与逻辑或逻辑或异或异或XX的反码的反码4545/360/3603.2.1 数据传送类指令数据传送类指令u数据传送是计算机中最基本、最重要的一种操数据传送是计算机中最基本、最重要的一种操作,传送指令也是最常使用的一类指令作,传送指令也是最常使用的一类指令u主要功能主要功能 在在CPU中的寄存器之间,或者寄存器与存

48、中的寄存器之间,或者寄存器与存储单元之间传送数据储单元之间传送数据u除标志寄存器传送指令外,均不影响标志位除标志寄存器传送指令外,均不影响标志位4646/360/360数据传送类指令数据传送类指令u主要包括的指令:主要包括的指令:通用传送指令通用传送指令 MOV 取有效地址指令取有效地址指令 LEA 取地址指针指令取地址指针指令 LDS,LES 标志传送指令标志传送指令 LAHF,SAHF 数据交换指令数据交换指令 XCHG 字节转换指令字节转换指令 XLAT 堆栈操作指令堆栈操作指令 PUSH,PUSHF,POP,POPFu重点掌握重点掌握 MOV XCHG PUSH POP LEA4747

49、/360/3601.通用传送指令通用传送指令MOV(MOVE)格式:格式:MOV DST,SRCMOV DST,SRC功能:功能:(DST)(SRC)(DST)(SRC)例如:例如:MOV AX,2MOV AX,2说明:说明:nSRC可以是通用寄存器、段寄存器、立即数和内存单元可以是通用寄存器、段寄存器、立即数和内存单元nDST可以是通用寄存器、段寄存器和内存单元,但不能是可以是通用寄存器、段寄存器和内存单元,但不能是立即数和立即数和CS;n当目的操作数为段寄存器时,原操作数不能是立即数;当目的操作数为段寄存器时,原操作数不能是立即数;n8086的存储器结构不能直接在两个存储单元间传送数据;的

50、存储器结构不能直接在两个存储单元间传送数据;AXAX2 24848/360/360MOV指令数据传送方向指令数据传送方向立立即即数数存存储储器器寄存器寄存器AXBXCXDXSIDISPBPAXBXCXDXSIDISPBP段寄存器段寄存器DSESSSCS4949/360/360立即数传送到通用寄存器或存储单元立即数传送到通用寄存器或存储单元注意:注意:u以字母开头的常数要有前导以字母开头的常数要有前导u立即数只能出现在源操作数位置,不能作为目的操作数立即数只能出现在源操作数位置,不能作为目的操作数MOV CL,4 ;CL4,字节传送,字节传送MOV DX,OFFH ;DX00ffh,字传送,字传

51、送MOV SI,200H ;SI0200h,字传送,字传送MOV DA_BYTE,12H ;字节传送字节传送;假设;假设DA_BYTE是一个字节变量,定义如下:是一个字节变量,定义如下:DA_BYTE DB 0MOV DA_WORD,1234H;字传送字传送;假设;假设DA_WORD是一个字变量,定义如下:是一个字变量,定义如下:DA_WORD DW 05050/360/360寄存器之间的传送寄存器之间的传送注意:注意:u寄存器具有明确的字节类型和字类型寄存器具有明确的字节类型和字类型u段寄存器段寄存器CS仅能作源操作数,不能作目的操作数仅能作源操作数,不能作目的操作数MOV AH,AL ;A

52、HAL,字节传送,字节传送MOV AX,BX ;AXBX,字传送,字传送MOV DS,AX ;DSAX,字传送,字传送,通用寄存器和段寄存器之间通用寄存器和段寄存器之间 传送传送5151/360/360寄存器和存储单元之间的传送寄存器和存储单元之间的传送注意:注意:u不存在存储器向存储器的传送指令不存在存储器向存储器的传送指令MOV DL,DA_BYTE ;DLDA_BYTE,字节传送,字节传送MOV AX,DA_WORD ;AXDA_WORD,字传送,字传送MOV DA_BYTE,CL ;DA_BYTECL,字节传送,字节传送MOV DA_WORD,BX ;DA_WORDBX,字传送,字传送

53、5252/360/360段寄存器传送段寄存器传送注意:注意:u立即数不能直接传送给段寄存器立即数不能直接传送给段寄存器u段寄存器之间不能进行直接传送段寄存器之间不能进行直接传送MOV AX,SEG DATA ;设;设DATA为某数据段段名为某数据段段名MOV DS,AX ;把数据段的段基址送;把数据段的段基址送DSMOV ES,AX ;把数据段的段基址送;把数据段的段基址送ES5353/360/360非法的数据传送指令两个操作数类非法的数据传送指令两个操作数类型不一致型不一致n在绝大多数双操作数指令中,目的操作数和源操作数必须在绝大多数双操作数指令中,目的操作数和源操作数必须具有一致的数据类型

54、,或者同为字量,或者同为字节量,具有一致的数据类型,或者同为字量,或者同为字节量,否则为非法指令否则为非法指令MOV AL,050AH ;非法指令,;非法指令,修正:修正:;MOV AX,050AhMOV SI,DL ;非法指令,;非法指令,修正:修正:;MOV DH,0 ;MOV SI,DX5454/360/360非法的数据传送指令无法确定是字非法的数据传送指令无法确定是字节量还是字量操作节量还是字量操作n当无法通过任一个操作数确定操作类型时,需要利用汇编当无法通过任一个操作数确定操作类型时,需要利用汇编语言的操作符显式指明语言的操作符显式指明MOV BX+SI,255 ;非法指令,;非法指

55、令,修正:修正:;MOV BYTE PTR BX+SI,255 ;BYTE PTR 说明是字节操作说明是字节操作 ;MOV WORD PTR BX+SI,255 ;WORD PTR 说明是字操作说明是字操作5555/360/360非法的数据传送指令两个操作数都非法的数据传送指令两个操作数都是存储器是存储器n8086指令系统除串操作指令外,不允许两个操作数都是指令系统除串操作指令外,不允许两个操作数都是存储单元(存储器操作数)存储单元(存储器操作数)MOV BUF2,BUF1;非法指令,;非法指令,修正:修正:;假设;假设BUF2和和BUF1是两个字变量是两个字变量 ;MOV AX,BUF1 ;

56、MOV BUF2,AX ;假设;假设BUF2和和BUF1是两个字节变量是两个字节变量 ;MOV AL,BUF1 ;MOV BUF2,AL5656/360/360非法的数据传送指令段寄存器的操非法的数据传送指令段寄存器的操作有一些限制作有一些限制n8086指令系统中,能直接对段寄存器操作的指令只有指令系统中,能直接对段寄存器操作的指令只有MOV等个别传送指令,并且不灵活等个别传送指令,并且不灵活MOV DS,ES ;非法指令,;非法指令,修正:修正:;MOV AX,ES ;MOV DS,AXMOV DS,100H ;非法指令,;非法指令,修正:修正:;MOV AX,100H ;MOV DS,AX

57、MOV CS,SI ;非法指令;非法指令5757/360/360合法的指令合法的指令 MOV AX,12H ;相当于相当于0012H送送AX,立即寻址,立即寻址 MOV AH,12H ;相当于相当于12H送送AH,立即寻址,立即寻址 MOV AX,2000H ;存储器直接寻址存储器直接寻址 MOV DI,ES:3SI ;源操作数为寄存器相对寻址,使用跨段前缀源操作数为寄存器相对寻址,使用跨段前缀 MOV BP,3BX+SI ;源操作数为基址加变址且相对寻址源操作数为基址加变址且相对寻址 MOV BUFA,DL ;BUFA是一字节变量是一字节变量 MOV BP,AX ;使用使用SS段寄存器段寄存

58、器 MOV DS:BP,DL ;使用跨段前缀使用跨段前缀 MOV BUF,DS ;BUF是个字变量是个字变量 MOV AX,BX ;相当相当DS:BX指向单元,寄存器间接寻址指向单元,寄存器间接寻址 MOV AX,ES:BX ;相当相当ES:BX指向单元,寄存器间接寻址指向单元,寄存器间接寻址 MOV AX,BP ;相当相当SS:BP指向单元,寄存器间接寻址指向单元,寄存器间接寻址5858/360/360合法的指令合法的指令 MOV DL,BX ;BX指示一个字节单元,寄存器间接寻址指示一个字节单元,寄存器间接寻址 MOV DX,BX ;BX指示一个字单元,寄存器间接寻址指示一个字单元,寄存器

59、间接寻址 MOV 2000H,BL ;存储器直接寻址;存储器直接寻址 MOV DATA1,BL ;DATA1为字节变量;存储器直接寻址为字节变量;存储器直接寻址 MOV DATA2,BX ;DATA2为字变量;存储器直接寻址为字变量;存储器直接寻址 MOV AX,WORD PTR VALUE ;VALUE为字节变量;存储器直接寻址为字节变量;存储器直接寻址 MOV BX,DX ;寄存器寻址;寄存器寻址 MOV DS,AX ;寄存器寻址;寄存器寻址 MOV SI,BX ;寄存器间接寻址;寄存器间接寻址 MOV BXDI,DX ;BXDI对应连续的两个单元对应连续的两个单元 MOV BX+DI,A

60、L ;BXDI对应一个单元;基址变址寻址对应一个单元;基址变址寻址 MOV BX+5,AX ;相对寻址;相对寻址 MOV 5DI,AX ;相对寻址;相对寻址5959/360/360非法的指令非法的指令 MOV BX,SI ;存储器到存储器;存储器到存储器 MOV 3000H,2000H ;存储器到存储器;存储器到存储器 MOV 34H,AL ;立即寻址错误;立即寻址错误 MOV CS,AX ;CS不能改不能改 MOV AL,2000H ;立即寻址错误;立即寻址错误 MOV DS,1234H ;不能送立即数;不能送立即数 MOV BX,2000H ;存储器到存储器;存储器到存储器 MOV BXS

61、I,23H ;源和目的长度不一致;源和目的长度不一致 MOV AH,3064H ;源和目的长度不一致;源和目的长度不一致 MOV BX,AH ;源和目的长度不一致;源和目的长度不一致 MOV AX,DATA1 ;DATA1为字节变量为字节变量 MOV AX,CX ;只有;只有BX,SI、DI可以作为地址寄存器可以作为地址寄存器 MOV AX,BXBP ;要一基址;要一基址R和一变址和一变址R MOV AX,SI+DI ;要一基址;要一基址R和一变址和一变址R MOV DS,ES ;不能同时为段寄存器;不能同时为段寄存器 6060/360/3602.数据交换指令数据交换指令XCHG(Exchan

62、ge)指令格式:指令格式:XCHG OPR1,OPR2指令功能:指令功能:(OPR1)(OPR2)(OPR1)(OPR2)完成寄存器与寄存器或寄存器与存储单元之间的内容交换。完成寄存器与寄存器或寄存器与存储单元之间的内容交换。注意:注意:n两个操作数之一必须是寄存器,两个操作数之一必须是寄存器,n允许两个操作数都是寄存器,但不允许是段寄存器。允许两个操作数都是寄存器,但不允许是段寄存器。例如:例如:XCHG AX,BXAXAXBXBX00H00H0FFH0FFH可用三条可用三条MOVMOV指令代替:指令代替:MOV DX,AXMOV DX,AXMOV AX,BXMOV AX,BXMOV BX,

63、DXMOV BX,DX6161/360/360XCHG指令的数据交换方向指令的数据交换方向通用寄存器通用寄存器AX BX CX DXBP SP SI DI存储器存储器n 若用若用XCHG指令进行两个存储单元之间的数据交换,可用指令进行两个存储单元之间的数据交换,可用下面下面3条指令来实现条指令来实现MOV AL,DA_BYTE1 ;ALDA_BYTE1XCHG AL,DA_BYTE2 ;AL DA_BYTE2XCHG AL,DA_BYTE1 ;AL DA_BYTE16262/360/3603.标志传送指令标志传送指令(Flags transfer)n取标志寄存器取标志寄存器(Load regi

64、ster AH from Flag)格式:格式:LAHF 功能:功能:(AH)(FLAG)低低8位位n存储标志寄存器存储标志寄存器(Store register AH into Flag)格式:格式:SAHF 功能:功能:(FLAG)低低8位位(AH)注:注:把寄存器把寄存器AH中的第中的第7,6,4,2,0位的内容分别送位的内容分别送入标志寄存器的入标志寄存器的SF,ZF,AF,PF,CF各标志位。标志各标志位。标志寄存器中寄存器中OF,DF,IF和和TF各位均不受影响。各位均不受影响。FLAGFLAG(低低8 8位位)(低低8 8位位)AHAH6363/360/3604.取有效地址指令取有

65、效地址指令(Load Effective Address)指令格式:指令格式:LEAREG,SRC指令功能:将指令功能:将SRC的的EA(偏移地址偏移地址)送入送入REG中。指令对标中。指令对标志寄存器各标志位均无影响。志寄存器各标志位均无影响。注意注意:n本指令中本指令中SRC不允许是立即数和寄存器,必须是一个字节或字的存不允许是立即数和寄存器,必须是一个字节或字的存储器操作数储器操作数n目的操作数不允许是段寄存器,一定是一个目的操作数不允许是段寄存器,一定是一个16位通用寄存器位通用寄存器n例如例如:LEA DX,DAT1LEA DX,DAT1DXDXDAT1DAT10100:0510H0

66、100:0510HFFHFFH00H00H0510H0510H若指令为若指令为MOV DX,DAT1MOV DX,DAT1,则,则DXDX中的内容为中的内容为00FFH00FFH。6464/360/360取有效地址指令取有效地址指令(Load Effective Address)nLEA指令与指令与MOV指令的功能比较:指令的功能比较:0200:0000HFFH00H0200:0510H0200:0511H设设(DI)0500H,(DS)0200H,则如下两条指令执行后:则如下两条指令执行后:MOV AX,10HDILEA AX,10HDI第一条指令执行的结果第一条指令执行的结果AX的内容的内容为为0FFH,第二条指令执行后,第二条指令执行后AX的内容为的内容为0510H。6565/360/3605.取地址指针指令取地址指针指令LDS(Load pointer using DS),LES(Load pointer using ES)指令格式:指令格式:LDSREG,SRCLESREG,SRC指令功能:将指令功能:将SRC有效地址所对应的内存单元中的有效地址所对应的内存单元中的32位数据

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!