指令系统【考研/408】

【考纲内容】

指令格式

指令的基本格式

定长操作码指令格式

扩展操作码指令格式

 

指令的寻址方式

有效地址的概念

数据寻址和指令寻址

常见的寻址方式

 

CISC和RISC的基本概念

 

——————————————————

指令的基本格式

操作码字段(8位)

地址码字段

下面的1,2,3,4地址寻址,一般32位,8位操作码,剩下的位数地址码平分,地址码的位数决定了直接寻址的范围。

 

零地址指令:

1)不需要操作码,如操作、停机、关中断指令等

2)用堆栈中隐含的栈顶和次栈顶的操作数弹出进行运算,再隐含的压入堆栈

一地址指令:

1)OP(𝐴1)⟶𝐴1 ,取反、+1、-1、求补等    访存3次

2)(𝐴𝐶𝐶)𝑂𝑃(𝐴1)⟶𝐴𝐶𝐶,另一个操作数由累加器提供   访存2次

二地址指令:

(𝐴1)𝑂𝑃(𝐴2)⟶𝐴1       访存4次

三地址指令:

(𝐴1)𝑂𝑃(𝐴2)⟶𝐴3       访存4次

四地址指令:

(𝐴1)𝑂𝑃(𝐴2)⟶𝐴3 , 𝐴4=下一条要执行的指令的地址     访存4次

 

 

 

指令寻址方式

隐含寻址:

另一个操作数隐含在ACC中,ACC对单地址指令格式来说是隐含寻址

优点:有利于缩短指令字长

缺点:需要增加隐含地址的硬件

 

立即寻址:

指令字段就是操作数本身

直接寻址:

 

间接寻址:

可以是一次间接寻址,也可以是多次

 

寄存器寻址:

指令字中直接给出操作数所在的寄存器编号

优点:不访问主存,只访问寄存器执行速度快

缺点:寄存器贵呀 而且计算机中的寄存器数量有限

寄存器间接寻址:

寄存器中放的是操作数所在存储单元的地址

比一般间接寻址快,但是要访问主存

 

相对寻址:

程序计数器(PC)+指令格式中的形式地址A得到操作数的有效地址

𝐸𝐴=(𝑃𝐶)+𝐴

A就像指令地址的偏移量,可正可负,补码表示

优点:操作数地址不固定,由PC值变化而变化,便于程序浮动

广泛用于转移指令

 

基址寻址:

将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址𝐴形成操作数有效地址

𝐸𝐴=(𝐵𝑅)+𝐴

基址寄存器可用专用寄存器,也可以用通用寄存器,其内容由操作系统/管理程序改变,执行时,内容不变。用通用寄存器时,可由用户选择用哪个通用寄存器,但内容任由操作系统/管理程序决定。

优点:可扩大寻址范围,利于多道程序设计,可用于编制浮动程序,但偏移量(A)位数较短

 

变址寻址:

变址寄存器(专用)IX加上形式地址A形成有效地址

变址寄存器面向用户,程序执行过程中,变址寄存器内容可由用户改变

𝐸𝐴=(𝐼𝑋)+𝐴

优点:可扩大寻址范围,适合编制循环程序

 

堆栈寻址:

硬堆栈:寄存器堆栈

软堆栈:主存中划一片区域做堆栈

SP:堆栈指针

 

 

 

 

常见的X86指令

指令 目的地址,源地址

[ebx]:取ebx值指示的内存地址中的内容

mov eax,[ebx]    取ebx值指示的内存地址中的内容放入eax

<reg>:任意寄存器,<reg8>代表8位寄存器 <reg16>代表16位寄存器 <reg32>代表32位寄存器

<mem>:内存地址,如[eax]、[var+4]

<con>:表常数,<con8>表8位常数  <con16><con32>

 

DB(Data Byte):1B

DW(Data Word):2B

DD(Data Double Word):4B

 

byte ptr:1B指针

word ptr:2B指针

dword ptr:4B指针

 

mov:将第二个操作数复制到第一个操作数

push:压入栈

pop:弹出栈

 

add:两个操作数相加,结果保存到第一个操作数中

sub:两个操作数相减,结果保存到第一个操作数中

 

inc:自+1

dec:自-1

 

imul:带符号整数乘法,有两种格式,但以下两种格式都要求第一个操作数是寄存器

1、两个操作数,两个操作数相乘,结果放到第一个操作数中

2、三个操作数,第二、第三个操作数相乘,结果放到第一个操作数中

 

idiv:带符号整数除法,只有一个操作数,即除数。被除数则为edx:eax中的内容(64位整数)操作数的结果有两部分:商和余数,商送到sex,余数送到edx

 

and/or/xor:逻辑与、逻辑或、逻辑异或

 

not:将操作数中的每一位翻转,0→1,1→0

 

neg:取负

 

shl:逻辑左移

shr:逻辑右移

(第一个操作数表示被操作数,第二个操作数指示位移的位数)、

 

流控制指令:

如在一句操作前加了标签,如

begin: xor ecx,ecx

在之后的语句中就可以通过

jmp begin

来跳转到相应label的指令执行

 

jcondition指令:条件转移指令

je (jump when equal)

jne (jump when not equal)

jz (jump when last result was zero)

jg (jump when greater than)

jge (jump when greater than or equal to)

jl (jump when less than)

jle (jump when less than and equal to)

 

cmp指令:

比较两个操作数的值,并根据比较结果设置处理机状态字中的条件码

通常和jcondition指令搭配使用

 

call指令:将当前执行指令地址入栈,然后无条件转移到由标签指示的指令。

ret指令:实现子程序的返回机制

 

 

CISC(Complex Instruction Set Computing)

RISC(Reduced Instruction Set Computing)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值