x86/Pentium指令系统 x86寻址方式 1.比例变址寻址方式 (Scaled Indexed Addressing)

Slides:



Advertisements
Similar presentations
高中思想政治课程标准的追求 江苏省教研室 鞠文灿.
Advertisements

高考图表题及常考题型解题策略与复习建议 晋江市季延中学 吴梅德 2016年12月30日.
22.3 实际问题与一元二次方程(1).
第2章 微处理器 2.1 概述 /8086微处理器 微处理器 X86/Pentium微处理器
第三讲 匀变速直线运动 学 科:物 理 主讲人:吴含章. 第三讲 匀变速直线运动 学 科:物 理 主讲人:吴含章.
输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
计算机体系结构 应用程序 软件 操作系统 编译器 固件 指令集 输入输出 CPU 硬件 内存 (I/O) 集成电路 元件,逻辑门.
汇编语言程序设计 吴 向 军 中山大学计算机科学系
微型计算机技术 教 学 指 导(七) 太原广播电视大学 郭建勇.
第10章 DOS功能调用与BIOS中断调用.
第7章 8086/8088汇编语言程序设计 7.1 引言 7.2 顺序程序设计 7.3 分支结构程序设计 7.4 循环结构程序设计
§1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1、操作码字段 操作码字段表明指令执行何种性质的操作。
大连理工大学软件学院 软件工程系 赖晓晨 计算机组成与结构 大连理工大学软件学院 软件工程系 赖晓晨
第5节 关注人类遗传病.
浙江省温州苍南第二高级中学 教师:王志国.
第一章 计算机基础知识 第一节 计算机概述 一、计算机的基本组成和工作原理 二、有关术语 三、计算机发展简史 四、微型计算机概述
本周实验安排 实验内容:(P231)人名排序的例子。
第2章 Intel IA-32/Intel 64处理器 结构与原理
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年10月30日.
第3章 80x86汇编语言程序设计(下).
第3章 80x86汇编语言程序设计(中) 时间不够的情况下只讲16位汇编.
第三章 指令系统及其寻址方式 3.1 寻址方式 3.2 指令格式 3.3 指令系统.
4.1 汇编语言 4.2 顺序结构程序 4.3 分支程序设计 4.4 循环程序设计 4.5 子程序设计
第3章 80x86汇编语言程序设计(上) 16位汇编版本 时间不够的情况下只讲16位汇编.
3.3.5 程序控制指令 控制转移指令分为: 转移指令 循环控制指令 调用和返回指令 中断指令.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月26日.
微机原理与接口技术 第3章 8086/8088指令系统 黄强 深圳大学 信息工程学院.
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
汇编语言程序设计 Assembly Language Programming
第三章 寻址方式与指令系统 3.1 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
微机原理与接口技术 第2章 8086系统结构 朱华贵 2015年09月17日.
第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第四节 Intel 8253在IBM PC机上的应用.
Assembly Language Programming
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月05日.
第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备.
第3章 IA-32指令系统 3.1 基本数据类型 3.2 IA-32的指令格式 3.3 IA-32指令的操作数寻址方式
汇编语言程序设计 吴 向 军 中山大学计算机科学系
第8章 寻址方式与指令系统.
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
微型机系统与接口技术自学部分 只作扩展知识用 本电子课件包含2011版第3, 6, 7, 8章自学部分 东南大学计算机科学与工程学院.
第二章 8086/8088系统结构 主要内容 8086/8088微处理器的内部结构 8086/8088 CPU 的引脚与功能
微型计算机原理及应用.
第3章 微型计算机输入输出接口 3.1 输入/输出接口 3.2 输入输出数据传输的控制方式 3.3 开关量输入输出接口 欢迎辞.
第六章 子程序结构 §6.1 子程序的设计方法 §6.2 嵌套与递归子程序 §6.3 子程序举例 §6.4 DOS系统功能调用.
條件處理.
第九章 高级宏汇编语言 9.1 结构 结构就是将逻辑上有一定关系的一组数据,以某种方式组合在一起所形成的数据形式。
第5章 循环与分支程序设计 学习目标: 了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。
4.1 汇编语言程序格式 4.2 MASM中的表达式 4.3 伪指令语句 4.4 DOS系统功能调用和BIOS中断调用
3.4.5 控制转移指令(Control transfer instructions) (一)、控制转移指令概述
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月19日.
第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程.
第10章 可编程外围接口芯片8255A及其应用 10.1 概述 A的工作原理 A的应用举例.
习题3 1、 分别说明下列指令的原操作数和目的操作数各采用什么寻址方式。 设定如下: ①立即寻址 ② ① ②寄存器寻址
3.4.2 算术运算指令(Arithmetic) 算术运算指令内容: 8086/8088提供加、减、乘、除等六种基本算术操作
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
第2章 80x86计算机组织  计算机系统  存储器  中央处理机  外部设备.
《微型计算机原理与接口技术》 第4版 王良 宁德师范学院 吴宁 乔亚男 编著 清华大学出版社 出版
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
第八章 中断系统.
第5章 循环与分支程序设计 5.1 循环程序设计 5.2 分支程序设计
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
台東縣筆硯公文製作流程 筆硯版本為 製.
本节内容 内存地址的5种形式 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第3章 80x86的指令系统和寻址方式 § x86的寻址方式 § x86的指令系统
第6章 子程序结构 在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 调用子程序的程序称为主调程序或主程序。 2019/7/20 ch6.
微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰.
大数据搜索挖掘实验室 第五章 子程序设计 张华平 副教授 博士 Website: 大数据搜索挖掘实验室
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
第三章 8086的指令系统 8086指令特点 8086的寻址方式 8086的指令格式及数据类型 8086的指令集.
创新机制 团结协作 稳步推进 病虫害专业化统防统治
Presentation transcript:

