街机模拟游戏逆向工程(HACKROM)教程:[8]68K汇编指令简介

指令名    相关属性&解释


ABCD    Binary-Coded Decimal码求和运算
    运算:        原操作数(10进制)+目的操作数(10进制)+X  置入 目的操作数
    语法:        ABCD Dy,Dx
                       ABCD -(Ay),-(Ax)
    操作数长度:B
    条件码(标志位):    X — 置与C位相同。
                                        N — 未定义。
                                        Z — 结果不为零则置0;其它情况不变。
                                        V — 未定义。
                                        C — 如果有进位/借位则置1;其它情况置0。



ADD    Add 求和
    运算:        原操作数+目的操作数 置入 目的操作数
    语法:        ADD <ea>,Dn
                       ADD Dn,<ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 置与C位相同。
                                        N — 如果结果为负数则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 如果发生溢出则置1;其它情况置0。
                                        C — 如果有进位/借位则置1;其它情况置0。



ADDA    Add Address 求和(地址)
    运算:    原操作数+目的操作数 置入 目的操作数
    语法:    ADDA <ea>,An
    操作数长度:W、L
    条件码(标志位):不受影响。



ADDI    Add Immediate 求和(立即数)
    运算:    立即数+目的操作数 置入 目的操作数
    语法:    ADDI #<data>,<ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 置与C位相同。
                                        N — 如果结果为负数则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 如果发生溢出则置1;其它情况置0。
                                        C — 如果有进位/借位则置1;其它情况置0。



ADDQ    Add Quick 求和
    运算:    立即数+目的操作数 置入 目的操作数
    语法:    ADDI #<data>,<ea>
    操作数长度:B、W、L
    条件码(标志位):当目的操作数是地址寄存器的时候不受影响。
                                        X — 置与C位相同。
                                        N — 如果结果为负数则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 如果发生溢出则置1;其它情况置0。
                                        C — 如果有进位/借位则置1;其它情况置0。



ADDX    Add Extended 求和(扩展)
    运算:    原操作数+目的操作数 置入 目的操作数
    语法:    ADDX Dy,Dx
                   ADDX -(Ay),-(Ax)
    操作数长度:B、W、L
    条件码(标志位):    X — 置与C位相同。
                                        N — 如果结果为负数则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 如果发生溢出则置1;其它情况置0。
                                        C — 如果有进位/借位则置1;其它情况置0。



AND    AND Logical 求逻辑与
    运算:    原操作数 “与” 目的操作数 置入 目的操作数
    语法:    AND <ea>,Dn
                   AND Dn,<ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 不受影响。
                                        N — 最高(有效)位为1则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 置0。
                                        C — 置0。



ANDI    AND Immediate 求逻辑与(立即数)
    运算:    立即数 “与” 目的操作数 置入 目的操作数
    语法:    ANDI #<data>,<ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 不受影响。
                                        N — 最高(有效)位为1则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 置0。
                                        C — 置0。



ANDI to CCR    CCR AND Immediate 标志器存器、立即数求逻辑与
    运算:    立即数 “与” 标志器存器 置入 标志器存器
    语法:    ANDI #<data>,CCR
    操作数长度:B
    条件码(标志位):    X — 如果立即数的4位为0则置0;其它情况不变。
                                        N — 如果立即数的3位为0则置0;其它情况不变。
                                        Z — 如果立即数的2位为0则置0;其它情况不变。
                                        V — 如果立即数的1位为0则置0;其它情况不变。
                                        C — 如果立即数的0位为0则置0;其它情况不变。



ASL,ASR        Arithmetic Shift 算术位移
    运算:    目的操作数按计数位移 置入 目的操作数
    语法:    ASL/ASR Dx,Dy
                   ASL/ASR #<data>,Dy
                   ASL/ASR <ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 存放最后一位被移出的数字。位移计数为0则不受影响。
                                        N — 最高(有效)位为1则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 如果在移动过程中最高位发生改变则置1;其它情况置0。
                                        C — 存放最后一位被移出的数字;位移计数为0则置0。



