指令系统
第5章 指令系统

1.立即寻址方式
寻找的操作数紧跟在指令操作码之后,也就是说 地址码字段存放的不是操作数的地址,而是操作 数本身。 立即寻址方式的特点是:指令执行的时间很短, 因为不需要访问存储器获取操作数,从而节省了 访问存储器的时间;立即寻址方式的使用范围很 有限,主要用于给寄存器赋初值。 【例5-1】 MOV AX,67 指令执行后,(AX)=67。
操作的示意图如下图所示,这条指令的执行结果为 (AX)=3412H。
存储器 操作码 操作码 AX 00H 代码段 位 移 DISP 量
01H 20000H
201A0H 12H 34H
数据段
6.基址变址寻址
操作数的偏移地址是一个基址寄存器(BX、BP) 和一个变址寄存器(SI、DI)的内容之和。基址 变址寻址方式的格式表示为:[基址寄存器名][变 址寄存器名]或[基址寄存器名+变址寄存器名]。操 作数默认位于那个段中,是由指令中使用的基址 寄存器决定的,如果指令中指定的基址寄存器是 BX,则操作数默认在数据段中,取DS寄存器的 值作为操作数的段地址值;如果指令中指定的基 址寄存器是BP,则操作数默认在堆栈段中,取SS 寄存器的值作为操作数的段地址值,从而计算得 操作数的20位物理地址,继而访问到操作数。
每条指令由两部分组成:操作码字段和地
址码字段。格式如图5-1所示:操作码操作 数(地址码)
操作码 操作数(地址码)
图5-1 指令格式
操作码字段:用来说明该指令所要完成的操作。 地址码字段:用来描述该指令的操作对象。一般是直接给 出操作数,或者给出操作数存放的寄存器编号,或者给出操作 数存放的存储单元的地址或有关地址的信息。 根据地址码字段所给出地址的个数,指令格式可分为零地 址、一地址、二地址、三地址、多地址指令。大多数指令需要 双操作数,分别称两个操作数为源操作数和目的操作数,指令 运算结果存入目的操作数的地址中去。这样,目的操作数的原 有数据将被取代。
第4章 指令系统

3. 规整性
规整性包括指令系统的对称性,匀齐性,指令 格式和数据格式的一致性.对称性是指:在指 令系统中所有的寄存器和存储器单元都可同等 对待,所有的指令都可使用各种寻址方式.匀 齐性是指:一种操作性质的指令可以支持各种 数据类型.
4.兼容性 兼容性
系列机各机种之间具有相同的基本结构和共 同的基本指令集,因而指令系统是兼容的,即 各机种上基本软件可以通用.但由于不同机种 推出的时间不同,只能做到"向上兼容" .
目前在指令操作码设计上主要采用以下两 种编码方式 1. 固定长度操作码 操作码的长度是固定的,且集中放在 指令字的一个字段中,指令的其余部分全 部用于地址码.例如IBM370机和VAX-11系 列机,操作码的长度均为8位,可表示256 种不同的操作. 2. 可变长度操作码
4.2.2 地址码
地址码用于指定操作数和存放运算结果的地址, 通常称为操作数.操作数可以是一个直接的数或者 是一个数据所在的地址,它以空格与操作码分开.
例如: MOV AX,[SI]
假如用户用高级语言编程,根本不用 考虑寻址方式,因为这是编译程序的事,但 若用汇编语言编程,则应对它有确切的了解, 才能编出正确而又高效的程序.此时应认真 阅读指令系统的说明书,因为不同计算机采 用的寻址方式是不同的,即使是同一种寻址 方式,在不同的计算机中也有不同的表达方 式或含义. 思考:设计指令系统时,数据的寻址方式 越多越好吗?为什么?
4.直接寻址 指令中的形式地址A就是操作数的真实 地址EA,这种寻址方式称为直接寻址方式, 又称为绝对寻址方式.如图5-3所示.
OP 寻址特征 A 主存 A 操作数
图5-3 直接寻址方式
例如: MOV AL,[0080H] MOV AX,[1000H]
第三章 指令系统