4.2 80x86/Pentium指令系统 4.2.1 80x86寻址方式 1.比例变址寻址方式 (Scaled Indexed Addressing) 操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子再加上位移量之和,所以有效地址由三种成分组成。这种寻址方式与相对寄存器寻址相比,增加了比例因子,其优点在于:对于元素大小为2,4,8字节的数组,可以在变址寄存器中给出数组元素下标,而由寻址方式控制直接用比例因子把下标转换为变址值。例如:MOV EAX,COUNT[ESI*4]

图4.28 比例变址寻址方式的指令执行情况

2.基址比例变址寻址方式(Based Scaled Indexed Addressing) 操作数的有效地址是变址寄存器的内容乘以比例因子再加上基址寄存器的内容之和,所以有效地址由三种成分组成。这种寻址方式与基址变址寻址方式相比,增加了比例因子,其优点是很明显的,读者可自行推断。例如: MOV ECX,[EAX][EDX*8]

3.相对基址比例变址寻址方式(Relative Based Scaled Indexed Addressing) 操作数的有效地址是变址寄存器的内容乘以比例因子,加上基址寄存器的内容,再加上位移量之和,所以有效地址由四种成分组成。这种寻址方式比相对基址变址寻址方式增加了比例因子,便于对元素为2,4,8字节的二维数组的处理。例如: MOV EAX,TABLE[EBP][EDI*4]

4.2.2 80286增强与增加的指令 1.堆栈操作指令PUSH/PUSHA/POPA 指令格式: PUSH imm16 PUSHA POPA

表4.8 80286增强与增加的指令

PUSH指令允许将字立即数压入堆栈,如果给出的数不够16位,它会在自动扩展后压入堆栈。 PUSHA,POPA指令将所有通用寄存器的内容压入或弹出堆栈。压入的顺序是:AX,CX,DX,BX,SP,BP,SI,DI(SP是执行该指令之前的值),弹出的顺序与压入的相反。

2.有符号数乘法指令IMUL 在80286中允许该指令有两个或三个操作数。其指令格式有两种。 指令格式一: IMUL OPRD1,OPRD2 reg16,reg16 ;reg16为16位寄存器 reg16,mem16 ;mem16为16位存储器 reg16,imm ;imm为8位或16位立即数 功能:用OPRD1乘以OPRD2,返回的积存放在OPRD1指定的寄存器中。

指令格式二: IMUL OPRD1,OPRD2,OPRD3 reg16,regl6,imm reg16,meml6,imm 功能:用OPRD2乘以OPRD3,返回的积存放在OPRD1指定的寄存器中。

两种形式中,对乘积都限制其长度与OPRD1的要一致(为16位有符号数),如果溢出,则溢出部分丢掉,并置CF=OF=1。例如: IMUL BX,CX ;(BX)←(BX)(CX) IMUL BX,50 ;(BX)←(BX)50 IMUL AX,[BX+DI],0342H ;(AX)←0342H(DS:[BX+DI]) IMUL AX,BX,20 ;(AX)←20(BX)

