408计算机组成原理学习笔记——指令系统

目录

1.指令格式

1.1.指令的基本格式

1.1.2.按指令长度分类

1.1.3.按操作码长度分类

1.1.4.按操作类型分类

1.2.扩展操作码指令格式

2.指令的寻址方式

2.1.指令寻址

2.1.1.顺序寻址

2.1.2.跳跃寻址

2.2.数据寻址

2.2.1.六种寻址

2.2.2.偏移寻址

2.2.3.堆栈寻址

3.CISC/RISC

4.程序的机器级代码表示

4.1.常用汇编指令介绍​编辑

4.2.常用的x86汇编指令

4.3.AT&T格式和INTER格式 

4.4.选择语句的机器级表示

4.5. 循环语句的机器级表示


1.指令格式

1.1.指令的基本格式

1.操作码:干什么;地址码:对象

2.零地址指令:没有操作数或者操作数隐含

3.一地址指令:单操作数或者双操作数中一个隐含一个给出

4. 二三地址指令:区别在于运算的结果写入位置

5.四地址指令:除最后一步需要跳转指令地址外,跟三地址指令相同

7.在指令总长度不变的情况下,地址码个数越多,寻址能力越差(每个地址码的个数更少)

1.1.2.按指令长度分类

指令字长可能会发成变化,但是机器字长、存储字长不变

1.1.3.按操作码长度分类

1.1.4.按操作类型分类

转移类指令将会导致PC(下一跳指令的地址)的值发生改变

1.2.扩展操作码指令格式

扩展操作码指令格式:定长指令字结构 + 可变长操作码(不同地址数的指令使用不同长度的操作码)

设地址长度为n,上一层留出m种状态,下一层可以扩展出m * 2 ^ n种状态

该扩展操作码方法下,每个地址/操作数都需要保留某些特定二进制数用于CPU判断是哪一种指令

①15条三地址指令,至少需要4位表示,使用0000 - 1110,剩余1111

②12条二地址指令,至少需要4位表示,使用0000 - 1011,剩余1100、1101、1110、1111

③62条一地址指令,至少需要6位表示,但是加上②中所剩余的四个地址,4 * 4位的方式可以表示64条指令,剩余1110 - 1111

④32条零地址指令,至少需要5位表示,但是加上③中所剩余的两个地址,2 * 4位的方式可以表示32条指令

CPU会读入这16位指令(0-15位):

①判断0-3位是否为全1,非全1则是三地址指令,全1则进行②

②判断4-5位是否为全1,非全1则是二地址指令,全1则进行③

③判断6-10位是否为全1,非全1则是一地址指令,全1则为零地址指令

2.指令的寻址方式

2.1.指令寻址

PC:指明下一条指令的存放地址

2.1.1.顺序寻址

下一条指令的地址:(PC)+ “1”→PC(1为指令字长)

1.当前指令被取出时,PC进行+1操作

2.PC+1操作是根据不同的场合加不同的1(定长指令)

①设字长为16位,按字编址时,每个字都刚好存放一个指令,因此,PC + 1

②设字长为16位,按字节编址时,每两个字节存放一个地址,因此,PC + 2

3.变长指令:无法预估指令长度,可能需要多次访存,每次读入一个字

设字长为16位,按字节编址

①读入一个完整的字,根据操作码判断这条指令的总字节数 n

②若这条指令的长度>字长,则读入剩余指令,并且PC + n

③若这条指令的长度 = 字长,则PC + 2

2.1.2.跳跃寻址

由转移指令给出

1.当取出转移指令后,PC还是会先进行 PC + 1的操作

2.当执行转移指令时,PC的内容将会被转移指令所改变

2.2.数据寻址

2.2.1.六种寻址

1.确定本条指令的地址码指明的真实地址

2.指令增加寻址特征位,用于判断该如何解读形式地址(A)的含义,从而得到有效地址(EA)

①直接寻址:

Ⅰ访存:取指令1次,取A中的地址1次

Ⅱ缺点:寻址范围不能扩展(形式地址位数有限);当操作数的地址发生改变时,指令失效(仍然指向改变前的地址)

 ②间接寻址:

Ⅰ访存:取指令1次,取A中EA的地址1次,找到EA中的地址1次(一次间接两次寻址)

可以进行多次间接寻址,当开头第一位为1时,说明该地址存储的地址仍然不是最终的有效地址;当开头第一位为0时,说明该地址存储的地址为最终的有效地址

Ⅱ优点:主存中EA的位数可以远大于形式地址的长度;函数之间可以相互调用,方便返回

Ⅲ缺点:多次访存导致效率降低

③寄存器寻址:

Ⅰ访存:取指令1次,执行指令时,访问的是寄存器

Ⅱ优点:速度快(执行指令无需再次访存)、指令短(寄存器个数少)

④寄存器间接寻址:

Ⅰ访存:取指令1次,取出寄存器存放的主存地址EA 0次,取出主存EA中存放的地址1次

Ⅱ优点:比一般间接寻址快(EA存放在寄存器中,取出无需访存)

⑤隐含寻址:

 ⑥立即寻址:  访存:仅取指令一次,无需再次访存寄存器/主存

2.2.2.偏移寻址

1.偏移寻址包括基址寻址、变址寻址和相对寻址

2.三者都是经过偏移量寻址,区别在于起点的不同

3.都仅需访存一次

①基址寻址(基址寄存器(BR)Base Address Register)):EA = (BR)+ A(多道程序)

1.基址寄存器中存放的是当前程序的首地址(基地址,运行中基址寄存器中的内容不变,形式地址作为偏移量可变)

2.基址寄存器可以是专用,也可以是指定一个通用寄存器(需要在指令中指明是哪个通用寄存器)