Bcc    Branch Conditionally 条件分支
    运算:    如果条件成立,程序计数器+位移值 置入 程序计数器
    语法:    Bcc <label>
    操作数长度:B、W

    相应指令    分支条件(0:顺序执行、1:转移)    英文解释        中文解释

       BHI            !C&&!Z                High            高于转移
       BLS             C||Z                Low or Same        低于或相同转移
       BCC              !C                Carry Clear        无进/借位转移
       BCS               C                Carry Set        有进/借位转移
       BNE              !Z                Not Equal        不为零(不相等)转移
       BEQ               Z                Equal            为零(相等)转移
       BVC              !V                Overflow Clear        无溢出转移
       BVS               V                Overflow Set        有溢出转移
       BPL              !N                Plus            非负数转移
       BMI               N                Minus            负数转移
       BGE              N&&V||!N&&!V            Greater or Equal    大于等于(不小于)转移
       BLT             N&&!V||!N&&V            Less Than        小于转移
       BGT          N&&V&&!Z||!N&&!V&&!Z            Greater Than        大于转移
       BLE          Z||N&&!V||!N&&V            Less or Equal        小于等于(不大于)转移



BCLR    Test a Bit and Clear 测试并置0某个位
    运算:    测试(目的操作数的位号)置入 Z ;
        0 置入 目的操作数的该位
    语法:    BCLR Dn,<ea>
                   BCLR #<data>,<ea>
    操作数长度:B、L
    条件码(标志位):    Z — 如果结果为零则置1;其它情况置0。
                                        其它位不受影响。



BRA    Branch Always 无条件分支
    运算:    程序计数器+位移值 置入 程序计数器
    语法:    BRA <label>
    操作数长度:B、W
    条件码(标志位):不受影响。



BSET    Test Bit and Set 测试并置1某个位
    运算:    测试(目的操作数的位号)置入 Z ;
        1 置入 目的操作数的该位
    语法:    BSET Dn,<ea>
                   BSET #<data>,<ea>
    操作数长度:B、L
    条件码(标志位):    Z — 如果结果为零则置1;其它情况置0。
                                        其它位不受影响。



BSR    Branch to Subroutine 分支到子程序
    运算:    动态堆栈指示器-4 置入 动态堆栈指示器;
        程序计数器 置入 动态堆栈指示器中的地址;
        程序计数器+位移值 置入 程序计数器
    语法:    BSR <label>
    操作数长度:B、W
    条件码(标志位):不受影响。



BTST    Test a Bit 测试某个位
    运算:    测试(目的操作数的位号)置入 Z
    语法:    BTST Dn,<ea>
                   BTST #<data>,<ea>
    操作数长度:B、L
    条件码(标志位):    Z — 如果结果为零则置1;其它情况置0。
                                        其它位不受影响。



CHK    Check Register Against Bounds 检查数据寄存器是否越界
    运算:    如果 Dn<0 或者 Dn>原操作数
    语法:    CHK <ea>,Dn
    操作数长度:W
    条件码(标志位):    X — 不受影响。
                                        Z — Dn < 0 则置1;Dn > 有效地址 则置0。
                                        其它位未定义。



CLR    Clear an Operand 操作数置0
    运算:    0 置入 目的操作数
    语法:    CLR <ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 不受影响。
                                        N — 置0。
                                        Z — 置1。
                                        V — 置0。
                                        C — 置0。



CMP    Compare 比较
    运算:    目的操作数-原操作数 置入 条件位
    语法:    CMP <ea>,Dn
    操作数长度:B、W、L
    条件码(标志位):    X — 不受影响。
                                        N — 如果结果为负数则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 如果发生溢出则置1;其它情况置0。
                                        C — 如果有进位/借位则置1;其它情况置0。



CMPA    Compare Address 比较(地址)
    运算:    目的操作数-原操作数 置入 条件位
    语法:    CMPA <ea>,Dn
    操作数长度:W、L
    条件码(标志位):    X — 不受影响。
                                        N — 如果结果为负数则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 如果发生溢出则置1;其它情况置0。
                                        C — 如果有进位/借位则置1;其它情况置0。