3. 移位和循环移位指令SHL等 指令格式: SHL/SHR/SAL/SAR/ROL/ROR/RCL/RCR OPRD1,OPRD2 reg,imm8 mem,imm8 在8086/8088中规定所有8条移位和循环移位指令中计数值部分或是常数1或是CL中所规定的次数。80286扩充其功能为计数值可以是范围为1~31的常数。例如: SAR DX,3 ROL BYTE PTR[BX],10

4. 串输入/输出指令INS/OUTS 1) 串输入指令INS 指令格式: [REP] INS [ES:]DI,DX [REP] INSB [REP] INSW

INS指令从DX指出的外设端口输入一个字节或字到由ES:DI指定的存储器中,输入字节或字由ES:DI目的操作数的属性决定,且根据方向标志DF和目的操作数的属性来修改DI的值。若方向标志位DF=0, 则DI加1 (字节操作)或加2 (字操作); 否则DI减1或减2。 INSB,INSW分别从DX指出的端口输入一个字节或一个字到由ES:DI指定的存储单元,且根据方向标志DF和串操作的类型来修改DI的值。 这三种形式的指令都可在其前面加重复前缀REP来连续实现整个串的输入操作,这时CX寄存器中为重复操作的次数。

例4.18 从端口PORT输入100个字节,存放到附加数据段以TABLE为首地址的内存单元中。程序段如下: CLD LEA DI,TABLE MOV CX,100 MOV DX,PORT REP INSB

2) 串输出指令OUTS 指令格式: [REP] OUTS DX,[seg:]SI [REP] OUTSB [REP] OUTSW 串输出指令与串输入指令的操作相反,它将[seg:]SI指定的存储单元中的一个字节或字输出到DX指定的外设端口,且根据方向标志DF和源串的类型自动修改SI的值。在其前面加重复前缀REP可连续实现整个串的输出操作,直至CX寄存器的内容减至零。

5. 高级语言类指令 80286提供了三条类似于高级语言的指令。 1) 数组边界检查指令BOUND 指令格式: BOUND OPRD1,OPRD2 reg16,mem16

BOUND指令用于验证指定寄存器OPRD1中的操作数是否在OPRD2(存储器操作数)所指向的两个界限内。若不在,则产生一个5号中断。指令中假定上、下界值(即数组的起始和结束地址)依次存放在相邻存储单元中。例如: ARRAY DW 0000H,0063H ;定义数组的最小下标0及最大下标99 NUMB DW 0019H MOV BX,NUMB ;BX中为被测下标值25 BOUND BX,ARRAY ;检查被测下标值是否在规定的下标边界范围之内

2) 进入和退出过程指令ENTER/LEAVE 指令格式: ENTER OPRD1,OPRD2 imm16,imm8 LEAVE

ENTER指令为局部变量建立一个堆栈区,指令的OPPD1指出程序所要使用的堆栈字节数,OPRD2指出子程序的嵌套层数:0~31。 LEAVE指令用于撤消前面ENTER指令的动作,该指令无操作数。 上面两条指令使用如下: TASK PROC NEAR ENTER 6,0 ;建立堆栈区并保存6个字节长的局部变量 LEAVE ;撤消建立的栈空间 RET TASK ENDP …

4.2.3 80386/80486增强与增加的指令 80386对8086/8088和80286指令系统进行了扩充。这种扩充不仅体现在增加了指令的种类、增强了一些指令的功能,也体现在提供了32位寻址方式和对32位数据的直接操作方式。80486是在80386体系结构的基础上进行了一些扩展,增加了一些相应的指令。因此,所有从8086/8088和80286延伸而来的指令均适用于80386/80486的32位寻址方式和32位操作方式,即所有16位指令都可以扩展为32位的指令。表4.9列出了80386/80486增强与增加的指令。

表4.9 80386/80486增强与增加的指令

1.数据传送类 1) 扩展传送指令MOVSX/MOVZX 指令格式: MOVSX/MOVZX OPRD1,OPRD2 reg16,reg8 reg16,mem8 reg32,reg8 reg32,mem8 reg32,reg16 reg32,mem16