(1) 三地址双操作
50
指令
数指执令行一条三地址的加法指令需要访问514
下条指令
次主.存。
个 ( 假 单 存A显 设 元 放1号第中地指中在三单)址令,主一取地O,存第存元址次第P指放一的(双中从二令在、1A操2取5操的主第0作第0作含存二0)数一义 的 操号数存指和→为 5 作操令单,的2: 0 数A有作元第303分3号0数中四0别,取次0第指将号三令加单次,法元从第的。2二结1200000次果0从保第第1存一二号操操0到...单作作0主元数数
寄存器/存储器:直接给出寄存器或存储 器的地址码(名称)即可; 注:寄存器(CPU内部或外围设备内部) 及存储器的编址方式: 1)字编址、字节编址、位编址; 2)统一编址、非统一编址
操作数的编码方式
例:设某机主存容量为16MB ,机器 字长16 位,若最小寻址单位为字节 (按字节编址) ,其地址码为多少位? 若最小寻址单位为字(按字编址) ,其 地址码又为多少位?
共需12 条指令,其中7 条一地址的进、出栈指令, 5 条零地址的算术运算指令。进、出栈指令3 次访 存,算逻指令4 次访存,执行此程序共访存7 × 3 + 5 × 4 = 41 次。
例: 某一机器的指令系统,操作码8 位, 地址码均为16 位,CPU 与主存之间每次传 送16 位数据。A 、B 、C 、D 、E 表示字地 址,存放16 位数据。
常用指令寻址方式
顺序寻址方式 跳跃寻址方式:直接、相对、间接
栈及相关概念
1、栈的分类: 用寄存器实现堆栈(串联堆栈) 内存中开辟堆栈区
自底向上生成堆栈 自顶向下生成堆栈 2、栈的建立: 将栈顶地址传送到SP中 3、栈的操作: PUSH/POP、MOV
IA32指令系统
第4章 指令系统

存取。
二、对指令系统性能的要求三
4、兼容性:
系列机各机种之间具有相同的基本结 构和共同的基本指令集,因而指令系统是 兼容的,即各机种上基本软件可以通用。但 由于不同机种推出的时间不同,在结构和性 能上有差异,做到所有软件都完全兼容是不 可能的,只能做到“向上兼容”,即低档机 上运行的软件可以在高档机上运行。
a、CISC:70年代后,大多数计算机的指 令系统多达几百条。我们称这些计算机 为复杂指令系统计算机(CISC)。
b、RISC:但是如此庞大的指令系统难以 保证正确性,不易调试维护,造成硬件 资源浪费。为此人们又提出了便于LSI技 术实现的精简指令系统计算机(RISC) 返回
二、对指令系统性能的要求一
4.4、指令和数据的寻址方式
一、指令的寻址方式 二、操作数寻址方式
三、寻址方式举例
一、指令的寻址方式一
1、寻址方式:形成操作数有效地址或指令 有效(偏移)地址的方式。 2、寻址方式分为两类,既指令寻址方式和 数据寻址方式。 3、指令的寻址方式有两种,一种是顺序寻 址方式,另一 种是跳跃寻址方式。 4、操作数或指令在存储器中的地址:某个 操作数或某条指令存放在某个存储单元 时,其存储单元的编号就是地址。请看 图示
答案:
退 出 上一页 下一页 上一节 下一节 返回节目录
例三答案:
三、低级语言与硬件结构的关系
高级语言 低级语言
Visual c++、foxpro、java
与软件结构和指令系统无关 编写的程序可在不同机器上 运行
汇编语言、二进制语言
与机器、指令系统密切相关 编写的指令系统不同,不同
机器用不同汇编语言编写程 序,机器唯一可识别的是二
名词解释指令系统

名词解释指令系统
嘿,你知道啥是指令系统不?这玩意儿啊,就好比是一个超级复杂
又超级重要的大宝藏!
指令系统呢,简单来说,就是计算机硬件能够理解和执行的一组指
令的集合。
哎呀,就像你有一堆工具,每个工具都有它特定的用处,
能帮你完成不同的任务一样。
比如说,加法指令就像是一把专门用来
做加法运算的小锤子,乘法指令呢就像一把能快速搞定乘法的小剪刀。
咱就拿电脑来说吧,电脑的指令系统就决定了它能做些啥。
要是没
有这些指令,那电脑不就成了个大铁疙瘩啦,啥也干不了!这就好比
一个人没有了手脚,想干啥都不行,多悲催啊!
而且啊,不同类型的计算机,它们的指令系统可不一样哦!就好像
不同的人有不同的技能和特长。
有的指令系统很强大,能处理超级复
杂的任务,就像个全能高手;有的呢可能就比较简单,只能干些基础
的活儿。
你想想看,要是你有一台电脑,它的指令系统不完善,好多你想让
它干的事儿它都干不了,你得多郁闷啊!相反,如果它的指令系统超
级厉害,啥都能搞定,那你得多开心,多爽啊!
我觉得吧,指令系统真的是计算机的灵魂所在啊!没有它,计算机
就啥也不是。
它就像是一个神秘的魔法盒子,里面装着各种各样神奇
的指令,等待着我们去发现和利用。
你说是不是很神奇呢?所以啊,
我们可得好好了解一下这个神奇的指令系统,这样才能更好地利用计算机,让它为我们服务呀!。
第五章指令系统