CMPI    Compare Immediate 比较(立即数)
    运算:    目的操作数-立即数 置入 条件位
    语法:    CMPI #<data>,Dn
    操作数长度:W、L
    条件码(标志位):    X — 不受影响。
                                        N — 如果结果为负数则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 如果发生溢出则置1;其它情况置0。
                                        C — 如果有进位/借位则置1;其它情况置0。



CMPM    Compare Memory 比较(内存)
    运算:    目的操作数-原操作数 置入 条件位
    语法:    CMPM (Ay)+,(Ax)+
    操作数长度:B、W、L
    条件码(标志位):    X — 不受影响。
                                        N — 如果结果为负数则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 如果发生溢出则置1;其它情况置0。
                                        C — 如果有进位/借位则置1;其它情况置0。



DBcc    Test Condition,Decrement,and Branch 测试条件-自减-分支,即循环控制
    运算:    如果条件为“假”,Dn-1 置入 Dn ;
        如果 Dn>-1,程序计数器+位移值 置入 程序计数器
    语法:    DBcc Dn,<label>
    操作数长度:W
    条件码(标志位):不受影响。

    相应指令    分支条件(0:顺序执行、1:转移)    英文解释        中文解释

      DBHI            !C&&!Z                High            高于循环
      DBLS             C||Z                Low or Same        低于或相同循环
      DBCC              !C                Carry Clear        无进/借位循环
      DBCS               C                Carry Set        有进/借位循环
      DBNE              !Z                Not Equal        不为零(不相等)循环
      DBEQ               Z                Equal            为零(相等)循环
      DBVC              !V                Overflow Clear        无溢出循环
      DBVS               V                Overflow Set        有溢出循环
      DBPL              !N                Plus            非负数循环
      DBMI               N                Minus            负数循环
      DBGE              N&&V||!N&&!V            Greater or Equal    大于等于(不小于)循环
      DBLT             N&&!V||!N&&V            Less Than        小于循环
      DBGT          N&&V&&!Z||!N&&!V&&!Z            Greater Than        大于循环
      DBLE          Z||N&&!V||!N&&V            Less or Equal        小于等于(不大于)循环



DIVS    Signed Divide 有符号数除法
    运算:    目的操作数÷原操作数 置入 目的操作数
    语法:    DIVS.W <ea>,Dn32/16 fi 16r-16q
    操作数长度:W、L
    条件码(标志位):    X — 不受影响。
                                        N — 如果商为负数则置1;其它情况置0;如果发生溢出或除数为0则为定义。
                                        Z — 如果商为零则置1;其它情况置0。如果发生溢出或除数为0则为定义。
                                        V — 如果发生溢出则置1;如果除数为0则为定义;其它情况置0。
                                        C — 置0。





EOR    Exclusive-OR Logical 逻辑异或
    运算:    原操作数“异或”目的操作数 置入 目的操作数
    语法:    EOR Dn,<ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 不受影响。
                                        N — 最高(有效)位为1则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 置0。
                                        C — 置0。



EORI    Exclusive-OR Immediate 逻辑异或(立即数)
    运算:    立即数“异或”目的操作数 置入 目的操作数
    语法:    EORI #<data>,<ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 不受影响。
                                        N — 最高(有效)位为1则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 置0。
                                        C — 置0。



EORI to CCR    Exclusive-OR Immediate to Condition Code 标志器存器、立即数求逻辑异或
    运算:    立即数“异或”标志器存器 置入 标志器存器
    语法:    EORI #<data>,CCR
    操作数长度:B
    条件码(标志位):    X — 如果立即数的4位为0则置0;其它情况不变。
                                        N — 如果立即数的3位为0则置0;其它情况不变。
                                        Z — 如果立即数的2位为0则置0;其它情况不变。
                                        V — 如果立即数的1位为0则置0;其它情况不变。
                                        C — 如果立即数的0位为0则置0;其它情况不变。



EXG    Exchange Registers 寄存器数据交换
    运算:    两个操作数交换
    语法:    EXG Dx,Dy
                   EXG Ax,Ay
                   EXG Dx,Ay
    操作数长度:L
    条件码(标志位):不受影响。