指令的目的操作数必须是16位或32位的通用寄存器,源操作数可以是8位或16位的寄存器或存储器操作数,且要求源操作数的长度小于目的操作数的长度。 MOVSX用于传送有符号数,它将源操作数的符号位扩展后传送到目的操作数。MOVZX用于传送无符号数,它将高位扩展相应位的0后传送到目的操作数。例如: MOVSX ECX,AL ;将AL内容带符号扩展为32位送入ECX MOVZX EAX,CL ;将CL中8位数加0扩展为32位送入EAX 这两条指令常用于作除法时对被除数位数的扩展。

2) 字节交换指令BSWAP 指令格式: BSWAP reg32 功能:将32位通用寄存器中的双字以字节为单位进行高、低字节交换,改变双字数据的存放方式。指令执行时,将字节0(b0~b7)与字节3(b24~b31)交换,字节1(b8~b15)与字节2(b16~b23)交换。

2.算术运算类 1) 交换加法指令XADD 指令格式: XADD OPRD1,OPRD2 reg,reg mem,reg XADD指令将OPRD1 (8位、16位或32位寄存器或存储单元)中目的操作数与OPRD2(8位、16位或32位寄存器)的值相加,结果送入OPRD1,并将OPRD1的原值存于OPRD2。

2) 比较并交换指令CMPXCHG 指令格式: CMPXCHG OPRD1,OPRD2 reg,reg mem,reg CMPXCHG将存放在OPRD1(8位、16位或32位寄存器或存储器)中的目的操作数与累加器AL、AX或EAX的内容进行比较,如果相等,则ZF=1,并将源操作数OPRD2送入OPRD1;否则ZF=0,并将OPRD1送到相应的累加器。例如: CMPXCHG ECX,EDX ;若ECX=EAX,则EDX→ECX,且ZF=1; ;否则,ECX→EAX,且ZF=0

3.逻辑运算与移位指令 双精度左移/右移指令SHLD/SHRD 指令格式: SHLD/SHRD OPRD1,OPRD2,OPRD3 reg,reg,imm8 mem,reg,imm8 reg,reg,CL mem,reg,CL

SHLD/SHRD指令将OPRD1和OPRD2两个16位或32位操作数(寄存器或存储器)连接成双精度值(32位或64位),然后向左或向右移位,移位位数由计数操作OPRD3决定(CL或立即数)。移位时,OPRD2的内容移入OPRD1,而OPRD2本身不变。进位CF中的值为OPRD1移出的最后一位。其操作示意图如图4.29所示。 图4.29 双精度位移示意图

例如: MOV AX,3AF2H MOV BX,9C00H SHLD AX,BX,7 ;指令执行后,AX=794EH,BX=9C00H

4.位操作类 1) 测试与置位指令BT/BTC/BTS/BTR 指令格式: BT/BTC/BTS/BTR OPRD1,OPRD2 reg,reg mem,reg reg,imm mem,imm

这四条指令的功能是:对由OPRD2指定的目的操作数OPRD1(16位或32位)中的某一位(最低位为b0)进行测试操作并送入CF,然后将该位按操作规定置1、置0或变反。当OPRD1是16位操作数时,OPRD2的取值范围为015;当OPRD1是32位操作数时,OPRD2的取值范围为031。 ① BT指令只完成上述位测试并将该位送入CF。

… 例4.19 ② BTC指令在完成BT指令功能后,再将测试位变反。 ③ BTS/BTR完成BT指令功能后,再将测试位置1或置0。 MOV CX,4 BT [BX],CX ;检查由BX指向的数的b4位,且将b4位放入CF中 JC NEXT ;b4位=1,转移至NEXT NEXT: … ② BTC指令在完成BT指令功能后,再将测试位变反。 ③ BTS/BTR完成BT指令功能后,再将测试位置1或置0。 …

2) 位扫描指令BSF/BSR 指令格式: BSF/BSR OPPD1,OPRD2 reg,reg reg,mem BSF用于对16位或32位源操作数OPRD2从低位b0到高位(b15或b31)进行扫描,并将扫描到的第一个“1”的位号送入OPRD1指定的目标寄存器。如果OPRD2所有位均为0,则将ZF标志位置1,OPRD1中的结果无定义;否则(OPRD2≠0),将ZF清0,OPRD1中为位号。