教学内容安排•第一章绪论•第二章数码系统•第三章运算方法和运算器•第四章存储系统•第五章指令系统•第六章中央处理器•第七章输入输出设备•第八章输入输出系统第五章指令系统5.1 基本概念5.2 指令格式5.3 寻址方式5.4 指令的种类5.5 指令系统的发展教学重点和难点•寻址方式第五章指令系统 5.1 基本概念•指令(Instruction):计算机的硬件(CPU)设计好以后它能直接识别并执行的基本操作。
•指令系统(Instruction Set)或指令集:某个CPU能够直接识别并执行的所有指令的集合。
•指令字长:指令的二进制代码的位数。
注意:指令系统均针对特定的CPU而言,不同的CPU它们的指令系统可能不相同或不完全相同。
第五章指令系统5.1 基本概念5.2 指令格式5.3 寻址方式5.4 指令的种类5.5 指令系统的发展教学重点和难点•寻址方式第五章指令系统 5.2 指令格式任何一条机器指令是机器语言的一个语句,它由一组二进制代码构成。
包括两部分:•操作码•地址码第五章指令系统 5.2 指令格式根据地址码所给出的地址的个数,可以把指令分为零地址指令,一地址指令,二地址指令,三地址指令,和多地址指令。
第五章指令系统 5.2 指令格式指令字长与机器字长•指令的长度取决于操作码的长度和地址码的长度。
任何一条指令构成一个指令字。
•一个指令字中所包含的二进制数码的位数称为指令字长度。
•机器字长是指计算机的运算部件一次能直接处理的二进制数据的位数。
•指令长度与机器字长没有固定的关系,指令长度可以小于或大于机器的字长。
如单字长,半字长,双字长甚至4字长指令都是可取的。
•例如Intel8086的机器字长是16位,而指令字长最短的有8位,最长的有48位。
第五章指令系统 5.2 指令格式8086 微处理器的存储器管理•Intel 8086是字长16位的处理器,地址线20根,按字节编址,最大存储容量为1MB。
地址范围是00000H-FFFFFH。
名词解释 指令系统

名词解释指令系统
指令系统是指计算机系统用于向计算机执行特定任务发出指令的一套规则
和机制。
指令系统是计算机硬件和软件的重要组成部分,决定了计算机能够做什么、如何执行特定任务。
指令系统由多个层次组成。
首先是汇编语言,它是用汇编语言编写的程序,
能够让计算机直接执行。
汇编语言通常使用简单的指令集,只涉及计算机寄存器和内存的使用,以及数据的操作。
接下来是高级语言,高级语言编写的程序需要通过编译器或解释器翻译成汇编语言或机器语言,才能被计算机执行。
高级语言通常使用更复杂的指令集,涉及更多的操作,例如文件读写、网络通信等。
指令系统还可以包括硬件指令和软件指令。
硬件指令是由计算机硬件直接控制的指令,例如CPU中的寄存器和内存。
软件指令是由操作系统和应用程序编写的指令,例如读写文件的指令,以及网络通信的指令。
指令系统的设计非常关键,它能够影响计算机系统的性能和效率。
优化指令系统可以提高计算机系统的处理能力和响应速度,也可以降低硬件成本和复杂度。
指令系统的错误或缺陷可能导致计算机系统出现错误或崩溃,因此必须保证指令系统的稳定性和可靠性。
指令系统是现代计算机系统的重要组成部分,对于计算机系统的性能和效率有着至关重要的作用。
指令系统

