收藏 分销(赏)

飞思卡尔8位单片机MC9S0804程序HC08CPU与汇编基础指令系统.doc

上传人:xrp****65 文档编号:7670853 上传时间:2025-01-11 格式:DOC 页数:11 大小:178.50KB 下载积分:10 金币
下载 相关 举报
飞思卡尔8位单片机MC9S0804程序HC08CPU与汇编基础指令系统.doc_第1页
第1页 / 共11页
飞思卡尔8位单片机MC9S0804程序HC08CPU与汇编基础指令系统.doc_第2页
第2页 / 共11页


点击查看更多>>
资源描述
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等操作。位测试指
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服