1、用户可以通过相应的指令来选择一种运算模式。I中断屏蔽位 (I) :该位用于使能 / 禁止除“非屏蔽中断源( NMI )”以外的所有中断源。将该位置 1 , CPU 将忽略中断请求,置 0 , CPU 将接受中断请求。Z零标志位( Z ):数据和算术运算结果标志位。当数据或算术运算结果为 0 时,该位被置 1 ;为其它值时,该位被置 0 。C进位标志( C ):当加法操作中产生进位或减法操作中没有产生借位时,该位被置 1 。此外,移位或循环指令 也会改变该位的值。#dd8 位( BIT )的立即数Label程序标号;程序注释前缀Adr 088 位存储器地址Adr1616 位存储器地址aaaaaa
2、Cycles指令周期数, 1 个 Cycle 的时间为 1 个 CPU 时钟周期,即 1/F SYSSPMC65系列单片机的汇编指令格式规定汇编指令包括四部分,格式如下: 标号 : 操作码 操作数 ; 注释 中的内容为可选项标号:标识了一条指令的位置,可以使用标号作为访问该指令的地址。标号应以字母或下划线 _ 开头(局部标号还可以用问号?开头),以冒号 : 结束;标号的命名可以取数字、字母和下划线的组合,长度为 232 个字符,区分大小写。不要用指令记助符、寄存器名称或系统保留字的字符串作为标号。而宏名可以字母、下划线或百分号 (%) 开头。标号的后缀可以是字母、下划线、问号或井号 # 。操作
3、码: 指令区域,用于写指令。操作数:操作数可以是程序中的数据或地址。当操作码为单字节时,无操作数。当进行立即数寻址时,操作数为一个字节数据,使用一个符号来标识其所在位置。当操作数作为程序地址时,其实就是一个标号。注释:注释可以提高程序的可读性。在注释语句的前面应该加一个分号 ;例如:LDA #5 ;将 8 位立即数 5 载入累加器 ASTA Counter ;将累加器 A 中的数载入变量 Counter 中数制汇编器默认数制为十进制,如果要表示成其它数制,需要给数字加上后缀或前缀。下表列出了各种数制的表达方式。应用时,将其与数值组合即可。二进制以“ % ”为前缀或以“ B ”、“ b ”为后缀
4、10101011B八进制以“ O ”、“ o ”或“ Q ”、“ q ”为后缀253Q十进制以“ D ”或“ d” 为后缀或无后缀171十六进制以“ H ”、“ h” 为后缀或以“ $ ”、“ 0X ”、“ 0x ” 为前缀$AB字符串定义字符串必须放在双引号 (“”) 或单引号 ( ) 内表示,除非语法上另有所指。2.2寻址方式在计算机中,寻找操作数的方法定义为指令的寻址方式,根据这个原则, SPMC65 系列单片机的寻址方式分为以下 11 种: 立即数寻址( Immediate addressing mode ) 绝对寻址( Absolute addressing mode ) 零页寻址(
5、 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 m
6、ode ) 相对寻址( Relative addressing mode ) 立即数寻址( Immediate Addressing Mode )这种寻址方式的操作数以 8 位立即数的形式出现,紧跟在操作码的后面,立即数用“ # ”号表示,以区别直接地址。汇编格式: 操作码 #dd AND #$08立即数寻址过程如 图 2.1 所示,首先 xx 是由累加器 A 提供,这是由 AND 的操作数决定的, 08 就是立即数,然后进行逻辑与操作。由于 AND 操作数是两个字节,所以执行该操作数后 PC 向后移动两个字。就是 mmmm+2 ,以下同。图 2. 1立即数寻址方式示意图绝对寻址用两个字节 (
7、Adr 16) 来 指明目标操作数地址。 操作码 Adr16例子: AND $E030绝对寻址过程如 图 2.2 所示,操作码(指令) AND 的一个操作数从 $E030 指向的存储单元里直接取得。图 2. 2绝对寻址过程示意图零页寻址采用零页(地址范围 $0000$00FF )的低字节来指明操作数地址(高位地址默认为零)。 操作码 Adr08 AND $30零页寻址过程如 图 2.3 所示,操作码(指令) AND 的一个操作数从零页存储单元 $30 中直接取得。图 2. 3零页寻址过程示意图绝对变址寻址使用一个双字节基址和一个变址指针(寄存器 X 或 Y ) 来 指明目标操作数地址。 操作码
8、 Adr 16, X或: 操作码 Adr 16, Y LDA $E500,X绝对变址寻址的过程如 图 2.4 所示,由绝对地址(基址)与变址指针( X 寄存器)的地址相加得到的地址里的数作为操作数。图 2. 4绝对变址寻址过程示意图零页变址寻址使用零页地址作为基址,基址与变址指针(寄存器 X 或 Y )相加 来 指明目标操作数地址。 操作码 Adr 08, X 操作码 Adr 08, Y LDA $75,X零页变址寻址的过程如 图 2.5 所示,由零页地址(基址)与变址指针( X 寄存器)的地址相加得到的地址里的数作为操作数。图 2. 5零页变址寻址过程示意图间接跳转寻址只能用于 JMP 指令
9、中,它用 16 位地址作为程序跳转地址的指针。 操作码 ( Adr 16) JMP ( $F600)如下图所示,间接跳转寻址将 $F600 与 $F601 两单元中的数据组成的 16 位地址 $ppqq 作为 PC 的跳转地址( $pp 、 $qq 为存储器中的数值)。图 2. 6 间接跳转寻址过程示意图变址间接寻址采用“ 8 位地址变址指针 X ”来 指明目标操作数地址。 在此寻址模式下,只能采用 X 寄存器作为变址指针。 操作码 (Adr 08, X) AND ($30, X)变址间接寻址如 图 2.7 所示,首先 $30 与变址指针( X 寄存器)中的值 $63 相加,其结果 $93 作
10、为目标操作数地址的指针,它所指向的数值 $qq 与下一个存储单元中的数值 $pp 共同组成了 16 位的目标操作数地址。地址 $ppqq 指向的内容 $yy 就是目标操作数。图 2. 7变址间接寻址过程示意图间接变址寻址采用“ 8 位地址”来 指明目标操作数的基址,再加上 变址指针( Y 寄存器)作为目标操作数的地址 。 在此寻址模式下,只能采用 Y 寄存器作为变址指针。 操作码 (aa), Y LDA ($20), Y间接变址寻址如 图 2.8 所示,由地址 $20 里的数据 $32 作为基址地址的低 8 位,下一个地址 $21 里的数据 $01 作为基址地址的高 8 位,二者组成的 16
11、位基址 $0132 加上指针( Y 寄存器)中的数据 $15 形成目标操作数地址 $0147 ,目标操作数地址里的数据作为操作数。图 2.8 间接变址寻址隐含寻址是特殊指令对应的特殊寻址方式,它的源操作数和目标操作数的地址都由指令默认。 操作码 TAX ; 将累加器内容传送到 X 寄存器中CLC ; 清除进位标志累加器寻址采用累加器 A 作为指令操作数。 操作码 A ROL A ; 累加器 A 内容循环左移ASL A ; 累加器 A 的内容算数左移相对寻址使用一个 8 位地址来定义目标操作数的 地址,该寻址方式仅用在条件跳转指令中,最大的向前跨度为 127 字节,最大向后跨度为 128 字节。
12、 操作码 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 、
13、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 、
14、 CLR 、 INV 、 TST处理器控制指令开中断、关中断、清除进位、清除负标志等操作CLC 、 CLD 、 CLI 、 CLV 、 SEC 、 SED 、 SEI 、 NOP 数据传送指令数据传送是把源操作数传送到目标地址的过程,是计算机最基本、最重要的一种操作。在实际应用中,数据传送指令使用的比例是最高的。1. LDALDA 的作用是将数据送入累加器 A 中,具体格式参见下表:表 2.3 指令 LDA汇编指令格式操作码字节数指令周期( Cycles)LDA #ddA9H2LDA aaA5H3LDA aa, XB5H4LDA aaaaADHLDA aaaa, XBDH4 *LDA aaaa
15、, YB9HLDA (aa, X)A1H6LDA (aa), YB1H6 * 如果数据寻址时超出了一页的范围,需要再加一个指令周期,一页的大小为 256 个字节。该指令对 P 标志位的影响见下表:表 2 . 4 LDA 指令对 P 标志位的影响!-N:将bit7的值赋给NZ:结果为0时置1 例 :LDA #$F0 ; 把立即数 $F0 传送至累加器 ALDA $F0 ; 把位于 $F0 地址的数据复制到累加器 A2. LDXLDX 的作用是将数据送入 X 寄存器中。具体格式参见下表:表 2 . 5 指令 LDXLDX #ddA2HLDX aaA6HLDX aa, YB6HLDX aaaaAEH
16、LDX aaaa, YBEH* 如果数据寻址时超出了一页的范围 , 需要再加一个指令周期表 2 . 6 LDX 指令对 P 标志位的影响结果为0置1LDX #$F0 ; 把 立即数 $F0 传送至 X 寄存器LDX $F0 ; 把位于 $F0 地址的数据复制到 X 寄存器3. LDYLDY 的作用是将数据送入 Y 寄存器中。表 2 . 7 指令 LDY LDY #ddA0HLDY aaA4HLDY aa, XB4HLDY aaaaACHLDY aaaa, XBCH* 如果数据寻址时超出了一页的范围,需要再加一个指令周期表 2 . 8 LDY 指令对 P 标志位的影响LDY #$F0 ; 把 立
17、即数 $F0 传送至 Y 寄存器LDY $F0 ; 把位于 $F0 地址的数据复制到 Y 寄存器LDX #$12 ; 把立即数 $12 传送至 X 寄存器LDY $E005,X ; 把地址为 $E017($E005+$12) 的数据复制到 Y 寄存器4. STASTA 的作用是将累加器 A 的值送入存储器。表 2 . 9 指令 STA STA aa85HSTA aa, X95HSTA aaaa8DHSTA aaaa, X9DHSTA aaaa, Y99HSTA (aa, X)81HSTA (aa), Y91H该指令对标志寄存器 P 不产生影响。LDA #$12 ; 把立即数 $12 送至累加器
18、STA $78 ; 把累加器中的数据 $12 复制到地址为 $78 的存储单元STXSTX 的作用是将寄存器 X 的值送入存储器中。表 2 . 10 指令 STX STX aa86HSTX aa, Y96HSTX aaaa8EH 把立即数 12 送至寄存器 XSTX $78 ; 把寄存器 X 中的数据 $12 复制到地址为 $78 的存储单元6. STYSTY 的作用是将寄存器 Y 的值送入存储器中。表 2 . 11 指令 STY STY aa84HSTY aa, X94HSTY aaaa8CHLDY #$12 ; 把立即数 $12 送至寄存器 YSTY $78 ; 把寄存器 Y 中的数据 $
19、12 复制到地址为 $78 的存储单元LDX #$10 ; 把立即数 $10 送至寄存器 XSTY $63,X ; 把寄存器 Y 中的数据 $12 复制到地址为 $73 ( $63+$10 )的存储单元7. TAXTAX 的作用是将累加器 A 的值送入寄存器 X 中。表 2 . 12 指令 TAXTAXAAH1表 2 . 13 TAX 指令对 P 标志位的影响N:Z:运算结果为零置1LDA #$17 ; 把立即数 $17 送至累加器 ATAX ; 把累加器 A 中的数值 $17 复制到寄存器 X 中8. TXATXA的作用是将 X 寄存器的值送入累加器 A 中 。参见下表:表 2 . 14 指
20、令 TXATXA8AH表 2 . 15 TXA 指令对 P 标志位的影响LDX #$17 ; 把立即数 $17 送至寄存器 XTXA ; 把寄存器 X 中的数值 $17 复制到累加器 A 中9. TAYTAY 的作用是将累加器 A 的值送入寄存器 Y 中。表 2 . 16 指令 TAYTAYA8H表 2 . 17 TAY 指令对 P 标志位的影响TAY ;10. TYATYA 的作用是将 Y 寄存器的值传送到累加器 A 中。表 2 . 18 指令 TYATYA98H表 2 . 19 TYA 指令对 P 标志位的影响LDY #$17 ; 把立即数 $17 送至寄存器 YTYA ; 把寄存器 Y
21、中的数值 $17 复制到累加器 A 中11. TXSTXS的作用是 将 X 寄存器的值传送到堆栈指针 SP 的低 8 位中 。表 2 . 20 指令 TXS TXS9AHTXS 指令对标志寄存器 P 不产生影响。LDX #$FC ; 把立即数 $FC 送至寄存器 XTXS ; 把 X 中的值赋给堆栈指针 SP 的低 8 位, SP 的值将变为 $FC12. TSXTSX 的作用是将堆栈指针 SP 中的值送入 X 寄存器中。表 2 . 21 TSX 指令对 P 标志位的影响 TSXBAH表 2 . 22 TAY 指令对 P 标志位的影响13. PHAPHA的作用是 将累加器 A 的值压入堆栈 。该指令产生的操作是:首先将累加器 A的值传送到堆栈指针SP所指向的存储单元,然后使SP的值减小1。表 2 . 23 指令 PHA 操
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1