BSR指令的功能同BSF,只是从高位到低位进行反向扫描。例如: MOV BX,40A0H BSF AX,BX ;指令执行后,(AX)=5 BSR AX,BX ;指令执行后,(AX)=14

5.条件设置指令SET 指令格式: SETcc OPRD reg8 mem8 SET类指令共有16条。它们总的功能是,根据指令中给出的条件“CC”是否满足来设置OPRD指定的8位寄存器或存储器操作数:条件满足时,将OPRD操作数置为1;条件不满足时置为0。具体如表4.10所示。

表4.10 条件设置指令表

6.Cache管理类指令 80486的系统控制指令集中增加了三条Cache(高速缓存)管理指令INVD、WBINVD及INVLPG,用于管理CPU内部的8 KB Cache。 1) 作废Cache指令INVD 该指令用于将片内Cache的内容作废。其具体操作是:清除片内Cache的数据,并分配一个专用总线周期清除外部Cache子系统中的数据。执行该指令不会将外部Cache中的数据写回主存储器。

2) 回写和作废Cache指令WBINVD WBINVD先擦除内部Cache,并分配一个专用总线周期将外部Cache的内容写回主存,在此后的一个总线周期内将外部Cache刷新(清除数据)。 3) 作废TLB项指令INVLPG 该指令用于使页式管理机构内的高速缓冲器TLB中的某项作废。如果TLB中含有一个存储器操作数映像的有效项,则该TLB项被标记为无效。

4.2.4 Pentium系列处理器增加的指令 Pentium系列处理器的指令集是向上兼容的,它保留了8086,8088,80286,80386和80486微处理器系列的所有指令,因此,所有早期的软件可直接在奔腾机上运行。Pentium处理器指令集中增加了三条专用指令和四条系统控制指令,如表4.11所示。 1.Pentium专用指令 1) 比较并交换指令CMPXCHG8B 指令格式: CMPXCHG8B OPRD1,OPRD2 mem,reg

CMPXCHG8B mem,ECX:EBX ;若EDX:EAX=[mem],则ECX: ;EBX→[mem],ZF=1 该指令由80486的CMPXCHG指令改进而来,它执行64位的比较和交换操阼。执行时将存放在OPRD1(64位存储器)中的目的操作数与累加器EDX:EAX的内容进行比较,如果相等,则ZF=1,并将源操作数OPRD2(规定为EDX:EAX)的内容送入OPRD1;否则ZF=0,并将OPRD1送到相应的累加器。例如: CMPXCHG8B mem,ECX:EBX ;若EDX:EAX=[mem],则ECX: ;EBX→[mem],ZF=1 ;否则[mem]→EDX:EAX且ZF=0

2) CPU标识指令CPUID 指令格式: CPUID 使用该指令可以辨别微机中奔腾处理器的类型和特点。在执行CPUID指令前,EAX寄存器必须设置为0或1,根据EAX中设置值的不同,软件会得到不同的标志信息。

3) 读时间标记计数器指令RDTSC 指令格式: RDTSC 奔腾处理器有一个片内64位计数器,称为时间标记计数器。计数器的值在每个时钟周期都递增,执行RDTSC指令可以读出计数器的值,并送入寄存器EDX:EAX中,EDX保存64位计数器中的高32位,EAX保存低32位。 一些应用软件需要确定某个事件已执行了多少个时钟周期,在执行该事件之前和之后分别读出时钟标志计数器的值,计算两次值的差就可得出时钟周期数。

2.Penfium新增系统控制指令 1) 读/写模式专用寄存器指令RDMSR/WRMSR RDMSR和WRMSR指令使软件可访问模式专用寄存器的内容,这两个模式专用寄存器是机器地址检查寄存器(MCA)和机器类型检查寄存器(MCT)。若要访问MCA,指令执行前需将ECX置为0;而为了访问MCT,需要将ECX置为1。执行指令时在访问的模式专用寄存器与寄存器组EDX:EAX之间进行64位的读/写操作。

2) 恢复系统管理模式指令RSM 奔腾处理器有一种称为系统管理模式(SMM)的操作模式,这种模式主要用于执行系统电源管理功能。外部硬件的中断请求使系统进入SMM模式,执行RSM指令后返回原来的实模式或保护模式。

3) 寄存器与CR4之间的传送命令 指令格式: MOV CR4,reg32 MOV reg32,CR4 该指令实现32位寄存器与CR4间的数据传送。