3. 60年代出现了系列(series)计算机。 原因:为了继承已有的软件,减少软件的开发费用. 系列计算机:是指基本指令系统相同,基本体系结构相同 的一系列计算机。 如IBM370系列,VAX—11系列,IBMPC(XT/AT/286 /386/486/Pentium)微机系列等。 优点:在旧机种上运行各种软件可以不加任何修改地在 新机种上运行。(向下兼容)
二 .地址码结构
计算机执行一条指令所需要的全部信息都必须包含在指令 中,对于一般的指令来说,除去操作码(OP)之外,指令还应 包含以下信息: (1)第一操作数地址,用A1表示 (2)第二操作数地址,用A2表示 (3)操作结果存放地址,用A3表示 (4)下条将要执行指令的地址,用A4表示 这些信息可以在指令中明显给出,称为显地址,也可依照 某种事先的约定,用隐含方式给出,称为隐地址。 下面介绍几种指令格式。
为了解决这个问题,在70年代末人们提出了便于VLSI实现 的精简指令系统计算机,简称RISC(精简指令系统计算机)。 CISC:Complex instruction set computer RISC: reduced instruction set computer
5.2 指令格式
计算机的指令格式与机器的字长、存储器的容量 及指令的功能都有很大的关系。
指令的长度与机器的字长没有固定的关系,
它既可以小于或等于机器的字长,也可以大于机器 的字长。前者称为短格式指令,后者称为长格式指 令,一条指令存放在地址连续的存储单元中。 在同一台计算机中可能既有短格式指令又有长 格式指令,但通常是把最常用的指令( 如算术逻辑运 算指令、数据传送指令 ) 设计成短格式指令,以便节 省存储空间和提高指令的执行速度。
例.(方法一) 指令字长16位,可含有3、2、1或 0个地址,每个地址占4位。(见教材P130~131) 操作码 地址码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
注释
(in C) $s3=Address(4)
立即数相加指令
addi $s3,$s3,4
指令 实例
add $s1,$s2,$s3
sub $s1,$s2,$s3
原始C代码: Loop:g = g + A[i]; i = i + j; if (i != h) goto Loop;
-19-
do-while语句举例
3 { 0x00401334 push %ebp 0x00401335 mov %esp,%ebp 0x00401337 and $0xfffffff0,%esp 0x0040133A sub $0x10,%esp 0x0040133D call 0x401910 <__main> 4 int i=0; 0x00401342 movl $0x0,0xc(%esp) 5 do 6 { 7 i++; 0x0040134A incl 0xc(%esp) 8 }while(i>0); 0x0040134E cmpl $0x0,0xc(%esp) 0x00401353 jg 0x40134a <main+22> 9 } 0x00401355 leave 0x00401356 ret #include <stdio.h> int main ( ) { int i=0; do { i++; }while(i>0); }
Can reference low-order 4 bytes (also low-order 1 & 2 bytes)
加减指令 加法
a = b + c
add $s0,$s1,$s2
(in C)
(in MIPS)
a, b, c编译后对应寄存器 $s0,$s (in C)
-16-
逻辑运算
移位指令 a=b<<2; sll srl C语言 # shift left # shift right # t0=t1&t2 # t0=t1|t2 # t0=t1&100 # t0=t1|100
-17-
$s1,$s2,2 $s1,$s2,2 $t0,$t1,$t2 $t0,$t1,$t2 $t0,$t1,100
Alpha、ARM、MIPS、SPARC
-4-
MIPS体系结构 MIPS公司发布了第一个商用RISC结构
Microprocessor without interlocked Piped Stages
为什么选择MIPS而不是Intel 80x86?
MIPS简洁雅致,不会陷入繁琐的细节
指令系统
谭志虎 2018-10
本章主要内容
MIPS指令系统
指令系统
指令格式
寻址方式
RISC 与 CISC
-2-
MIPS指令系统
-3-
汇编语言 CPU主要工作:执行指令
指令是CPU执行最主要的操作
不同类型的CPU执行不同指令集
Instruction Set Architecture (ISA). Intel 80x86 (Pentium 4), Intel IA64, ... IBM/Motorola PowerPC (Macintosh),
MIPS广泛应用于嵌入式应用
X86平台主要应用于PC领域
汇编语言的变量---寄存器
汇编语言不能使用变量(C、JAVA可以)
Int a; float b; 寄存器变量没有数据类型
汇编语言的操作对象是寄存器
好处:寄存器是最快的数据单元
缺陷:寄存器数量有限,需仔细高效的使用各寄存器
无条件跳转指令
goto Label; J label
不能完全等效
(C语言) (MIPS指令)
beq $zero,$zero,label (MIPS指令)
-15-
If-else语句举例 X86机器级表示
3 { 0x00401334 push %ebp 0x00401335 mov %esp,%ebp 0x00401337 and $0xfffffff0,%esp 0x0040133A sub $0x10,%esp 0x0040133D call 0x401910 <__main> 4 int i,result; 5 if (i) 0x00401342 cmpl $0x0,0xc(%esp) 0x00401347 je 0x401353 <main+31> 6 result=0; 0x00401349 movl $0x0,0x8(%esp) 0x00401351 jmp 0x40135b <main+39> 7 else result=1; 0x00401353 movl $0x1,0x8(%esp) 8 } 0x0040135B leave 0x0040135C ret #include <stdio.h> int main () { int i,result; if (i) result=0; else result=1; }
8~15
16~23 24~25
$t0~$t7
$s0~$s7 $t8~$t9
暂存寄存器
save寄存器 暂存寄存器
随便使用
save/restore 随便使用
26~27 28
29 30 31
$k0~$k1 $gp
$sp $fp $ra
操作系统保留 全局指针
堆栈指针 帧指针 函数返回地址
-7-
IA-32的寄存器组织
%bx
%esi
%edi %esp %ebp %eip %eeflags
指令指针 标志寄存器
flags CS(代码段)16bits SS(堆栈段) DS(数据段) ES(附加段) FS(附加段) GS(附加段)
8个通用寄存器 两个专用寄存器
6个段寄存器
x86-64 Integer Registers
编译后的变量映射:
g h i j A[0]
$s1
$s2
$s3
$s4
$s5
-18-
循环结构
最后编译的MIPS代码: Loop: sll addu lw addu addu bne $t1,$s3,2 $t1,$t1,$s5 $t1,0($t1) $s1,$s1,$t1 $s3,$s3,$s4 $s3,$s2,Loop # # # # # # $t1= 4*i $t1=addr A+4i $t1=A[i] g=g+A[i] i=i+j if i!=h goto Loop
%eax
累加器(32bits) 计数寄存器 数据寄存器 基址寄存器 源变址寄存器 目标变址寄存器 堆栈指针 基址指针
%ax(16bits) %cx
%ah(8bits) %ch %dh %bh %si %di %sp %bp ip
%al(8bits) %cl %dl %bl
%ecx
%edx %ebx
%dx
变址寻址
偏移量+基址寄存器
写内存指令
A[12] = h + A[8];
lw sw $t0,32($s3) $t0,48($s3) # get A[8] # h+A[8] # store A[12]
-12-
(in MIPS)
add $t0,$s2,$t0
加立即数
常数相加指令
MIPS包括32个通用寄存器,字长---32bits= 1 Word
$0, $1, $2, … $30, $31
-6-
32个MIPS寄存器
寄存器编号 0 1 2~3 4~7 MIPS助记符 $zero $at $v0~$v1 $a0~$a3 释义 固定值为0 汇编器保留 函数调用返回值 函数调用参数 4个参数 备注 硬件置位
条件判断指令
If (a==b) { i=1; } else { i=2; }
beq reg1,reg2,label
C语言条件判断指令
MIPS数据传送指令
addi $s3,$zero,1
# $s3=1
立即数传送
add $s3,$s2,$zero
# $s3=$s2
寄存器传送
等效C指令
If (a==b) goto L1; i=2; goto L2; L1:i=1; L2:
sub $s3,$s4,$s5
(in MIPS)
d, e, f编译后对应寄存器 $s3,$s4,$s5
-10-
加减指令 如何编译下面的C语言表达式?
a = b + c + d - e;
编译成多行汇编指令
add $t0, $s1, $s2 add $t0, $t0, $s3 sub $s0, $t0, $s4 # temp = b + c # temp = temp + d # a = temp - e
slt $t0,$s0,$s1 # $t0 = 1 if g<h bne $t0,$0, Less # goto Less # if $t0!=0 # (if (g<h)) goto Less:
-21-
MIPS过程调用
C语言函数调用
int function(int a ,int b) { return (a+b); }
MIPS实现过程调用的机制
返回地址寄存器 $ra 参数寄存器 返回值寄存器 局部变量 堆栈指针 $a0, $a1, $a2, $a3 $v0 $v1 $t0~$t9 $sp