第三章 80x86指令系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
立即数 第5字节
立即数 第6字节
图3.1 8086指令字的结构
例.若某机器指令字长度是16位,4个字节。其中基本操作码信 息段4位,3个操作数信息段,每个操作数信息段4位,指令字结 构如图3.2所示。 ①固定长度操作码 4位二进制数可以表示16种编码,则指令系统最多能包含16 条不同指令。 ②可变长度操作码 若所有指令都要求3个操作数,则4位操作码可以表示16条3 操作数指令。
7.指令字格式举例 8086指令字由1~6个字节组成,它包括操作码(第一字 节)、寻址方式(第二字节)和操作数(第三到第六字节)三 部分组成。如图3.3所示。
opcode opcode opcode opcode opcode opcode Mod字节 Mod字节 Mod字节 Mod字节 Mod字节 Mod字节 Mod字节 Mod字节 Mod字节 Mod字节 Data/disp Data/disp(低 Data/disp(高 Data/disp(低) Data/disp(高) disp(低 disp(低) disp(低 disp(低) disp(高 disp(高) disp(高 disp(高) Data Data(低 Data(低) Data(高 Data(高)
定义 伪指令语句,又称命令语句,告诉汇编程序如何对源程序 进行汇编。比如段定义语句,储存单元分配等。伪指令语句是一 些说明性语句,编译器承认,在cpu中没有伪指令语句。 例: MOV AX,4+8 ;中的+ code SEGMENT ;中的SEGMENT MOV BX,OFFSET string ;中的OFFSET 伪指令语句与指令语句区别: 对一个汇编源程序进行汇编、连接操作后得到可执行程序, 该可执行程序装入主存后,在执行程序之前: ◢伪指令语句的功能由汇编程序解释执行,其功能在汇编的时候 已经完成,除了伪指令语句定义的数据产生相应的目标代码外, 则在cpu执行程序时,故又称伪操作。 ◢汇编后所有指令语句都要生成响应目标代码,执行程序,就是 由cpu逐条执行指令语句的目标代码,完成其功能。
15 操作码
12
wk.baidu.com11 操作数1
8
7 操作数2
4
3 操作数3
0
图3.2 指令字的结构
若需要3个操作数的指令只有15条,则在操作码编码中剩余 一种编码,以剩余的编码作为扩展标志,将表示操作码位数扩 展到操作数1,即在指令字中使用第8—15位表示操作码编码, 此种编码用于表示需要两个操作数的操作码。总共可以使用编 码有16种,则可以表示16条2个操作数的指令。依次类推,可以 继续向下扩展。若3操作数指令有15条,两个操作数指令有15条, 1个操作数指令需要15条,0个操作数指令可以有16条,总共61 条指令。
2.符号指令的格式 data segment ;段定义 var db ? data ends code segment assume cs:code,ds:data start:mov ax,data mov ds,ax mov var,cl mov ah,4ch int 21h code ends end start ;结束程序 格式:[名字][: ] 操作码 [操作数,……] [;注释] 说明:中括号[]中部分为可选项;
(3)操作数项 §操作数项给出指令的操作数或保存操作数的存储单元地址。 §操作数多于一个时,用逗号分开,可以没有操作数项。 §操作数可以是常数、寄存器、存储器、标号名、过程名或表 达式等。 操作数为可选项。
(4)注释项 由分号引出,用来说明语句或程序的功能,汇编程序对分 号后的内容不做处理。 作用: ①注释程序,增强程序可读性。 ②可放在语句最前,暂时注释某语句,调试程序用。 例: 、、、 MOV AH,2 ;显示提示信息 MOV DL,’A’ INT 21H 、、、 (5)分隔符 语句的4个组成部分要用分隔符分开。标号后用冒号,注释 前用分号,操作数之间和参数之间使用逗号分隔,其他部分通 常采用空格或制表符。多个空格和制表符的作用与一个相同。 MASM支持续行符 “\”,即若一行写不完可以使用续行符 接着 写到下一行。
一条指令中的信息按其含义不同分成若干个信息段,每一 信息段占指令字中一个字节或多个字节,且按一定的顺序排列。 如8086cpu的指令系统,其指令字使用1~6个指令字节表示操作 码、寻址方式、位移量和立即数的内容,指令字结构如图3.1所 示。
操作码 第1字节
寻址方式与 位移量/ 位移量/ 寄存器号 立即数 立即数 第2字节 第3字节 第4字节
操作码部分 寻址方式部分
操作数部分 图3.3a 8086指令字的格式
位数 内容
7
2
1 d mod
0 w
操作码
7 6 5 4 3 2 1 0 disp/ disp/ data data data data (低) (高) mod reg r/m (低) (高) 存储器地址 有效地址的计算公式 寄存器寻址 W=0 AL CL DL BL AH CH DH BH W=1 AX CX DX BX SP BP SI DI mod=10 BX+SI+disp16 BX+DI+disp16 BP+SI+disp16 BP+DI+disp16 SI+disp16 DI+disp16 BP+disp16 BX+disp16 mod=11
Ⅱ. 地址操作数 这类操作数给出指令要操作对象是一个地址,可用在转移指 令中,操作数指向要转移到的目标指令位置。 地址操作数也可分为立即数操作数、寄存器操作数和存储器 操作数,即要转移到的指令目的地址以立即数形式包含在指令中, 或存放在寄存器中,或存放在存储器单元之中。在指令中可以使 用标号、过程名指定地址操作数。
(1)名字项 名字项用一个符号表示,规定如下: ①由字符A—Z、a—z、0—9及符号@、$、?、下划线 等组成, 最长31个字符,超出部分忽略。 ②不能用数字打头,以免与十六进制数相混。 ③不使用汇编程序中的保留字。 ④对定义的符号不区分大小写。 在指令语句中,名字项一般称为标号,标号的后面应该跟冒号 “:”,作为标号的结束符。标号表示保存冒号后面指令目标代 码的第一个字节储存单元地址,可以用作转移指令的操作数,表 示转移指令的目标地址。 在伪指令语句中,名字项用作常量名、变量名、段名 、过 程名等,表示数值或地址,可以用为指令语句或伪指令语句的操 作数。名字项后跟空格(注意不使用冒号),作为名字项的结束符。 在汇编语言指令中,名字项可选。
4. 操作数 在指令中,可能可以直接或间接指定命令需要的操作数, 操作数可以有0个、1个、2个或多个。
(1).操作数结构 根据指令中涉及到操作数的个数,指令可分为以下几种: Ⅰ. 零个操作数 指令格式中没有操作数或操作数是隐含规定的。 Ⅱ. 1个操作数 指令格式中有一个操作数,或还有一个隐含的操作数(实 际上是双操作数)。 Ⅲ. 2操作数 指令格式中有两个操作数,其中一个为目的操作数,另一 个为源操作数,一般后面一个操作数为源操作数。 定义 源操作数,执行指令时候只能对其进行读取操作的操作数, 执行指令后,源操作不变。 定义 目的操作数,执行指令时候可以对其进行读写操作的操作 数,执行指令后,目标操作数发生改变,保存指令结果。 Ⅳ. 多操作数 指令格式中有多个操作数。
5. 操作码 每一条指令都有一个固定的操作码,不同的指令操作码采 用不同的编码表示。用于对操作码编码的二进制位数决定了指 令系统中可以使用指令的条数。若操作码位数为n位,则指令条 数是2n。操作码的位数越大,能够表示的操作种类就越多。但当 指令的长度一定时,操作码和操作数相互制约。操作码编码的 方式有固定长度操作码和可变长度操作码两种。 (1)固定长度操作码 操作码的长度固定,占用指令字的一个字段,指令字中剩余 部分保存操作数。 (2)可变长度操作码 指令字长度一定,根据操作数的情况,可采用扩展操作码方 法,即操作码长度允许有几种不同的选择方式,根据不同的选 择,操作码可以占用指令字的一个或多个字段,指令字中剩余 部分保存操作数。
3.1.2 80x86指令格式 1.指令的两种书写格式 编写程序的时候,可以采取两种形式书写指令: 机器指令——指令在计算机内部的描述,采用二进制数表示。 计算机硬件只能识别机器指令,用机器指令书写的程序cpu可以 直接运行。保存一条机器指令的储存单元,称为指令字。指令 字中二进制即表示机器指令。 符号指令——用规定的助记符和规定的语法书写的指令,与机 器指令一一对应,需要翻译成机器指令cpu才能运行。符号指令 一般就简称指令。 机器指令:10110000 00000001 符号指令:MOV AL, 1 指令的两种格式是一一对应的,机器指令由0和1组成,书 写记忆不方便,所有采取符号指令编写程序。符号指令编写程 序计算机不能直接执行,需要翻译成2进制表示机器指令,此过 程称为汇编。
3.指令内容 每一条80x86指令中包含下列内容: ①操作码:表示该指令所要完成的操作; ②操作数的地址:给出操作数存放的地址(若需要); ③操作结果的地址:指令的结果的存放位置(若需要); ④下一条指令的地址:给出下条将要执行的指令的位置; 所以指令也可以分为下列两个组成部分: ①操作码:说明指令的性质及功能; ②操作数:给出指令所涉及到数据的存储信息; 则80x86指令也可以表示为:操作码+操作数;指令字长度等于表 示操作码二进制位数加表示操作数的二进制位数。 二者都以二进制的方式保存在计算机内部,占用连续的储 存单元,如何区分表示操作码与操作数的二进制数?
(2)操作码项 操作码可以是硬指令、伪操作中的助记符,操作码项不区 分大小写; 对于指令,操作码也称为指令助记符,表示该指令被执行 的时候,cpu所要完成的功能。汇编程序将其翻译成机器语言指 令。例: MOV AX, 100 → B8 00 01 对于伪操作,表示汇编语言中的各种伪指令,其作用是指 导汇编程序的汇编过程。汇编程序在对源程序汇编的时候将据 其要求对汇编源程序进行汇编,把源程序转换为目标程序。例: data SEGMENT → data与一段值对应 string DB ‘wangxiao’ → string与一主存地址对应 操作码项为必选项。
6. 指令字 定义 指令长度,即指令字长度,是保存机器指令所需要的储存 单元大小,也称为指令字长。 指令的长度主要取决于指令操作码的长度、操作数的长度 以及操作数的个数。通常表示指令字长位数越多,所能表示的 操作信息也就越多,指令功能就越丰富。但若位数多则指令所 占的存储空间就多,读取指令的时间就增加。若指令字长位数 少,可以节省储存空间,读取指令时候可以减少访问储存单元 次数,提高指令执行速度,由于位数少,可以表示的指令总数 有限。 在实际计算机系统中采用多种类型的指令长度指令格式。 为了与储存器的储存单元相对应,指令字长应为字节的整数倍, 可以是一个字节、2个字节、3个字节……。
(2).操作数分类 根据操作数表示内容不同,指令中的操作数可以分为数据操 数据操 作数和地址操作数两种。 作数 地址操作数两种 Ⅰ.数据操作数 这类操作数给出指令要操作的对象是数据。数据操作数又可 分为立即数操作数、寄存器操作数、存储器操作数和I/O操作数。 立即数操作数:指令中要操作的数据在指令中以立即数方式给出, 在主存中保存在指令操作码后面,数据位于代码段中,立即数操 作数只能为源操作数。 寄存器操作数:指令中要操作的数据存放在指令指定的寄存器中, 数据位于cpu内部,寄存器一般是通用寄存器。 存储器操作数:指令中要操作的数据存放在指令指定的存储单元 中,储存单元地址由寻址方式给出,数据一般位于数据段中。 I/O操作数:指令中要操作的数据存放在I/O端口,指令中给出 i/o端口编号。
第三章 80x86cpu 指令系统
3.1 80x86指令概述
定义 指令,或称为语句,是汇编语言中最小的代码单元,汇编 语言源程序就是由一条一条的语句构成。全部指令的集合称为指 令系统,其确定了cpu所能实现全部功能。 3.1.1 指令分类 80x86汇编语言源程序中可以使用的指令语句有硬指令语句 (简称指令)、伪指令语句以及宏指令语句。 定义 硬指令语句,又称可执行语句,每一条指令语句表示cpu具 有的一个基本功能,比如数据传送,数据相加、相减等。对汇编 语言程序进行汇编后,源程序中的每一条指令语句都要生成一个 可供cpu执行的2进制表示指令代码(也称目标代码)。 例: MOV AX, BX