EXT    Sign-Extend 符号扩展
    运算:    目的操作数符号扩展 置入 目的操作数
    语法:    EXT.W Dnextend byte to word
                   EXT.L Dnextend word to long word
    操作数长度:B、W、L
    条件码(标志位):    X — 不受影响。
                                        N — 如果结果为负数则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 置0。
                                        C — 置0。



ILLEGAL        Take Illegal Instruction Trap 非法指令中断
    运算:    管理(控制&中断)堆栈指示器-4 置入 管理堆栈指示器;
        程序计数器 置入 管理堆栈指示器中的地址;
        管理(控制&中断)堆栈指示器-2 置入 管理堆栈指示器;
        非法指令向量地址 置入 程序计数器
    语法:    ILLEGAL
    操作数长度:Unsized
    条件码(标志位):不受影响。



JMP    Jump 跳转
    运算:    目的操作数地址 置入 程序计数器
    语法:    JMP <ea>
    操作数长度:Unsized
    条件码(标志位):不受影响。



JSR    Jump to Subroutine 跳转到子程序
    运算:    动态堆栈指示器-4 置入 动态堆栈指示器;
        程序计数器 置入 动态堆栈指示器中的地址
    语法:    JSR <ea>
    操作数长度:Unsized
    条件码(标志位):不受影响。



LEA    Load Effective Address 载入有效地址
    运算:    有效地址 置入 地址寄存器
    语法:    LEA <ea>,An
    操作数长度:L
    条件码(标志位):不受影响。



LINK    Link and Allocate 链接&分配
    运算:    动态堆栈指示器-4 置入 动态堆栈指示器;
        地址寄存器 置入 动态堆栈指示器中的地址;
        动态堆栈指示器 置入 地址寄存器;
        地址寄存器+位移值 置入 地址寄存器
    语法:    LINK An,#<displacement>
    操作数长度:W
    条件码(标志位):不受影响。



LSL,LSR        Logical Shift 逻辑位移
    运算:    目的操作数按计数位移 置入 目的操作数
    语法:    LSL/LSR Dx,Dy
                   LSL/LSR #<data>,Dy
                   LSL/LSR <ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 存放最后一位被移出的数字。位移计数为0则不受影响。
                                        N — 最高(有效)位为1则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 置0。
                                        C — 存放最后一位被移出的数字;位移计数为0则置0。



MOVE    Move Data from Source to Destination 传递数据(原操作数->目的操作数)
    运算:    原操作数 置入 目的操作数
    语法:    MOVE <ea>,<ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 不受影响。
                                        N — 如果结果为负数则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 置0。
                                        C — 置0。



MOVEA    Move Address 传递地址
    运算:    原操作数 置入 目的操作数
    语法:    MOVEA <ea>,An
    操作数长度:W、L
    条件码(标志位):不受影响。



MOVE to CCR    Move to CCR    传递到标志寄存器
    运算:    原操作数 置入 标志寄存器
    语法:    MOVE <ea>,CCR
    操作数长度:W
    条件码(标志位):    X — 如果立即数的4位为0则置0;其它情况不变。
                                        N — 如果立即数的3位为0则置0;其它情况不变。
                                        Z — 如果立即数的2位为0则置0;其它情况不变。
                                        V — 如果立即数的1位为0则置0;其它情况不变。
                                        C — 如果立即数的0位为0则置0;其它情况不变。



MOVE from SR    Move from the SR 传递(从堆栈寄存器)
    运算:    堆栈寄存器 置入 目的操作数
    语法:    MOVE SR,<ea>
    操作数长度:W
    条件码(标志位):不受影响。



MOVEM    Move Multiple Registers 传递(多个寄存器)
    运算:    寄存器 置入 目的操作数;
        原操作数 置入 寄存器
    语法:    MOVEM <list>,<ea>
                   MOVEM <ea>,<list>
    操作数长度:W、L
    条件码(标志位):不受影响。
    movem.l D0-D1, -(A7)    入盏
    movem.l (A7)+, D0-D1    出盏



MOVEP    Move Peripheral Data 传递(外围数据???)
    运算:    原操作数 置入 目的操作数
    语法:    MOVEP Dx,(d16,Ay)
                   MOVEP (d16,Ay),Dx
    操作数长度:W、L
    条件码(标志位):不受影响。