3.便于程序浮动(整段程序在内存中的浮动),多道程序并发运行(仅需修改基址寄存器的内容实现正确寻址,相较于直接寻址,直接寻址需要修改每条指令的地址);可以增加寻址范围(基址寄存器的位数大于形式地址位数,但由于形式地址决定偏移量,因此偏移量有限

4.基址寄存器面向操作系统(用户可以决定使用哪个基址寄存器,但内容由操作系统决定)

②变址寻址(IX——index register):EA = (IX)+ A(数组、循环程序)

1.变址寄存器中的内容(可变)作为偏移量,形式地址A(不变)作为基地址(与基址寻址刚好相反):可以通过不断的改变变址寄存器中的内容,访问数组中的元素,因此适合循环程序

2.变址寄存器可以是专用,也可以是指定一个通用寄存器(需要在指令中指明是哪个通用寄存器)

3.变址寄存器面向用户(用户可以修改变址寄存器的内容)

4.变址寄存器的作用:

采用直接寻址的方式:每进行一轮循环都需要一条相应的直接寻址指令

采用变址寻址的方式:通过改变IX的内容(用比较的IX内容的方式)循环执行程序

③相对寻址(转移指令)

1.PC的内容加上指令中形式地址A形成操作数的有效地址,即EA = (PC)+ AA为相对于PC的偏移量,正负都可,用补码表示

2.PC在取出使用相对寻址的指令时,就会进行+ “1”操作,即相对寻址是相对于下一条指令的存放地址的偏移量

3.优点:无论代码被放在什么位置,都不用更改跳转指令的地址码(若使用直接寻址的方式,则每次都需要更改)便于程序浮动(一段代码在程序内部浮动),广泛被用于转移类指令

2.2.3.堆栈寻址

1.操作数存放在堆栈中,隐含使用堆栈指针(SP:Stack Pointer)作为操作数地址

2.堆栈指针存在专门的寄存器中,其指向栈顶元素

3.堆栈两种实现方式:

①专用寄存器:不同情况下对SP的操作顺序和操作方式不同(参考数据结构栈),取指令需访存,执行指令无需访存

②主存中开辟堆栈空间:每次操作都需要进行访存

3.CISC/RISC

1.C(complex复杂):

①一条指令完成一个复杂的基本功能

②除了极复杂的某些指令不设计单独电路外,每条的指令都可以由一个单独的电路完成(电路设计复杂)

③复杂的指令通过多个电路配合存储部件实现——微程序

④指令长度不固定

2.R(Reduced精简)

①一条指令完成一个基本动作;多个指令组合成一个复杂的功能

②一条指令一个电路,但由于只提供基本操作,因此电路设计简单

③每条指令的执行时间都差不多——方便实现并行、流水线

④指令长度定长

4.程序的机器级代码表示

4.1.常用汇编指令介绍

1.中括号内指明的是内存地址,常与读写长度结合使用,表示以该地址为首地址的多少空间内(dword ptr双字32bit,word ptr单字15bit,byte ptr字节8bit)

2.h代表的是十六进制

3.操作数若是二进制/十六进制数,则采用的是立即寻址

4.目的操作数d——destination,源操作数s——sourse

5.寄存器的种类:

 ①每个寄存器都为32bit

②EAX、EBX、ECX、EDX为通用寄存器:可以存放任何数据

可以只使用低16bit(AX、BX、CX、DX);也可以指定使用低16bit的高8bit和低8bit(AH、AL;BH、BL;CH、CL;DH、DL)

③EBP指向栈底,ESP指向栈顶

6.更多汇编指令示例:

①寄存器间接寻址:ebx存放的是源操作数的主存地址

②寄存器间接寻址:ebx存放的是目的操作数的主存地址

③寄存器间接寻址:ebx存放的是源操作数的主存地址,取8bit

④未指明操作数大小的情况下,默认是32bit

⑤间接寻址:主存地址af996中存放的是目的操作数的主存地址,h表示af996是十六进制

⑥寄存器间接寻址:+8为偏移量,源操作数的主存地址为ebx寄存器中存放的地址 + 8

⑦间接寻址:-12位偏移量,h表示af996为十六进制,源操作数的主存地址为主存地址af996 - 12

4.2.常用的x86汇编指令

执行操作后,需要将结果放回目的操作数的地址中,因此,目的操作数不可以为常量

①算术运算指令

1.i表示有符号数的操作

2.除法指令中s为除数,被除数默认已经被放入edx和eax中(除法开始之前需要对被除数进行位扩展)

②逻辑运算指令 

 

4.3.AT&T格式和INTER格式 

①AT&T格式左边为源操作数,右边为目的操作数(与INTER格式相反)

②AT&T格式寄存器前需要加%(INTER格式不需要)

③AT&T格式立即数前加$(INTER格式直接给出立即数)

④AT&T格式主存地址为小括号(INTER格式主存地址为中括号)

⑤AT&T格式指令后增加b、w、l表示读/写的长度(分别对应INTER格式的dworld、word、btye)

⑥AT&T格式偏移量写在括号外(INTER格式偏移量写在括号内)

4.4.选择语句的机器级表示

1.无条件转移指令jmp:

①通过修改PC的内容改变下一条执行的指令

②通过标号跳转(jump NEXT)

 2.条件转移指令:满足条件时才进行跳转

cmp实际上是做a - b(减法运算),通过标志位CF、ZF、OF、SF等标志位判断

4.5. 循环语句的机器级表示

1.通过条件转移指令(标号)实现循环

②循环开始前判断是否能跳过循环

③每轮循环结束判断是否需要继续循环

2.通过loop指令实现循环

①选定一个寄存器为循环计数器

②每轮循环自动进行自减操作

  • 9
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值