单片机指令系统.doc_第1页
单片机指令系统.doc_第2页
单片机指令系统.doc_第3页
单片机指令系统.doc_第4页
单片机指令系统.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SPMC65系列单片机指令系统内容索引2.1 符号约定2.4 常用伪指令2.2 寻址方式 2.5 常用程序实例2.3 指令系统 2.1符号约定:SPMC65 系列单片机指令按其功能可划分为: 数据传送指令,包括立即数到寄存器、寄存器到寄存器、寄存器到存储器、存储器到寄存器的数据传送操作; 算术运算,包括加、减、比较运算; 逻辑运算,包括与、或、异或、移位等操作; 位操作,包括位测试、位置位、位清除、位取反等操作; 转移指令,包括条件转移、无条件转移、中断返回、子程序调用等操作; 控制指令 ,如开中断、关中断、清除进位、清除负标志等操作;为了将指令的用法讲解清楚,下表将指令系统叙述过程中要用到的符号列出。表 2. 1 指令系统叙述过程中要用到的符号A累加器 (A)XX 寄存器YY 寄存器PC程序指针 (PC)SP堆栈指针 (SP)P状态寄存器 (P)N负标志位( N ):该位指示一个数据或者运算结果的 bit7 的状态。用户可以通过该位进行条件跳转。V溢出标志位 (V) :该位仅用于有符号数的算术运算。如果两个同符号数相加或两个不同符号数相减,结果大于 127 或者小于 -128 ,该位置 1 。D十进制模式标志位 (D) :在 SPMC65 系列芯片中有两种算术运算模式:二进制模式和十进制模式,该位标明了当前的运算模式。用户可以通过相应的指令来选择一种运算模式。I中断屏蔽位 (I) :该位用于使能 / 禁止除“非屏蔽中断源( NMI )”以外的所有中断源。将该位置 1 , CPU 将忽略中断请求,置 0 , CPU 将接受中断请求。Z零标志位( Z ):数据和算术运算结果标志位。当数据或算术运算结果为 0 时,该位被置 1 ;为其它值时,该位被置 0 。C进位标志( C ):当加法操作中产生进位或减法操作中没有产生借位时,该位被置 1 。此外,移位或循环指令 也会改变该位的值。#dd8 位( BIT )的立即数Label程序标号;程序注释前缀Adr 088 位存储器地址Adr1616 位存储器地址aa8 位存储器地址aaaa16 位存储器地址Cycles指令周期数, 1 个 Cycle 的时间为 1 个 CPU 时钟周期,即 1/F SYSSPMC65系列单片机的汇编指令格式规定汇编指令包括四部分,格式如下: 标号 : 操作码 操作数 ; 注释 中的内容为可选项标号:标识了一条指令的位置,可以使用标号作为访问该指令的地址。标号应以字母或下划线 _ 开头(局部标号还可以用问号?开头),以冒号 : 结束;标号的命名可以取数字、字母和下划线的组合,长度为 232 个字符,区分大小写。不要用指令记助符、寄存器名称或系统保留字的字符串作为标号。而宏名可以字母、下划线或百分号 (%) 开头。标号的后缀可以是字母、下划线、问号或井号 # 。操作码: 指令区域,用于写指令。操作数:操作数可以是程序中的数据或地址。当操作码为单字节时,无操作数。当进行立即数寻址时,操作数为一个字节数据,使用一个符号来标识其所在位置。当操作数作为程序地址时,其实就是一个标号。注释:注释可以提高程序的可读性。在注释语句的前面应该加一个分号 ; 。例如:LDA #5 ;将 8 位立即数 5 载入累加器 ASTA Counter ;将累加器 A 中的数载入变量 Counter 中数制汇编器默认数制为十进制,如果要表示成其它数制,需要给数字加上后缀或前缀。下表列出了各种数制的表达方式。应用时,将其与数值组合即可。二进制以“ % ”为前缀或以“ B ”、“ b ”为后缀10101011B八进制以“ O ”、“ o ”或“ Q ”、“ q ”为后缀253Q十进制以“ D ”或“ d” 为后缀或无后缀171十六进制以“ H ”、“ h” 为后缀或以“ $ ”、“ 0X ”、“ 0x ” 为前缀$AB字符串定义字符串必须放在双引号 (“”) 或单引号 ( ) 内表示,除非语法上另有所指。2.2寻址方式在计算机中,寻找操作数的方法定义为指令的寻址方式,根据这个原则, SPMC65 系列单片机的寻址方式分为以下 11 种: 立即数寻址( Immediate addressing mode ) 绝对寻址( Absolute addressing mode ) 零页寻址( Zero page addressing mode ) 绝对变址寻址( Absolute indexed addressing mode ) 零页变址寻址( Zero page indexed addressing mode ) 间接跳转寻址( Indirect addressing mode ) 变址间接寻址( Indexed indirect addressing mode ) 间接变址寻址( Indirect indexed addressing mode ) 隐含寻址( Implied addressing mode ) 累加器寻址( Accumulator addressing mode ) 相对寻址( Relative addressing mode ) 立即数寻址( Immediate Addressing Mode )这种寻址方式的操作数以 8 位立即数的形式出现,紧跟在操作码的后面,立即数用“ # ”号表示,以区别直接地址。汇编格式: 操作码 #dd例如: AND #$08立即数寻址过程如 图 2.1 所示,首先 xx 是由累加器 A 提供,这是由 AND 的操作数决定的, 08 就是立即数,然后进行逻辑与操作。由于 AND 操作数是两个字节,所以执行该操作数后 PC 向后移动两个字。就是 mmmm+2 ,以下同。图 2. 1立即数寻址方式示意图 绝对寻址( Absolute addressing mode )绝对寻址用两个字节 (Adr 16) 来 指明目标操作数地址。汇编格式: 操作码 Adr16例子: AND $E030绝对寻址过程如 图 2.2 所示,操作码(指令) AND 的一个操作数从 $E030 指向的存储单元里直接取得。图 2. 2绝对寻址过程示意图 零页寻址( Zero page addressing mode )零页寻址采用零页(地址范围 $0000$00FF )的低字节来指明操作数地址(高位地址默认为零)。汇编格式: 操作码 Adr08例子: AND $30零页寻址过程如 图 2.3 所示,操作码(指令) AND 的一个操作数从零页存储单元 $30 中直接取得。图 2. 3零页寻址过程示意图 绝对变址寻址( Absolute indexed addressing mode )绝对变址寻址使用一个双字节基址和一个变址指针(寄存器 X 或 Y ) 来 指明目标操作数地址。汇编格式: 操作码 Adr 16, X或: 操作码 Adr 16, Y例子: LDA $E500,X绝对变址寻址的过程如 图 2.4 所示,由绝对地址(基址)与变址指针( X 寄存器)的地址相加得到的地址里的数作为操作数。图 2. 4绝对变址寻址过程示意图 零页变址寻址( Zero page indexed addressing mode )零页变址寻址使用零页地址作为基址,基址与变址指针(寄存器 X 或 Y )相加 来 指明目标操作数地址。汇编格式: 操作码 Adr 08, X或: 操作码 Adr 08, Y例子: LDA $75,X零页变址寻址的过程如 图 2.5 所示,由零页地址(基址)与变址指针( X 寄存器)的地址相加得到的地址里的数作为操作数。图 2. 5零页变址寻址过程示意图 间接跳转寻址( Indirect addressing mode )间接跳转寻址只能用于 JMP 指令中,它用 16 位地址作为程序跳转地址的指针。汇编格式: 操作码 ( Adr 16)例子: JMP ( $F600)如下图所示,间接跳转寻址将 $F600 与 $F601 两单元中的数据组成的 16 位地址 $ppqq 作为 PC 的跳转地址( $pp 、 $qq 为存储器中的数值)。图 2. 6 间接跳转寻址过程示意图 变址间接寻址( Indexed indirect addressing mode )变址间接寻址采用“ 8 位地址变址指针 X ”来 指明目标操作数地址。 在此寻址模式下,只能采用 X 寄存器作为变址指针。汇编格式: 操作码 (Adr 08, X)例子: AND ($30, X)变址间接寻址如 图 2.7 所示,首先 $30 与变址指针( X 寄存器)中的值 $63 相加,其结果 $93 作为目标操作数地址的指针,它所指向的数值 $qq 与下一个存储单元中的数值 $pp 共同组成了 16 位的目标操作数地址。地址 $ppqq 指向的内容 $yy 就是目标操作数。图 2. 7变址间接寻址过程示意图 间接变址寻址( Indirect indexed addressing mode )间接变址寻址采用“ 8 位地址”来 指明目标操作数的基址,再加上 变址指针( Y 寄存器)作为目标操作数的地址 。 在此寻址模式下,只能采用 Y 寄存器作为变址指针。 汇编格式: 操作码 (aa), Y例子: LDA ($20), Y间接变址寻址如 图 2.8 所示,由地址 $20 里的数据 $32 作为基址地址的低 8 位,下一个地址 $21 里的数据 $01 作为基址地址的高 8 位,二者组成的 16 位基址 $0132 加上指针( Y 寄存器)中的数据 $15 形成目标操作数地址 $0147 ,目标操作数地址里的数据作为操作数。图 2.8 间接变址寻址 隐含寻址( Implied addressing mode )隐含寻址是特殊指令对应的特殊寻址方式,它的源操作数和目标操作数的地址都由指令默认。汇编格式: 操作码 例子: TAX ; 将累加器内容传送到 X 寄存器中CLC ; 清除进位标志 累加器寻址( Accumulator addressing mode )累加器寻址采用累加器 A 作为指令操作数。汇编格式: 操作码 A 例子: ROL A ; 累加器 A 内容循环左移ASL A ; 累加器 A 的内容算数左移 相对寻址( Relative addressing mode )相对寻址使用一个 8 位地址来定义目标操作数的 地址,该寻址方式仅用在条件跳转指令中,最大的向前跨度为 127 字节,最大向后跨度为 128 字节。汇编格式: 操作码 Adr 08例子: BCC M127BCC P128相对地址寻址过程如 图 2.9 所示,其中 M127 与 P128 都是标号图 2. 9 相对寻址过程示意图2.3 指令系统 指令概述指令依照其用途可分为六类:数据传送类指令、算术运算类指令、逻辑运算类指令、位操作指令、转移类指令、控制类指令。它们的具体分类及用途详见 表 2.2 。表 2. 2 SPMC65 指令分类列表类别用途指令数据传送指令立即数到寄存器、寄存器到寄存器、寄存器到存储器、存储器到寄存器的数据传送操作LDA 、 LDX 、 LDY 、 STA 、 STX 、 STY 、 TAX 、 TXA 、 TAY 、 TYA 、 TXS 、 TSX 、 PHA 、 PHP 、 PLA 、 PLP算术运算指令加、减、比较运算ADC 、 SBC 、 DEC 、 DEX 、 DEY 、 INC 、 INX 、 INY 、 CMP 、 CPX 、 CPY逻辑运算指令与、或、异或、移位等操作AND 、 ORA 、 EOR 、 ASL 、 LSR 、 ROL 、 ROR 、 BIT控制转移指令条件转移、无条件转移、中断返回、子程序调用等操作BCS 、 BCC 、 BEQ 、 BNE 、 BMI 、 BPL 、 BVS 、 BVC 、 JMP 、 JSR 、 RTS 、 RTI位操作指令位置位、位清除、位取反、位测试等操作SET 、 CLR 、 INV 、 TST处理器控制指令开中断、关中断、清除进位、清除负标志等操作CLC 、 CLD 、 CLI 、 CLV 、 SEC 、 SED 、 SEI 、 NOP 数据传送指令数据传送是把源操作数传送到目标地址的过程,是计算机最基本、最重要的一种操作。在实际应用中,数据传送指令使用的比例是最高的。1. LDALDA 的作用是将数据送入累加器 A 中,具体格式参见下表:表 2.3 指令 LDA汇编指令格式操作码字节数指令周期( Cycles)LDA #ddA9H22LDA aaA5H23LDA aa, XB5H24LDA aaaaADH34LDA aaaa, XBDH34 *LDA aaaa, YB9H34 *LDA (aa, X)A1H26LDA (aa), YB1H26 * 如果数据寻址时超出了一页的范围,需要再加一个指令周期,一页的大小为 256 个字节。该指令对 P 标志位的影响见下表:表 2 . 4 LDA 指令对 P 标志位的影响NVDIZC!-!-N:将bit7的值赋给NZ:结果为0时置1 例 :LDA #$F0 ; 把立即数 $F0 传送至累加器 ALDA $F0 ; 把位于 $F0 地址的数据复制到累加器 A2. LDXLDX 的作用是将数据送入 X 寄存器中。具体格式参见下表:表 2 . 5 指令 LDX汇编指令格式操作码字节数指令周期( Cycles)LDX #ddA2H22LDX aaA6H23LDX aa, YB6H24LDX aaaaAEH34LDX aaaa, YBEH34 * 如果数据寻址时超出了一页的范围 , 需要再加一个指令周期该指令对 P 标志位的影响见下表:表 2 . 6 LDX 指令对 P 标志位的影响NVDIZC!-!-N:将bit7的值赋给NZ:结果为0置1 例 :LDX #$F0 ; 把 立即数 $F0 传送至 X 寄存器LDX $F0 ; 把位于 $F0 地址的数据复制到 X 寄存器3. LDYLDY 的作用是将数据送入 Y 寄存器中。具体格式参见下表:表 2 . 7 指令 LDY 汇编指令格式操作码字节数指令周期( Cycles)LDY #ddA0H22LDY aaA4H23LDY aa, XB4H24LDY aaaaACH34LDY aaaa, XBCH34 * 如果数据寻址时超出了一页的范围,需要再加一个指令周期该指令对 P 标志位的影响见下表:表 2 . 8 LDY 指令对 P 标志位的影响NVDIZC!-!-N:将bit7的值赋给NZ:结果为0置1 例 :LDY #$F0 ; 把 立即数 $F0 传送至 Y 寄存器LDY $F0 ; 把位于 $F0 地址的数据复制到 Y 寄存器LDX #$12 ; 把立即数 $12 传送至 X 寄存器LDY $E005,X ; 把地址为 $E017($E005+$12) 的数据复制到 Y 寄存器4. STASTA 的作用是将累加器 A 的值送入存储器。具体格式参见下表:表 2 . 9 指令 STA 汇编指令格式操作码字节数指令周期( Cycles)STA aa85H23STA aa, X95H24STA aaaa8DH34STA aaaa, X9DH34STA aaaa, Y99H34STA (aa, X)81H26STA (aa), Y91H26该指令对标志寄存器 P 不产生影响。 例 :LDA #$12 ; 把立即数 $12 送至累加器STA $78 ; 把累加器中的数据 $12 复制到地址为 $78 的存储单元STXSTX 的作用是将寄存器 X 的值送入存储器中。具体格式参见下表:表 2 . 10 指令 STX 汇编指令格式操作码字节数指令周期( Cycles)STX aa86H23STX aa, Y96H24STX aaaa8EH34该指令对标志寄存器 P 不产生影响。 例 :LDX #$12 ; 把立即数 12 送至寄存器 XSTX $78 ; 把寄存器 X 中的数据 $12 复制到地址为 $78 的存储单元6. STYSTY 的作用是将寄存器 Y 的值送入存储器中。具体格式参见下表:表 2 . 11 指令 STY 汇编指令格式操作码字节数指令周期( Cycles)STY aa84H23STY aa, X94H24STY aaaa8CH34该指令对标志寄存器 P 不产生影响。 例 :LDY #$12 ; 把立即数 $12 送至寄存器 YSTY $78 ; 把寄存器 Y 中的数据 $12 复制到地址为 $78 的存储单元LDX #$10 ; 把立即数 $10 送至寄存器 XSTY $63,X ; 把寄存器 Y 中的数据 $12 复制到地址为 $73 ( $63+$10 )的存储单元7. TAXTAX 的作用是将累加器 A 的值送入寄存器 X 中。具体格式参见下表:表 2 . 12 指令 TAX汇编指令格式操作码字节数指令周期( Cycles)TAXAAH12该指令对 P 标志位的影响见下表:表 2 . 13 TAX 指令对 P 标志位的影响NVDIZC!-!-N:将bit7的值赋给NZ:运算结果为零置1 例 :LDA #$17 ; 把立即数 $17 送至累加器 ATAX ; 把累加器 A 中的数值 $17 复制到寄存器 X 中8. TXATXA的作用是将 X 寄存器的值送入累加器 A 中 。参见下表: 表 2 . 14 指令 TXA汇编指令格式操作码字节数指令周期( Cycles)TXA8AH12该指令对 P 标志位的影响见下表:表 2 . 15 TXA 指令对 P 标志位的影响NVDIZC!-!-N:将bit7的值赋给NZ:运算结果为零置1 例 :LDX #$17 ; 把立即数 $17 送至寄存器 XTXA ; 把寄存器 X 中的数值 $17 复制到累加器 A 中9. TAYTAY 的作用是将累加器 A 的值送入寄存器 Y 中。具体格式参见下表:表 2 . 16 指令 TAY汇编指令格式操作码字节数指令周期( Cycles)TAYA8H12该指令对 P 标志位的影响见下表:表 2 . 17 TAY 指令对 P 标志位的影响NVDIZC!-!-N:将bit7的值赋给NZ:运算结果为零置1 例 :LDA #$17 ; 把立即数 $17 送至累加器 ATAY ; 把累加器 A 中的数值 $17 复制到寄存器 X 中10. TYATYA 的作用是将 Y 寄存器的值传送到累加器 A 中。具体格式参见下表: 表 2 . 18 指令 TYA汇编指令格式操作码字节数指令周期( Cycles)TYA98H12该指令对 P 标志位的影响见下表:表 2 . 19 TYA 指令对 P 标志位的影响NVDIZC!-!-N:将bit7的值赋给NZ:运算结果为零置1 例 :LDY #$17 ; 把立即数 $17 送至寄存器 YTYA ; 把寄存器 Y 中的数值 $17 复制到累加器 A 中11. TXSTXS的作用是 将 X 寄存器的值传送到堆栈指针 SP 的低 8 位中 。具体格式参见下表: 表 2 . 20 指令 TXS 汇编指令格式操作码字节数指令周期( Cycles)TXS9AH12TXS 指令对标志寄存器 P 不产生影响。 例 :LDX #$FC ; 把立即数 $FC 送至寄存器 XTXS ; 把 X 中的值赋给堆栈指针 SP 的低 8 位, SP 的值将变为 $FC12. TSXTSX 的作用是将堆栈指针 SP 中的值送入 X 寄存器中。具体格式参见下表:表 2 . 21 TSX 指令对 P 标志位的影响 汇编指令格式操作码字节数指令周期( Cycles)TSXBAH12该指令对 P 标志位的影响见下表:表 2 . 22 TAY 指令对 P 标志位的影响NVDIZC!-!-N:将bit7的值赋给NZ:运算结果为零置113. PHAPHA的作用是 将累加器 A 的值压入堆栈 。该指令产生的操作是:首先将累加器 A的值传送到堆栈指针SP所指向的存储单元,然后使SP的值减小1。具体格式参见下表: 表 2 . 23 指令 PHA 汇编指令格式操作码字节数指令周期( Cycles)PHA48H13该指令对标志寄存器 P 不产生影响。 例 :LDX #$FF ; X ? $FF 立即数 0xFF( 即 $FF) 载入寄存器 XTXS ; SP ? $FF, 立即数 0xFF( 即 $FF) 载入堆栈寄存器 SP, 堆栈指针指向 $01FFLDA #$35 ; A ? $35PHA ; $1FF ? $35, SP ? SP - 1, 此时 $35 被传送到 $01FF 单元, SP 的值变为 $1FE14. PHPPHP的作用是 将状态标志寄存器的值压入堆栈, 主要作用是保护现场。该指令产生的操作是:首先将标志寄存器 P的值传送到堆栈指针SP所指向的存储单元,然后使SP的值减小1。具体格式参见下表: 表 2 . 24 指令 PHP汇编指令格式操作码字节数指令周期( Cycles)PHP08H13该指令对标志寄存器 P 不产生影响。15. PLAPLA的作用是 将堆栈内容弹出给 A 。该指令产生的操作是:首先使堆栈指针 SP 的值增加 1 ,然后把 SP 指向的存储单元中的数值传送给累加器 A 。 具体格式参见下表: 表 2 . 25 指令 PLA汇编指令格式操作码字节数指令周期( Cycles)PLA68H14该指令对 P 标志位的影响见下表:表 2 . 26 PLA 指令对 P 标志位的影响NVDIZC!-!-N:将bit7的值赋给NZ:运算结果为零置1 例 :LDX #$FF ; X ? $FF 立即数 0xFF( 即 $FF) 载入寄存器 XTXS ; SP ? $FF 立即数 0xFF( 即 $FF) 载入堆栈寄存器 SP, 堆栈指针指向 $01FFLDA #$35 ; A ? $35PHA ; SP ? $35, SP ? SP 1, 此时 $35 被传送到 $01FF 单元, SP 的值变为 $FELDA #$78 ; A ? $78PLA ; SP ? SP + 1, A ? SP, 此时 SP 变为 $FF , $01FF 单元中的数值 $35 被传; 送至累加器 A16. PLPPLP的作用是 将堆栈中的内容弹出给状态标志寄存器 P 。该指令首先将堆栈指针 SP 的值增加 1 ,然后将 SP 指向的存储单元中的数值赋给标志寄存器 P 。 具体格式参见下表: 表 2 . 27 指令 PLP汇编指令格式操作码字节数指令周期( Cycles)PLP28H14该指令对 P 标志位的影响见下表:表 2 . 28 PLP 指令对 P 标志位的影响NVDIZC!PLP指令影响所有P标志。 算术运算指令SPMC65 的算术运算指令主要包括带进位加法、减法,寄存器或存储器的自增、自减,以及比较运算指令。1. ADCADC 是累加器 A 的带进位加法指令,该指令将累加器 A 中的数值与指定的操作数相加,再加上进位标志 C 的值,得到的结果赋给累加器 A 。具体格式参见下表:表 2 . 29 指令 ADC汇编指令格式操作码字节数指令周期(Cycles)ADC #dd69H22ADC aa65H23ADC aa, X75H24ADC aaaa6DH34ADC aaaa, X7DH34*ADC aaaa, Y79H34*ADC (aa, X)61H26ADC (aa), Y71H26* 如果数据寻址时超出了一页的范围,需要再加一个指令周期该指令对 P 标志位的影响见下表:表 2 . 30 指令 ADC 对 P 标志位的影响NVDIZC!*-!N:将bit7的值赋给NV:仅用于有符号数算术运算,两个同符号数相加或异符号数相减,结果大于127或小于-128时,该位置1Z:结果为0时置1C:最高位产生进位时,该位被置1D:*为1表示当前处于十进制模式 例 1 :LDA #$45 ; A ? $45CLC ; 将进位标志 C 设置为 0 ,参见 2.3.7 节关于 CLC 指令的介绍ADC #$32 ; A ? A + $32 + C ,此时累加器 A 的值变为 $77 , N=0, V=0, Z=0, C=0 例 2 :LDA #$25 ; A ? $25SEC ; 将进位标志 C 设置为 1 ,参见 2.3.7 节关于 SEC 指令的介绍ADC #$18 ; A ? A + $18 + C ,此时累加器 A 的值变为 $3E , N=0, V=0, Z=0, 由于未发; 生进位, C 的值变为 0 例 3 :LDA #$45 ; A ? $45STA $68 ; $68 ? A ,该句将 $45 传送到地址为 $68 的存储单元 CLC ; 将进位标志 C 设置为 0 ,参见 2.3.7 节关于 CLC 指令的介绍LDA #$72 ; A ? $72ADC $68 ; A ? A + $68 + C ,即 ($72 + $45 + 0) ,此时累加器 A 的值变为 $B7 , Z=0 ,; C=0 ,由于相当于两个同符号数相加,结果大于 127 ,所以 V=1 ,由于结果; 最高位为 1 ,所以 N=1 例 4 :SED ; 将十进制模式标志 D 设置为 1 ,切换到十进制运算模式,参见 2.3.7 节关于 SED; 指令的介绍LDA #$25 ; A ? $25SEC ; 将进位标志 C 设置为 1 ,参见 2.3.7 节关于 SEC 指令的介绍ADC #$18 ; 十进制运算, A ? (BCD)A + (BCD)$18 + C ,累加器 A 的值变为 $44 , C=0,; N=0, Z=0, V=0 ,可与例 2 对比2. SBCSBC 是累加器 A 的带借位减法指令,该指令将累加器 A 中的数值与指定的操作数相减,若进位标志 C 的值是 0 则再减去 1 ,得到的结果赋给累加器 A ,即 A ? A - data - 。具体格式参见下表:表 2 . 31 指令 SBC汇编指令格式操作码字节数指令周期( Cycles)SBC #ddE9H22SBC aaE5H23SBC aa, XF5H24SBC aaaaEDH34SBC aaaa, XFDH34 *SBC aaaa, YF9H34 *SBC (aa, X)E1H26SBC (aa), YF1H26 * 如果数据寻址时超出了一页的范围,需要再加一个指令周期该指令对 P 标志位的影响见下表:表 2 . 32 指令 SBC 对 P 标志位的影响NVDIZC!*-!N:将bit7的值赋给NV:仅用于有符号数算术运算,两个同符号数相加或异符号数相减,结果大于127或小于-128时,该位置1Z:结果为0时置1C: 计算过程未发生借位则C置1,发生借位则C置0D: *为1表示当前处于十进制模式 例 1 :LDA #$45 ; A ? $45CLC ; 将进位标志 C 设置为 0 ,参见 2.3.7 节关于 CLC 指令的介绍SBC #$32 ; A ? A - $32 - ,此时累加器 A 的值变为 $12 , N=0, V=0, Z=0, 由于未发生; 借位,所以 C=1 例 2 :LDA #$39 ; A ? $39SEC ; 将进位标志 C 设置为 1 ,参见 2.3.7 节关于 SEC 指令的介绍SBC #$47 ; A ? A - $47 - ,此时累加器 A 的值变为 $F2 (借位,相当于 $139-$47 ), V=0,; Z=0, 由于发生了借位,所以 C=0 ,由于结果的 bit7 为 1 ,所以 N=1 例 3 :LDA #$62 ; A ? $62STA $68 ; $68 ? A ,该句将 $62 传送到地址为 $68 的存储单元SEC ; 将进位标志 C 设置为 1 ,参见 2.3.7 节关于 SEC 指令的介绍LDA #$94 ; A ? $94SBC $68 ; A ? A $68 - ,即 ($94 - $62 - 0) ,此时累加器 A 的值变为 $32 , Z=0, N=0,; 由于未发生借位,所以 C=1 ,由于相当于两个不同符号数相减( $94 作为有符; 号数使用时相当于 -108 10 , $68 相当于 98 10 )结果小于 -128 10 ,所以 V=1 例 4 :SED ; 将十进制模式标志 D 设置为 1 ,切换到十进制运算模式,参见 2.3.7 节关于 SED; 指令的介绍LDA #$39 ; A ? $39SEC ; 将进位标志 C 设置为 1 ,参见 2.3.7 节关于 SEC 指令的介绍SBC #$47 ; 十进制运算, A ? (BCD)A - (BCD)$47 - ,累加器 A 的值变为 $92 (发生; 借位,相当于 139 47 - 0 ), C=0, Z=0, V=0, N=1 (结果的最高位为 1 ),可; 以与例 2 对比。3. DECDEC 的作用是对存储器中的数值进行减 1操作 , 具体格式参见下表:表 2 . 33 指令 DEC汇编指令格式操作码字节数指令周期( Cycles)DEC aaC6H25DEC aa, XD6H26DEC aaaaCEH36DEC aaaa, XDEH36该指令对 P 标志位的影响见下表:表 2 . 34 指令 DEC 对 P 标志位的影响NVDIZC!-!-N:将bit7的值赋给NZ:结果为0置1 例 1 :LDA #$45 ; A ? $45STA $68 ; $68 ? A ,此时 $68 存储单元内的数值是 $45DEC $68 ; $68 ? $68 1 ,此时 $68 存储单元内的数值变为 $44 例 2 :SED ; 将十进制模式标志 D 设置为 1 ,切换到十进制运算模式,参见 2.3.7 节关于 SED; 指令的介绍LDA #$30 ; A ? $30LDX #$12 ; X ? $12STA $63,X ; $63 + X ? A ,此时 $30 被传送到 $75 存储单元中DEC $63,X ; $63 + X ? $63 + X 1 ,此时 $75 存储单元内的数值变为 $2F ,证明十进; 制运算模式对 DEC 指令无效。4. DEXDEX 的作用是使 X 寄存器内的数值减 1 , 具体格式参见下表:表 2 . 35 指令 DEX汇编指令格式操作码字节数指令周期( Cycles)DEXCAH12该指令对 P 标志位的影响见下表:表 2 . 36 指令 DEX 对 P 标志位的影响NVDIZC!-!-N:将bit7的值赋给NZ:结果为0置1 例 :LDX #$36 ; X ? $36DEX ; X ? X 1 ,此时寄存器 X 内的数值变为 $355. DEYDEY 的作用是使 Y 寄存器内的数值减 1 , 具体格式参见下表:表 2 . 37 指令 DEY汇编指令格式操作码字节数指令周期( Cycles)DEY88H12该指令对 P 标志位的影响见下表:表 2 . 38 指令 DEY 对 P 标志位的影响NVDIZC!-!-N:将bit7的值赋给NZ:结果为0置1 例 :LDY #$00 ; Y ? $00 , N=0, Z=1DEY ; Y ? Y 1 ,此时寄存器 Y 内的数值变为 $FF , N=1,Z=06. INCINC 的作用是对存储器中的数值进行加 1操作 , 具体格式参见下表:表 2 . 39 指令 INC汇编指令格式操作码字节数指令周期( Cycles)INC aaE6H25INC aa, XF6H26INC aaaaEEH36INC aaaa, XFEH36该指令对 P 标志位的影响见下表:表 2 . 40 指令 INC 对 P 标志位的影响NVDIZC!-!-N:将bit7的值赋给NZ:结果为0置1 例 1 :LDA #$45 ; A ? $45STA $68 ; $68 ? A ,此时 $68 存储单元内的数值是 $45INC $68 ; $68 ? $68 + 1 ,此时 $68 存储单元内的数值变为 $46 例 2 :LDA #$FF ; A ? $FFLDX #$12 ; X ? $12STA $63,X ; $63 + X ? A ,此时 $FF 被传送到 $75 存储单元中INC $63,X ; $63 + X ? $63 + X + 1 ,此时 $75 存储单元内的数值变为 $007. INXINX 的作用是使 X 寄存器内的数值加 1 ,具体格式参见下表:表 2 . 41 指令 INX汇编指令格式操作码字节数指令周期( Cycles)INXE8H12该指令对 P 标志位的影响见下表:表 2 . 42 指令 INX 对 P 标志位的影响NVDIZC!-!-N:将bit7的值赋给NZ:结果为0置1 例 :LDX #$36 ; X ? $36INX ; X ? X + 1 ,此时寄存器 X 内的数值变为 $378. INYINY 的作用是使 Y 寄存器内的数值加 1 ,具体格式参见下表:表 2 . 43 指令 INY汇编指令格式操作码字节数指令周期( Cycles)INYC8H12该指令对 P 标志位的影响见下表:NVDIZC!-!-N:将bit7的值赋给NZ:结果为0置1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论