MOVEQ    Move Quick 传递(???)
    运算:    立即数 置入 目的操作数
    语法:    MOVEQ #<data>,Dn
    操作数长度:L
    条件码(标志位):    X — 不受影响。
                                        N — 如果结果为负数则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 置0。
                                        C — 置0。



MULS    Signed Multiply 有符号数乘法
    运算:    原操作数×目的操作数 置入 目的操作数
    语法:    MULS.W <ea>,Dn16×16 fi 32
    操作数长度:W、L
    条件码(标志位):    X — 不受影响。
                                        N — 如果结果为负数则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 如果有溢出则置1;其它情况置0。
                                        C — 置0。



MULU    Unsigned Multiply 无符号数乘法
    运算:    原操作数×目的操作数 置入 目的操作数
    语法:    MULU.W <ea>,Dn16×16 fi 32
    操作数长度:W、L
    条件码(标志位):    X — 不受影响。
                                        N — 如果结果为负数则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 如果有溢出则置1;其它情况置0。
                                        C — 置0。    



NBCD    Negate Decimal with Extend 求负(扩展BCD码)
    运算:    0-目的操作数(10进制)-X 置入 目的操作数
    语法:    NBCD <ea>
    操作数长度:B
    条件码(标志位):    X — 置与C位相同。
                                        N — 未定义。
                                        Z — 结果不为零则置0;其它情况不变。
                                        V — 未定义。
                                        C — 如果有进位/借位则置1;其它情况置0。



NEG    Negate 求负
    运算:    0-目的操作数 置入 目的操作数



NEGX    Negate with Extend 求负(扩展)
    运算:    0-目的操作数 置入 目的操作数
    语法:    NEGX <ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 置与C位相同。
                                        N — 如果结果为负数则置1;其它情况置0。
                                        Z — 如果结果不为零则置0;其它情况不变。
                                        V — 如果发生溢出则置1;其它情况置0。
                                        C — 如果有进位/借位则置1;其它情况置0。



NOP    No Operation 空指令
    运算:    None
    语法:    NOP
    操作数长度:Unsized
    条件码(标志位):不受影响。



NOT    Logical Complement 求补
    运算:    目的操作数求补 置入 目的操作数
    语法:    NOT <ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 不受影响。
                                        N — 如果结果为负数则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 置0。
                                        C — 置0。



OR    Inclusive-OR Logical 逻辑或
    运算:    原操作数“或”目的操作数 置入 目的操作数
    语法:    OR <ea>,Dn
                   OR Dn,<ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 不受影响。
                                        N — 最高(有效)位为1则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 置0。
                                        C — 置0。



ORI    Inclusive-OR Immediate 逻辑或(立即数)
    运算:    立即数“或”目的操作数 置入 目的操作数
    语法:    ORI #<data>,<ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 不受影响。
                                        N — 最高(有效)位为1则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 置0。
                                        C — 置0。



ORI to CCR    Inclusive-OR Immediate to CCR 标志器存器、立即数求逻辑或
    运算:    原操作数“或”标志器存器 置入 标志器存器
    语法:    ORI #<data>,CCR
    操作数长度:B
    条件码(标志位):    X — 如果立即数的4位为0则置0;其它情况不变。
                                        N — 如果立即数的3位为0则置0;其它情况不变。
                                        Z — 如果立即数的2位为0则置0;其它情况不变。
                                        V — 如果立即数的1位为0则置0;其它情况不变。
                                        C — 如果立即数的0位为0则置0;其它情况不变。



PEA    Push Effective Address 有效地址压栈
    运算:    动态堆栈指示器-4 置入 动态堆栈指示器;
        有效地址 置入 动态堆栈指示器中的地址
    语法:    PEA <ea>
    操作数长度:L
    条件码(标志位):不受影响。



ROL,ROR        Rotate (Without Extend) 循环移动
    运算:    目的操作数按计数循环移动 置入 目的操作数
    语法:    ROL/ROR Dx,Dy
                  ROL/ROR #<data>,Dy
                  ROL/ROR <ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 不受影响。
                                        N — 最高(有效)位为1则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 置0。
                                        C — 存放最后一位被移出的数字;位移计数为0则置0。



