指令系统

    821
    最后修改于

    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 与外设的数据传送

    • 🥳0
    • 👍0
    • 💩0
    • 🤩0
    总浏览量 4,344