Q1:指令系统的作用?
屏蔽下层硬件,为上层软件提供统一抽象。
Q2:指令系统的基本操作?
计算与存储,对操作数进行计算,并适当的对结果进行保存。
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 | 操作数由累加器给出 | |
立即寻址0 | A 就是操作数 | |
直接寻址1 | EA = A | 给出地址 |
一次间接寻址2 | EA = (A) | 给出间址 |
寄存器寻址0 | EA = R | 寄存器存储操作数 |
寄存器间接寻址1 | EA = (R) | 寄存器给出间址 |
相对寻址1 | EA = (PC) + A | 基于偏移值加上 PC |
基址寻址1 | EA = (BR) + A | 系统设定,用于程序定位 |
变址寻址1 | EA = (IX) + A | 程序设定,比如数组 |
堆栈寻址 | ||
SP 内存堆栈 |
#
汇编表示#
操作类型#
数据传送:MOV,LOAD,STORE
mov ax, 10
将 10 移动到ax
中
pop edi``pop [ebx]
push eax
将eax
的值压入栈
算数逻辑运算:ADD,SUB,CMP,MUL,AND 等
移位运算:逻辑移位,算术移位,循环移位
add ax, 10``sub ax, 10
inc eax
,dec dword ptr [var]
imul eax, [var]
,结果送入 eax
idiv ebx
:被除数是 edx:eax
,商送到eax
,余数送到edx
and/or/xr
:and 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/ret
: call <label>
先将当前指令地址入栈,然后跳转。ret
弹出指令,跳转
I/O 操作:完成 CPU 与外设的数据传送