ROXL,ROXR    Rotate with Extend 循环移动(扩展)
    运算:    目的操作数按计数循环移动 置入 目的操作数
    语法:    ROXL/ROXR Dx,Dy
                   ROXL/ROXR #<data>,Dy
                  ROXL/ROXR <ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 存放最后一位被移出的数字。位移计数为0则不受影响。
                                        N — 最高(有效)位为1则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 置0。
                                        C — 存放最后一位被移出的数字;位移计数为0则置入扩展位的值。



RTR    Return and Restore CCR 返回并恢复标志寄存器,即出栈
    运算:    动态堆栈指示器中的地址 置入 标志寄存器;
        动态堆栈指示器+2 置入 动态堆栈指示器;
        动态堆栈指示器中的地址 置入 程序计数器;
        动态堆栈指示器+4 置入 动态堆栈指示器
    语法:    RTR
    操作数长度:Unsized
    条件码(标志位):由堆栈中取值。



RTS    Return from Subroutine 从子程序中返回,即回到主程序
    运算:    动态堆栈指示器中的地址 置入 程序计数器;
        动态堆栈指示器+4 置入 动态堆栈指示器
    语法:    RTS
    操作数长度:Unsized
    条件码(标志位):不受影响。



SBCD    Subtract Decimal with Extend 相减(扩展BCD码)
    运算:    目的操作数(10进制)-原操作数(10进制)-X 置入 目的操作数
    语法:    SBCD Dx,Dy
                  SBCD -(Ax),-(Ay)
    操作数长度:B
    条件码(标志位):    X — 置与C位相同。
                                        N — 未定义。
                                        Z — 结果不为零则置0;其它情况不变。
                                        V — 未定义。
                                        C — 如果有进位/借位则置1;其它情况置0。



Scc    Set According to Condition 按条件置位
    运算:    如果条件成立,目的操作数置1;否则置0
    语法:    Scc <ea>
    操作数长度:B
    条件码(标志位):不受影响。

    相应指令    分支条件(0:顺序执行、1:转移)    英文解释        中文解释

       SHI            !C&&!Z                High            高于置1
       SLS             C||Z                Low or Same        低于或相同置1
       SCC              !C                Carry Clear        无进/借位置1
       SCS               C                Carry Set        有进/借位置1
       SNE              !Z                Not Equal        不为零(不相等)置1
       SEQ               Z                Equal            为零(相等)置1
       SVC              !V                Overflow Clear        无溢出置1
       SVS               V                Overflow Set        有溢出置1
       SPL              !N                Plus            非负数置1
       SMI               N                Minus            负数置1
       SGE              N&&V||!N&&!V            Greater or Equal    大于等于(不小于)置1
       SLT             N&&!V||!N&&V            Less Than        小于置1
       SGT          N&&V&&!Z||!N&&!V&&!Z            Greater Than        大于置1
       SLE          Z||N&&!V||!N&&V            Less or Equal        小于等于(不大于)置1



SUB    Subtract 相减
    运算:    目的操作数-原操作数 置入 目的操作数
    语法:    SUB <ea>,Dn
                   SUB Dn,<ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 置入C位的值。
                                        N — 如果结果为负数则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 如果发生溢出则置1;如果除数为0则为定义;其它情况置0。
                                        C — 如果有进位/借位则置1;其它情况置0。



SUBA    Subtract Address 相减(地址)
    运算:    目的操作数-原操作数 置入 目的操作数
    语法:    SUBA <ea>,An
    操作数长度:W、L
    条件码(标志位):不受影响。



SUBI    Subtract Immediate 相减(立即数)
    运算:    目的操作数-立即数 置入 目的操作数
    语法:    SUBI #<data>,<ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 置入C位的值。
                                        N — 如果结果为负数则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 如果发生溢出则置1;如果除数为0则为定义;其它情况置0。
                                        C — 如果有进位/借位则置1;其它情况置0。



