指令系统

最后修改于

Q1:指令系统的作用?
屏蔽下层硬件,为上层软件提供统一抽象。
image.png
Q2:指令系统的基本操作?
计算与存储,对操作数进行计算,并适当的对结果进行保存。
image.png
Q3:指令格式?
包括表示指令本身的操作码,表示操作数的部分

#

指令格式#

分为变长指令结构(x86),定长指令结构 (arm)。

  • 零地址指令,直接给出指令,无需操作数或是隐含部分操作数。比如:空操作、停机、关中断
  • 一地址指令,(ACC) OP (A1)->ACC 或 OP (A1)->A1。比如:加 1,减 1,求反,求补
  • 二地址指令,(A1) OP (A2)->A1,比如两数相加,相减
  • 三地址指令,(A1) OP (A2)->A3
  • 四地址指令,(A1) OP (A2)->A3, A4 = next Instruction Addr

指令操作码部分分为定长操作码和变长操作码,变长操作码需要避免歧义。

寻址方式#

指令寻址:

  • 顺序寻址:PC + 1
  • 跳转寻址:相对偏移量或绝对地址

数据寻址:

寻址方式 (访存次数)有效地址备注
隐含寻址0操作数由累加器给出
立即寻址0A 就是操作数
直接寻址1EA = A给出地址
一次间接寻址2EA = (A)给出间址
寄存器寻址0EA = R寄存器存储操作数
寄存器间接寻址1EA = (R)寄存器给出间址
相对寻址1EA = (PC) + A基于偏移值加上 PC
基址寻址1EA = (BR) + A系统设定,用于程序定位
变址寻址1EA = (IX) + A程序设定,比如数组
堆栈寻址
SP 内存堆栈

#

汇编表示#

image.png

操作类型#

数据传送:MOV,LOAD,STORE
mov ax, 10 将 10 移动到ax
pop edi``pop [ebx]
push eaxeax的值压入栈
算数逻辑运算:ADD,SUB,CMP,MUL,AND 等
移位运算:逻辑移位,算术移位,循环移位
add ax, 10``sub ax, 10
inc eaxdec dword ptr [var]
imul eax, [var],结果送入 eax
idiv ebx:被除数是 edx:eax,商送到eax,余数送到edx
and/or/xrand eax, 0fH结果送入第一个操作数
not/neg
shl/shr:逻辑移位
转移操作:JMP,BRANCH,RET,CALL,TRAP 等
jmp <label>
jcondition <label>e,ne,z,g,ge,l,le
cmp: cmp ax bx比较值,相等填入 ZF = 1
test:进行与运算,根据结果是否为 0,为0填入 ZF=1
call/retcall <label>先将当前指令地址入栈,然后跳转。ret弹出指令,跳转
I / O 操作:完成 CPU 与外设的数据传送