资源描述
5.3 指令系统
5.3.1 数据传送类指令
(1)取数指令
取数指令的功能是取出存储器中的数放入寄存器A、X、HX中。同时按取出的数来改变N、Z标志,当取出的数为负(最高位为1)时,则负标志位N=1,当取出的数为0时,则零标志位Z=1。对其它标志位没有影响。LD是Load的简写,随后的字母是CPU内部寄存器名(LD与寄存器名之间没有空格)。
编号 指令 操作 寻址方式
(1) LDA #opr8 #opr8 → A IMM
(2) LDA addr8 (addr8) → A DIR
(3) LDA addr16 (addr16) → A EXT
(4) LDA addr16,X (addr16+HX) → A IX2
(5) LDA addr8,X (addr8+HX)→ A IX1
(6) LDA ,X (HX) → A IX
(7) LDA addr8,SP (addr8+SP)→ A SP1
(8) LDA addr16,SP (addr16+SP)→A SP2
(9) LDX #opr8 #opr8 → X IMM
(10) LDX addr8 (addr8) → X DIR
(11) LDX addr16 (addr16) → X EXT
(12) LDX addr16,X (addr16+HX) → X IX2
(13) LDX addr8,X (addr8+HX)→ X IX1
(14) LDX ,X (HX) → X IX
(15) LDX addr8,SP (addr8+SP)→X SP1
(16) LDX addr16,SP (addr16+SP)→X SP2
(17) LDHX #opr16 #opr16 → HX IMM
(18) LDHX addr8 (addr8: addr8+1)→HX DIR
特别说明:addr8是指8位地址,或指在地址处于第0页(地址高8位为0)的变量,addr16是指16位地址,或指在地址处于非第0页(地址高8位不为0)的变量,实际编程时尽可能把常用的内存变量开辟在第0页,减少汇编后的程序长度。但把变量开辟在哪一页,对程序无明显影响。
LDA、LDX是取一个字节的操作,均有8种寻址方式。LDHX是取两个字节的操作,只有2种寻址方式。
LDHX #$36EF ;把十六进制数36EF放入HX中
LDHX $0058 ;把$0058、$0059两个存储器单元的内容取到HX中
特别说明:指令LDHX $0058的功能是一次读取两个存储器单元$0058、$0059中的数放入HX中,其中存储器单元$0058中的数被放入H中,存储器单元$0059中的数被放入X中。,数据存放时应注意这个特点。
(2)存数指令
存数指令的功能是将寄存器A、X、HX的数,存入存储器单元中。对标志位的影响同上。ST是Store的简写,随后的字母是CPU内部寄存器名(ST与寄存器名之间没有空格)。
编号 指令 操作 寻址方式
(19) STA addr8 A→(addr8) DIR
(20) STA addr16 A→(addr16) EXT
(21) STA addr16,X A→(addr16+HX) IX2
(22) STA addr8,X A→(addr8+HX) IX1
(23) STA ,X A→(HX) IX
(24) STA addr8,SP A→(addr8+SP) SP1
(25) STA addr16,SP A→(addr16+SP) SP2
(26) STX addr8 X→(addr8) DIR
(27) STX addr16 X→(addr16) EXT
(28) STX addr16,X X→(addr16+HX) IX2
(29) STX addr8,X X→(addr8+HX) IX1
(30) STX ,X X→(HX) IX
(31) STX addr8,SP X→(addr8+SP) SP1
(32) STX addr16,SP X→(addr16+SP) SP2
(33) STHX addr8 HX→(addr8:addr8+1) DIR
STA、STX是存一个字节的操作,均有7种寻址方式。STHX是存两个字节的操作,只有1种寻址方式。
STHX $00ED ;把HX的内容存储到存储器$00ED、$00EE单元中
(3)堆栈操作指令
堆栈操作指令是将A、H、X进栈、出栈,不改变标志位。PSH是Push(推)的简写,PUL是Pull(拉)的简写,寄存器名A、H、X与简写字母之间没有空格。
编号 指令 操作 寻址方式
(34) PSHA A进栈;(SP-1)→SP INH
(35) PSHH H进栈;(SP-1)→SP INH
(36) PSHX X进栈;(SP-1)→SP INH
(37) PULA A出栈;(SP+1)→SP INH
(38) PULH H出栈;(SP+1)→SP INH
(39) PULX X出栈;(SP+1→SP INH
(4) 寄存器间数据传送指令
这组指令为寄存器A、X、HX、SP、CCR之间的数据传送,不改变标志位。
编号 指令 操作 寻址方式
(40) TAP A→CCR INH
(41) TPA CCR→A INH
(42) TAX A→X INH
(43) TXA X→A INH
(44) TXS HX→SPH:SPL INH
(45) TSX SPH:SPL→HX INH
(5)存储器间数据传送指令
这组指令为存储器单元之间数据的直接传送,对标志位的影响情况是按传送的数来改变N、Z标志,当传送的数为负(最高位为1)时,则负标志位N=1,当传送的数为0时,则零标志位Z=1,对其它标志位没有影响。
编号 指令 操作 寻址方式
(46) MOV addr源,addr目的 (addr源)→(addr目的) DD
(47) MOV addr,X+ (addr)→(HX);HX+1→HX DIX+
(48) MOV #opr8,addr #opr8 →(addr) IMD
(49) MOV X+,addr (HX)→(addr);HX+1→HX IX+D
5.3.2 算术运算类指令
算术类指令有加、减、乘/除、加1/减1、求反/取补、比较、测试等。
(1)加、减指令
加、减指令的第一操作数均在A中,第二操作数在存储器中(有8种寻址方式),结果均放在A中。根据运算结果改变V、H、N、Z、C标志位:
C 若有最高位的进位(减法为借位),则置位,否则清零。
V 若溢出,则置位,否则清零。
H 加法,若位3有进位,即半字节有进位,则置位,否则清零(减法不影响H)。
N 若结果的最高位为1,相当于有符号运算中的结果为负,则置位,否则清零。
Z 若结果为0,则置位,否则清零。
加法有不带进位加法(ADD)和带进位加法(ADC)两种,减法有不带借位减法(SUB)和带借位减法(SBC)两种。
编号 指令 操作 寻址方式
(50) ADD #opr8 A+#opr8 →A IMM
(51) ADD addr8 A+(addr8)→A DIR
(52) ADD addr16 A+(addr16)→A EXT
(53) ADD addr16,X A+(addr16+HX)→A IX2
(54) ADD addr8,X A+(addr8+HX)→A IX1
(55) ADD ,X A+(HX)→A IX
(56) ADD addr8,SP A+(addr8+SP)→A SP1
(57) ADD addr16,SP A+(addr16+SP)→A SP2
(58) ADC #opr8 A+#opr8 +C→A IMM
(59) ADC addr8 A+(addr8)+C→A DIR
(60) ADC addr16 A+(addr16)+C→A EXT
(61) ADC addr16,X A+(addr16+HX)+C→A IX2
(62) ADC addr8,X A+(addr8+HX)+C→A IX1
(63) ADC ,X A+(HX)+C→A IX
(64) ADC addr8,SP A+(addr8+SP)+C→A SP1
(65) ADC addr16,SP A+(addr16+SP)+C→A SP2
(66) SUB #opr8 A-#opr8 →A IMM
(67) SUB addr8 A-(addr8)→A DIR
(68) SUB addr16 A-(addr16)→A EXT
(69) SUB addr16,X A-(addr16+HX)→A IX2
(70) SUB addr8,X A-(addr8+HX)→A IX1
(71) SUB ,X A-(HX)→A IX
(72) SUB addr8,SP A-(addr8+SP)→A SP1
(73) SUB addr16,SP A-(addr16+SP)→A SP2
(74) SBC #opr8 A-#opr8 -C→A IMM
(75) SBC addr8 A-(addr8)-C→A DIR
(76) SBC addr16 A-(addr16)-C→A EXT
(77) SBC addr16,X A-(addr16+HX)-C→A IX2
(78) SBC addr8,X A-(addr8+HX)-C→A IX1
(79) SBC ,X A-(HX)-C→A IX
(80) SBC addr8,SP A-(addr8+SP)-C→A SP1
(81) SBC addr16,SP A-(addr16+SP)-C→A SP2
(2)乘/除法指令
乘法指令MUL将X与A中两个无符号数相乘,结果是两个字节的无符号数,其高字节放入X中,低字节放入A中。同时清标志位H和C,不影响其它标志位。DIV指令将H、A中的二字节的无符号数除以X中的一个字节无符号数,商放入A中,余数放入H中。若商大于$FF,则置标志C,否则清C。若商为0,置标志Z,否则清Z。不影响其它标志位。
编号 指令 操作 寻址方式
(82) MUL X×A→X:A INH
(83) DIV H:A/X→A;余数→H INH
(3)加1/减1指令
INC类指令中INCA、INCX是寄存器的内容加1放回寄存器中,其它指令是把存储单元的内容加1之后放回原存储单元中,对标志位V、N、Z产生影响。DEC类组指令与INC类指令类似,只是将上述指令中的“加1”改为“减1”,其它一致。
编号 指令 操作 寻址方式
(84) INC addr8 (addr8)+1→(addr8) DIR
(85) INCA A+1→A INH
(86) INCX X+1→X INH
(87) INC addr8,X (addr8+HX)+1→(addr8+HX) IX1
(88) INC ,X (HX)+1→(HX) IX
(89) INC addr8,SP (addr8+SP)+1→(addr8+SP) SP1
(90) DEC addr8 (addr8)-1→(addr8) DIR
(91) DECA A-1→A INH
(92) DECX X-1→X INH
(93) DEC addr8,X (addr8+HX)-1→(addr8+HX) IX1
(94) DEC ,X (HX)-1→(HX) IX
(95) DEC addr8,SP (addr8+SP)-1→(addr8+SP) SP1
(4)取反/求补指令
取反指令COM组指令中COMA、COMX是寄存器的内容取反后放回寄存器中,其它指令是把内存单元的内容取反后放回内存单元中。求补NEG组指令中NEGA、NEGX是寄存器的内容求补后放回寄存器中,其它指令是把内存单元的内容求补后放回内存单元中(求补即按位取反后加1)。COM与NEG对标志位影响与减法相同。
编号 指令 操作 寻址方式
(96) COM addr8 $ FF - (addr8)→(addr8) DIR
(97) COMA $ FF - A→A INH
(98) COMX $ FF - (HX)→X INH
(99) COM addr8,X $ FF - (addr8+HX)→addr8+HX) IX1
(100) COM ,X $ FF - (HX)→(HX) IX
(101) COM addr8,SP $ FF - (addr8+SP)→(addr8+SP) SP1
(102) NEG addr8 $ 00 - (addr8)→(addr8) DIR
(103) NEGA $ 00 - A→A INH
(104) NEGX $ 00 - (HX)→X INH
(105) NEG addr8,X $ 00 - (addr8+HX)→(addr8+HX) IX1
(106) NEG ,X $ 00 - (HX)→(HX) IX
(107) NEG addr8,SP $ 00 - (addr8+SP)→(addr8+SP) SP1
若A=$FF,执行COMA后,A=$00。若A=$00,执行COMA后,A=$FF。若A=$FF,执行NEGA后,A=$01。若A=$00,执行NEGA后,A=$00。那么,为什么取反用COM呢?这是One’s Complement的简写,是用$FF作为被减数。求补用NEG,是Negate—Two’s Complement的简写,用$00作为被减数,等于用$FF作为被减数,再加1。
(5)比较指令
比较指令实质是减法操作,与减法不同的是,它不需要减法的结果,不改变任何操作数,只按运算结果改变V、N、Z、C标志位,改变的方式与减法指令相同。CMP的被减数是A、CPX的被减数是X、CPHX的被减数是HX,注意具有哪些寻址方式。CPHX是二字节比较指令,它将变址寄存器HX的内容与连续的两个存储器单元比较,相当于整数之间的比较。
编号 指令 操作 寻址方式
(108) CMP #opr8 A-#opr8 IMM
(109) CMP addr8 A-(addr8) DIR
(110) CMP addr16 A-(addr16) EXT
(111) CMP addr16,X A-(addr16+HX) IX2
(112) CMP addr8,X A-(addr8+HX) IX1
(113) CMP ,X A-(HX) IX
(114) CMP addr8,SP A-(addr8+SP) SP1
(115) CMP addr16,SP A-(addr16+SP) SP2
(116) CPX #opr8 X-#opr8 IMM
(117) CPX addr8 X-(addr8) DIR
(118) CPX addr16 X-(addr16) EXT
(119) CPX addr16,X X-(addr16+HX) IX2
(120) CPX addr8,X X-(addr8+HX) IX1
(121) CPX ,X X-(HX) IX
(122) CPX addr8,SP X-(addr8+SP) SP1
(123) CPX addr16,SP X-(addr16+SP) SP2
(124) CPHX #opr16 HX-#opr16 IMM
(125) CPHX addr8 HX-(addr8:addr8+1) DIR
(6)清零指令
CLR组指令中CLRA、CLRX、CLRH是将寄存器清零,其它指令是将存储器单元清零,同时清零V、N标志位,置Z标志位,不改变H、I、C标志位。
编号 指令 操作 寻址方式
(126) CLR addr8 $ 00 → addr8 DIR
(127) CLRA $ 00 → A INH
(128) CLRX $ 00 → X INH
(129) CLRH $ 00 → H INH
(130) CLR addr8,X $ 00→(addr8+HX) IX1
(131) CLR ,X $ 00→(HX) IX
(132) CLR addr8,SP $ 00→(addr8+SP) SP1
(7)测试是否为0指令
TST组指令中TSTA、TSTX是将寄存器的内容与零比较(实际是执行减0的操作),其它指令是把存储器单元的内容与零比较。这个指令执行后并不改变操作数本身,清C标志位,根据结果改变N、Z标志位,若操作数为负(即最高位为1),则N=1,否则N=0。 若操作数为0,则Z=1,否则Z=0。不影响其它标志位。
编号 指令 操作 寻址方式
(133) TST addr8 (addr8)-$00 DIR
(134) TSTA A-$00 INH
(135) TSTX (HX)-$00 INH
(136) TST addr8,X (addr8+HX)-$00 IX1
(137) TST ,X (HX)-$00 IX
(138) TST addr8,SP (addr8+SP)-$00 SP1
(8)SP与HX增加指令
AIS指令实现堆栈指针的直接增加,AIX指令实现变址寄存器的直接增加,两个指令均不影响标志位。
编号 指令 操作 寻址方式
(139) AIS #opr8 SP+ #opr8 →SP IMM
(140) AIX #opr8 HX+ #opr8 →HX IMM
5.3.3 逻辑运算类指令
逻辑运算类指令完成逻辑与、或、异或等操作。这些指令把累加器A中的内容与存储器单元的内容进行运算后再送到累加器中,同时清零V标志位,根据运算结果改变N、Z标志位,不改变H、C标志位。与(AND)、或(ORA)、异或(EOR)均有8种寻址方式。
编号 指令 操作 寻址方式
(141) AND #opr8 A∧#opr8 →A IMM
(142) AND addr8 A∧(addr8)→A DIR
(143) AND addr16 A∧(addr16)→A EXT
(144) AND addr16,X A∧(addr16+HX)→A IX2
(145) AND addr8,X A∧(addr8+HX)→A IX1
(146) AND ,X A∧(HX)→A IX
(147) AND addr8,SP A∧(addr8+SP)→A SP1
(148) AND addr16,SP A∧(addr16+SP)→A SP2
(149) ORA #opr8 A∨#opr8 →A IMM
(150) ORA addr8 A∨(addr8)→A DIR
(151) ORA addr16 A∨(addr16)→A EXT
(152) ORA addr16,X A∨(addr16+HX)→A IX2
(153) ORA addr8,X A∨(addr8+HX)→A IX1
(154) ORA ,X A∨(HX)→A IX
(155) ORA addr8,SP A∨(addr8+SP)→A SP1
(156) ORA addr16,SP A∨(addr16+SP)→A SP2
(157) EOR #opr8 A⊕#opr8 →A IMM
(158) EOR addr8 A⊕(addr8)→A DIR
(159) EOR addr16 A⊕(addr16)→A EXT
(160) EOR addr16,X A⊕(addr16+HX)→A IX2
(161) EOR addr8,X A⊕(addr8+HX)→A IX1
(162) EOR ,X A⊕(HX)→A IX
(163) EOR addr8,SP A⊕(addr8+SP)→A SP1
(164) EOR addr16,SP A⊕(addr16+SP)→A SP2
5.3.4 位操作类指令
位操作类指令主要是位测试、位置1、位清0等操作。位测试指
展开阅读全文