SUBQ    Subtract Quick 相减(???)
    运算:    目的操作数-立即数 置入 目的操作数
    语法:    SUBQ
    操作数长度:B、W、L
    条件码(标志位):    X — 置入C位的值。
                                        N — 如果结果为负数则置1;其它情况置0。
                                        Z — 如果结果为零则置1;其它情况置0。
                                        V — 如果发生溢出则置1;如果除数为0则为定义;其它情况置0。
                                        C — 如果有进位/借位则置1;其它情况置0。



SUBX    Subtract with Extend 相减(扩展)
    运算:    目的操作数-原操作数-X 置入 目的操作数
    语法:    SUBX Dx,Dy
                   SUBX -(Ax),-(Ay)
        操作数长度:B、W、L
        条件码(标志位):    X — 置入C位的值。
                                            N — 如果结果为负数则置1;其它情况置0。
                                            Z — 如果结果为零则置1;其它情况置0。
                                            V — 如果发生溢出则置1;如果除数为0则为定义;其它情况置0。
                                            C — 如果有进位/借位则置1;其它情况置0。



SWAP    Swap Register Halves 数据寄存器高低位数据交换
    运算:    数据寄存器的 31~16位 与 15~0 位交换
    语法:    SWAP Dn
    操作数长度:W
    条件码(标志位):    X — 不受影响。
                                        N — 如果32位的最高(有效)位为1则置1;其它情况置0。
                                        Z — 如果32位的结果为零则置1;其它情况置0。
                                        V — 置0。
                                        C — 置0。



TAS    Test and Set an Operand 测试并置数
    运算:    目的操作数测试 置入 标志寄存器;
        1 置入 目的操作数的7位
    语法:    TAS <ea>
    操作数长度:B
    条件码(标志位):    X — 不受影响。
                                        N — 如果当前操作数最高(有效)位为1则置1;其它情况置0。
                                        Z — 如果操作数为零则置1;其它情况置0。
                                        V — 置0。
                                        C — 置0。



TRAP    Trap 中断
    运算:    1 置入 堆栈寄存器的S位
        管理(控制&中断)堆栈指示器-4 置入 管理堆栈指示器;
        程序计数器 置入 管理堆栈指示器中的地址;
        管理堆栈指示器-2 置入 管理堆栈指示器;
        堆栈寄存器 置入 管理堆栈指示器中的地址;
        地址向量 置入 程序计数器
    语法:    TRAP #<vector>
    操作数长度:Unsized
    条件码(标志位):不受影响。



TRAPcc    Trap on Condition 条件中断
    运算:    条件为真则中断
    语法:    TRAPcc
                  TRAPcc.W #<data>
                  TRAPcc.L #<data>
    操作数长度:Unsized 或 W、L
    条件码(标志位):不受影响。

    相应指令    分支条件(0:顺序执行、1:转移)    英文解释        中文解释

     TRAPHI            !C&&!Z                High            高于中断
     TRAPLS             C||Z                Low or Same        低于或相同中断
     TRAPCC              !C                Carry Clear        无进/借位中断
     TRAPCS               C                Carry Set        有进/借位中断
     TRAPNE              !Z                Not Equal        不为零(不相等)中断
     TRAPEQ               Z                Equal            为零(相等)中断
     TRAPVC              !V                Overflow Clear        无溢出中断
     TRAPVS               V                Overflow Set        有溢出中断
     TRAPPL              !N                Plus            非负数中断
     TRAPMI               N                Minus            负数中断
     TRAPGE              N&&V||!N&&!V            Greater or Equal    大于等于(不小于)中断
     TRAPLT             N&&!V||!N&&V            Less Than        小于中断
     TRAPGT          N&&V&&!Z||!N&&!V&&!Z            Greater Than        大于中断
     TRAPLE          Z||N&&!V||!N&&V            Less or Equal        小于等于(不大于)中断



TRAPV    Trap on Overflow 溢出中断
    运算:    V=1时中断
    语法:    TRAPV
    操作数长度:Unsized
    条件码(标志位):不受影响。



TST    Test an Operand 测试一个操作数
    运算:    目的操作数测试 置入 标志寄存器
    语法:    TST <ea>
    操作数长度:B、W、L
    条件码(标志位):    X — 不受影响。
                                        N — 如果操作数为负数则置1;其它情况置0。
                                        Z — 如果操作数为零则置1;其它情况置0。
                                        V — 置0。
                                        C — 置0。



UNLK    Unlink 解除链接
    运算:    地址寄存器 置入 动态堆栈指示器;
        动态堆栈指示器中的地址 置入 地址寄存器;
        动态堆栈指示器+4 置入 动态堆栈指示器
    语法:    UNLK An
    操作数长度:Unsized
    条件码(标志位):不受影响。



ANDI to SR    AND Immediate to the Status Register 立即数、堆栈寄存器求逻辑与
    运算:    如果管理堆栈为真值,原操作数“与”堆栈寄存器 置入 堆栈寄存器;否则中断
    语法:    ANDI #<data>,SR
    操作数长度:W
    条件码(标志位):    X — 如果立即数的4位为0则置0;其它情况不变。
                                        N — 如果立即数的3位为0则置0;其它情况不变。
                                        Z — 如果立即数的2位为0则置0;其它情况不变。
                                        V — 如果立即数的1位为0则置0;其它情况不变。
                                        C — 如果立即数的0位为0则置0;其它情况不变。



EORI to SR    Exclusive-OR Immediate to the SR 立即数、堆栈寄存器求逻辑异或
    运算:    如果管理堆栈为真值,原操作数“异或”堆栈寄存器 置入 堆栈寄存器;否则中断
    语法;    EORI #<data>,SR
    操作数长度:W
    条件码(标志位):    X — 如果立即数的4位为0则置0;其它情况不变。
                                        N — 如果立即数的3位为0则置0;其它情况不变。
                                        Z — 如果立即数的2位为0则置0;其它情况不变。
                                        V — 如果立即数的1位为0则置0;其它情况不变。
                                        C — 如果立即数的0位为0则置0;其它情况不变。



MOVE to SR    Move to the SR 传递(到堆栈寄存器)
    运算:    如果管理堆栈为真值,原操作数 置入 堆栈寄存器;否则中断
    语法:    MOVE <ea>,SR
    操作数长度:W
    条件码(标志位):按照原操作数置数。



MOVE to USP    Move User Stack Pointer 传递(用户堆栈寄存器)
    运算:    如果管理堆栈为真值,用户堆栈寄存器 置入 地址寄存器
        或地址寄存器 置入 用户堆栈寄存器;否则中断
    语法:    MOVE USP,An
                  MOVE An,USP
    操作数长度:L
    条件码(标志位):不受影响。



ORI to SR    Inclusive-OR Immediate to the SR 立即数、堆栈寄存器求逻辑或
    运算:    如果管理堆栈为真值,原操作数“或”堆栈寄存器 置入 堆栈寄存器;否则中断
    语法:    ORI #<data>,SR
    操作数长度:W
    条件码(标志位):    X — 如果立即数的4位为0则置0;其它情况不变。
                                        N — 如果立即数的3位为0则置0;其它情况不变。
                                        Z — 如果立即数的2位为0则置0;其它情况不变。
                                        V — 如果立即数的1位为0则置0;其它情况不变。
                                        C — 如果立即数的0位为0则置0;其它情况不变。



RESET    Reset External Devices 重置外部设备
    运算:    如果管理堆栈为真值,……;否则中断
    语法:    RESET
    操作数长度:Unsized
    条件码(标志位):不受影响。



RTE    Return from Exception 从异常中返回
    运算:    如果管理堆栈为真值,
            动态堆栈指示器中的地址 置入 堆栈寄存器;
            动态堆栈指示器+2 置入 动态堆栈指示器;
            动态堆栈指示器中的地址 置入 程序控制器;
            动态堆栈指示器+4 置入 动态堆栈指示器;
            Restore State and Deallocate Stack According to (SP) ???
        否则中断
    语法:    RTE
    操作数长度:Unsized
    条件码(标志位):Set according to the condition code bits
            in the status register value restored from the stack.



STOP    load Status Register and Stop
    运算:    如果管理堆栈为真值,立即数 置入 堆栈寄存器,STOP;否则中断
    语法:    STOP #<data>
    操作数长度:Unsized
    条件码(标志位):按照立即数置数。
 


  • 26
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

字节狂徒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值