




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章MC68HC08单片机指令系统3.1寻址方式3.2指令系统3.3汇编语言程序设计3.1寻址方式3.1.1立即寻址寻址方式总表直接寻直接寻址间接寻即无偏移量变址
址方式扩展寻址址方式:寻址位寻址立即寻址相对寻址:直接变址寻址用变址寄存器的变址寻址位寻址
用堆栈指针的变址寻址
另:隐含寻址
类别:立即寻址概念:操作数包含于指令中,即在操作码的后续字节中表达:汇编语言#data机器语言OPCODE,n
例:AND#$0FCPX#10
寻址区域:用户ROM或Flash3.1.2直接寻址
类别:直接寻址(零页寻址)
概念:指令中直接给出存放操作数的低位字节地址,即操作数的有效地址EA的低位存放于操作码后续的一个字节中,地址的高位字节默认为$00,且不含在指令中。在单字节地址前加符号“<”表示直接寻址。表达:汇编语言addr8机器语言OPCODE,n
例:LDA$40或LDA<$40
寻址区域:存储器中最低256个字节,即$0000~$00FF
类别:直接寻址概念:指令中直接给出存放操作数的2字节地址,即操作数的有效地址EA存放于操作码后续的2个字节中表达:汇编语言addr16机器语言OPCODE,m,n
例:SUB$1540
寻址区域:存储器中的任何一个字节,即$0000~$FFFF3.1.3扩展寻址
类别:间接寻址
概念:指令中指出存放操作数的1或2字节地址由变址寄存器H:X给出,如果没有一个指令修改H寄存器中的内容,H寄存器中的值将默认为$00。该寻址方式可以移动链表指针或锁定一个经常使用的RAM地址或输入输出地址。表达:汇编语言,X机器语言OPCODE
例:ADD,X
寻址区域:存储器中的任何地方3.1.4无偏移量变址寻址(IX)3.1.5相对寻址
类别:变址寻址概念:指令中指出如果发生转移,转移地址由操作码后提供的8位有符号整数(1字节)作为偏移量加上PC提供的基地址(PC的当前值)而得出。相对寻址只用于转移指令(包括转子指令)。表达:汇编语言标号
机器语言OPCODE,n
例:BLOLOOPBSRDISPLY
寻址区域:用户ROM或Flash中PC当前值所表达地址的-128到+127(或操作码起始地址的-126到+129)
类别:变址寻址概念:指令中指出存放操作数的有效地址EA由变址寄存器H:X提供的基地址和操作码后提供的8位无符号整数(1字节)的偏移量相加而得出。表达:汇编语言偏移量,X机器语言OPCODE,n
例:DEC$40,X
寻址区域:存储器中的任何地方3.1.68位偏移量变址寻址(IX1)3.1.716位偏移量变址寻址(IX2)
类别:变址寻址概念:指令中指出存放操作数的有效地址EA由变址寄存器H:X提供的基地址和操作码后提供的16位无符号整数(2字节)的偏移量相加而得出。表达:汇编语言偏移量,X机器语言OPCODE,m,n
例:ADD$1240,X
寻址区域:存储器中的任何地方3.1.8用堆栈指针的8位偏移量变址寻址
类别:变址寻址概念:指令中指出存放操作数的有效地址EA由堆栈指针SP提供的基地址和操作码后提供的8位无符号整数(1字节)的偏移量相加而得出。该寻址方式可方便访问堆栈中的数据,但访问时间将会长一些。
表达:汇编语言偏移量,SP机器语言OPCODE,n
例:DEC$40,SP
寻址区域:堆栈中的任何地方3.1.9用堆栈指针的16位偏移量变址寻址
类别:变址寻址概念:指令中指出存放操作数的有效地址EA由堆栈指针SP提供的基地址和操作码后提供的16位无符号整数(2字节)的偏移量相加而得出。表达:汇编语言偏移量,SP机器语言OPCODE,m,n
例:ADD$1240,SP
寻址区域:堆栈中的任何地方3.1.10直接位寻址
类别:直接位寻址概念:指令中指出存放位操作数(0或1)的直接位地址,该位地址由操作码中的相应位来表达。表达:汇编语言bit机器语言OPCODE中的相应位
例:BSET5,$40
寻址区域:存储器中的前256个字节中的任何可读写的位,即$0000~$
00FF中的任何可读写的位3.1.11隐含寻址
类别:隐含寻址概念:指令中以隐含方式指出存放操作数的地址,该地址以操作码来指定,而不提供地址的任何信息。表达:汇编语言指令本身
机器语言无
例:TAX
寻址区域:专对A、H、X、CCR等3.1.12存储器到存储器的寻址方式存储器到存储器的寻址方式有4种不同的形式:
(1)立即寻址到直接寻址
(2)直接寻址到直接寻址
(3)自动变址寻址到直接寻址
(4)直接寻址到自动变址寻址指令格式为:MOV源地址,目的地址
1.立即寻址到直接寻址操作码后紧跟的操作数将被存储到操作码后第二个字节所指的地址中。通常用来初始化变量和寄存器,用这种寻址方式的传送指令不影响累加器的值。例如MOV#$05,$C5
2.直接寻址到直接寻址操作码后第一个字节是源操作数的地址,第二个字节是目的操作数的地址。通常用于在存储器间直接移动数据。用这种寻址方式的传送指令不影确累加器的值。例如MOV$05,$F03.自动变址寻址到直接寻址
H:X中的内容作为存放源操作数的地址,有效目标地址由操作码的后继字节给出,数据传送后,H:X自动加1。常用来在间接寻址页中的数据块传送,用这种寻址方式的指令不影响累加器的值。例如MOVX+,$184.直接寻址到自动变址寻址有效源地址由操作码的后继字节给出,H:X中的内容作为存放目标操作数的地址,数据传送后,H:X自动加1。通常用于将存储器的内容填充到间接寻址页中的数据表格。用这种寻址方式的指令不影响累加器的值。例如MOV$18,X+3.2指令系统指令系统即MCU所能执行的所有指令的集合。
MC68HC08的指令系统可分为4类:
•数据存取类指令
•算术/逻辑运算类指令又分:算术运算类指令和逻辑运算类指令
•程序控制类指令又分:无条件/条件转移类指令和控制类指令
•位操作类指令学习指令系统必须掌握的内容:1)类别;
2)寻址方式;
3)表达形式;
4)功能和对标志位的影响;
5)执行过程和时序3.2.1数据存取类指令数据存取类指令的目标单元是A和X(或H:X),主要是取数指令、存数指令、堆栈操作指令以及传送指令,还有几条A、H:X、CCR和SP之间的数据互换指令。各种符号及字母的含义:
*表示相乘运算;
∧
表示逻辑与;
∨
表示逻辑或;
⊕表示逻辑异或;
Y
表示Y的反码;
(Y)
表示Y中的内容;
IMM
表示立即寻址;
INH
表示隐含寻址;
Rel
表示相对寻址;IX
表示无偏移量变址寻址;IX1
表示8位偏移量变址寻址;IX2
表示16位偏移量变址寻址;DIR
表示直接寻址;EXT
表示扩展寻址;SP1
表示8位偏移量栈指针寻址;SP2
表示16位偏移量栈指针寻址;IX+
表示无偏移量变址增1寻址;IXI+
表示8位偏移量变址增1寻址;IMD表示存储器至存储器IMD寻址;DD
表示存储器至存储器DD寻址;
IX+D表示存储器至存储器寻址;表示方法:(Y)表示Y中的内容((Y))表示以Y中的内容作地址,该地址中的内容执行取数操作并按取入的数来改变N,Z标志位,且V=0操作说明43IX2((X)+addr16)→
XLDXaddr16,X32IX1((X)+addr8)→XLDXaddr8,X21IX((X))→XLDX,X43EXT(addr16)→XLDXaddr1632DIR(addr8)→XLDXaddr822IMM
data→XLDX#data寄存器X取数累加器取数周期数字节寻址方式操作指令类型表1数据存取类指令LDAaddr16,XLDAaddr8,XLDA,XLDAaddr16LDAaddr8LDA#dataLDAaddr8,SPLDAaddr16,SP((SP)+addr8)→A((X)+addr16)→A((X)+addr8)→A((X))→A(addr16)→A(addr8)→Adata→A((SP)+addr16)→AIX2IX1IXEXTDIRIMMSP2SP14332214332223445LDXaddr8,SPLDXaddr16,SPLDHX#data16LDHXaddr8((SP)+addr8)→X((SP)+addr16)→
X
addr16→H:X(addr8)→H(addr8+1)→XSP1SP2IMMDIR34324534续表154SP2(X)→(SP)+addr16STXaddr16,SP操作说明周期数字节寻址方式操作指令类型43SP1(X)→(SP)+addr8STXaddr8,SP43IX2(X)→(X)+addr16STXaddr16,X32IX1(X)→(X)+addr8STXaddr8,X21IX(X)→(X)STX,X43EXT(X)→addr16STXaddr1632DIR(X)→addr8STXaddr8寄存器X存数43IX2(A)→(X)+addr16STAaddr16,X32IX1(A)→(X)+addr8STAaddr8,X21IX(A)→(X)STA,X43EXT(A)→addr16STAaddr16(A)→addr8STAaddr8累加器存数执行存数操作并按存入的数来改变N,Z标志位,且V=032DIRSTAaddr8,SPSTAaddr16,SP(A)→(SP)+addr8(A)→(SP)+addr163445SP1SP242(H)→addr8(X)→addr8+1STHXaddr8DIR续表221INH(H:X)-1→SP操作说明周期数字节寻址方式操作指令类型21INH(SP)+1→H:X11INH(CCR)→A21INH(A)→CCR42IX+D42DIX+53DD(addr8)→addr8传送指令21INHPULH21INHPULA21INHPSHX21INHPSHH(A)→(SP)(SP)-1→SPPSHA堆栈操作指令影响N,Z标志位,且V=021INHPULX12INH31
A[3:0]A[7:4]NSAINH(H)→(SP)(SP)-1→SP(X)→(SP)(SP)-1→SP(SP)+1→SP((SP))→A(SP)+1→SP((SP))→H(SP)+1→SP((SP))→XMOV#data,addr8MOVaddr8,addr8MOVaddr8,X+MOVX+,addr8TAPTPATSXTXATXSTAXdata→addr8(addr8)→(H:X)(H:X)+1→H:X((H:X))→addr8(H:X)+1→H:X(A)→X(X)→A交换IMDINHINH341111不影响标志位不影响标志位VHINZC例:LDA#$05LDA$05LDA$1030LDX#$05LDX$05LDX$1030#$05A($0005)A($1030)A#$05X($0005)X($1030)X例:LDX#$89LDA,X
执行结果:A($0089)#$89X((X))=($0089)ALDA$08,X若:(X)=$60($08+$60)ALDA$1002,X若:(X)=$60($1002+$60)ALDX,X((X))X若(X)=$60($0060)XSTA$90(A)$0090STX$90(X)$0090STX,X(X)(X)若(X)=$60(X)($0060)即#$60($0060)例:LDA$1010;A($1010)
LDA$1010,X;A($1010+(X))LDX,X;X((X))LDX$0F,X;X((X)+$0F)执行前:X中内容为$50,$50RAM单元内容为$20执行此段程序后X中内容为多少?执行后:X中内容为单元号为$20+$0F=$2FRAM单元的内容。
STX$0F,X;$0F+(X)(X)执行前:X中内容为$50执行此段程序后X中内容为多少,$5FRAM单元的内容为多少?执行后:单元号为$50+$0F=$5FRAM单元的内容为$50,X中也为$50。3.2.2算术/逻辑运算类指令又分:算术运算类指令和逻辑运算类指令。3.2.2.1算术运算类指令
MC68HC08的算术运算指令一般均隐含为操作数与累加器A进行算术运算或存储器本身以及变址寄存器X进行算术运算。算术运算指令又分为:
•加减法运算指令
•比较指令
•乘法运算指令
•增量减量指令
•取负指令和零测试指令算术运算类指令如表2所示:表2算术运算类指令根据结果影响V、H,N、Z,C标志操作说明周期数字节寻址方式操作指令类型53IX2(A)+((X)+addr16)→AADDaddr16,X42IX1(A)+((X)+addr8)→AADDaddr8,X31IX(A)+((X))→AADD,X43EXT(A)+(addr16)→AADDaddr1632DIR(A)+(addr8)→AADDaddr822IMM(A)+data→AADD#data加法指令ADDaddr8,SPADDaddr16,SP(A)+((SP)+addr8)→A(A)+((SP)+addr16)→ASP2SP13333带进位加法指令43IX2(A)+((X)+addr16)+(C)→AADCaddr16,X32IX1(A)+((X)+addr8)+(C)→AADCaddr8,X21IX(A)+((X))+(C)→AADC,X43EXT(A)+(addr16)+(C)→AADCaddr1632DIR(A)+(addr8)+(C)→AADCaddr822IMM(A)+data+(C)→AADC#dataADCaddr8,SPADCaddr16,SP(A)+((SP)+addr8)+(C)→A(A)+((SP)+addr16)+(C)→ASP2SP14534AIS#dataAIX#data(SP)+data→SP(H:X)+data→H:XIMMIMM22223续表2根据结果影响V、H,N、Z,C标志操作说明周期数字节寻址方式操作指令类型43IX2(A)-((X)+addr16)→ASUBaddr16,X32IX1(A)-((X)+addr8)→ASUBaddr8,X21IX(A)-((X))→ASUB,X43EXT(A)-(addr16)→ASUBaddr1632DIR(A)-(addr8)→ASUBaddr822IMM(A)-data→ASUB#data减法指令SUBaddr8,SPSUBaddr16,SP(A)-((SP)+addr8)→A(A)-((SP)+addr16)→ASP2SP14534带借位减法指令43IX2(A)-((X)+addr16)-(C)→ASBCaddr16,X32IX1(A)-((X)+addr8)-(C)→ASBCaddr8,X21IX(A)-((X))-(C)→ASBC,X43EXT(A)-(addr16)-(C)→ASBCaddr1632DIR(A)-(addr8)-(C)→ASBCaddr822IMM(A)-data-(C)→ASBC#dataSBCaddr8,SPSBCaddr16,SP(A)-((SP)+addr8)-(C)→A(A)-((SP)+addr16)-(C)→ASP2SP14534续表2乘除53IX2((SP)+addr8)–1→(SP)+addr8DECaddr8,SP42IX1((X)+addr8)–1→(X)+addr8DECaddr8,X31IX((X))–1→(X)DEC,X42EXT(addr8)–1→addr8DECaddr811DIR(X)–1→XDECX11IMM(A)–1→ADECA减1指令53IX2((SP)+addr8)+1→(SP)+addr8INCaddr8,SP42IX1((X)+addr8)+1→(X)+addr8INCaddr8,X31IX((X))+1→(X)INC,X42EXT(addr8)+1→addr8INCaddr811DIR(X)+1→XINCX根据结果影响V、N、Z标志11IMM(A)+1→AINCA加1指令操作说明周期数字节寻址方式操作指令类型MULDIV(A)*(X)→X:A(H:A)/(X)→A,余数→H影响Z、CINHINH1751根据结果影响V、N、Z,C标志操作说明周期数字节寻址方式操作指令类型43IX2(A)–((X)+addr16)CMPaddr16,X32IX1(A)–((X)+addr8)CMPaddr8,X21IX(A)–((X))CMP,X43EXT(A)–(addr16)CMPaddr1632DIR(A)–(addr8)CMPaddr822IMM(A)–
dataCMP#data与累加器比较指令CMPaddr8,SPCMPaddr16,SP(A)–((SP)+addr8)(A)–((SP)+addr16)SP2SP14534与变址寄存器比较指令43IX2(X)–((X)+addr16)CPXaddr16,X32IX1(X)–((X)+addr8)CPXaddr8,X21IX(X)–((X))CPX,X43EXT(X)–(addr16)CPXaddr1632DIR(X)–(addr8)CPXaddr822IMM(X)–
dataCPX#dataCPXaddr8,SPCPXaddr16,SP(X)–((SP)+addr8)(X)–((SP)+addr16)SP2SP14534CPHX#data16CPHXaddr8(H:X)–data16(H:X)–(adata8:adata8+1)IMMIMM3342续表2影响N、Z、C43SP1((SP)+addr8)–$00TSTaddr8,SP32IX1((X)+addr8)–$00TSTaddr8,X21IX((X))–$00TST,X32DIR(addr8)–$00TSTaddr811INH(X)–$00TSTX11INH(A)–$00TSTA零测试指令53SP1$00–((SP)+addr8)→(SP)+addr8NEGaddr8,SP42IX1$00–((X)+addr8)→(X)+addr8NEGaddr8,X31IX$00–((X))→(X)NEG,X42DIR$00–(addr8)→addr8NEGaddr811INH$00–(X)→XNEGX根据结果影响V、N、Z、C标志11INH$00–(A)→ANEGA取负指令操作说明周期数字节寻址方式操作指令类型DAA十进制调整A21INH根据结果影响N、Z标志,而V=0续表2例:LDA#$60ADD#$30执行后:A中为$90。例:LDX#$80LDA$1080SUB,X执行前:$80单元中的数为$20,$1080单元中的数为$33执行后:A中的数为多少?
A:$33-$20=$13若用CMP,X
代替SUB,X
结果如何?减法运算后,差不回送A,A中仍然是$33,减法的结果通过标志位反映。例:NEG$60执行前:$60单元中的数为$03执行后:$60单元中的数为$FD,是-03H的补码。例:LDX#$92TSTX执行后:结果只影响标志位
$92-$00=$92,结果N=1,Z=03.2.2.2逻辑运算类指令
MC68HC08的逻辑运算指令又分为:
•基本逻辑操作指令包括逻辑与、逻辑或和逻辑异或指令
•位测试指令
•简单逻辑操作指令包括清零指令和取反指令
•移位指令包括算术左移指令、算术右移指令、逻辑左移指令、逻辑右移指令、循环左移指令和循环右移指令逻辑运算类指令如表3所示:表3逻辑运算类指令根据结果影响N、Z标志,而V=0操作说明周期数字节寻址方式操作指令类型43IX2(A)∧((X)+addr16)→AANDaddr16,X32IX1(A)∧((X)+addr8)→AANDaddr8,X21IX(A)∧((X))→AAND,X43EXT(A)∧(addr16)→AANDaddr1632DIR(A)∧(addr8)→AANDaddr822IMM(A)∧data→AAND#data逻辑与指令ANDaddr8,SPANDaddr16,SP(A)∧((SP)+addr8)→A(A)∧((SP)+addr16)→ASP2SP14534逻辑或指令43IX2(A)∨((X)+addr16)→AORAaddr16,X32IX1(A)∨((X)+addr8)→AORAaddr8,X21IX(A)∨((X))→AORA,X43EXT(A)∨(addr16)→AORAaddr1632DIR(A)∨(addr8)→AORAaddr822IMM(A)∨
data→AORA#dataORAaddr8,SPORAaddr16,SP(A)∨((SP)+addr8)→A(A)∨((SP)+addr16)→ASP2SP14534根据结果影响N、Z标志,而V=0操作说明周期数字节寻址方式操作指令类型43IX2(A)⊕((X)+addr16)→AEORaddr16,X32IX1(A)⊕((X)+addr8)→AEORaddr8,X21IX(A)⊕((X))→AEOR,X43EXT(A)⊕(addr16)→AEORaddr1632DIR(A)⊕(addr8)→AEORaddr822IMM(A)⊕
data→AEOR#data逻辑异或指令EORaddr8,SPEORaddr16,SP(A)⊕((SP)+addr8)→A(A)⊕((SP)+addr16)→ASP2SP14534位测试指令43IX2(A)∧((X)+addr16)BITaddr16,X32IX1(A)∧((X)+addr8)BITaddr8,X21IX(A)∧((X))BIT,X43EXT(A)∧(addr16)BITaddr1632DIR(A)∧(addr8)BITaddr822IMM(A)∧
dataBIT#dataBITaddr8,SPBITaddr16,SP(A)∧((SP)+addr8)(A)∧((SP)+addr16)SP2SP14534续表3续表311INH$00→H
CLRH32IX1$00→(X)+addr8
CLRaddr8,X21IX
$00→
(X)CLR,X32DIR$00→
addr8
CLRaddr811INH
$00→XCLRX11INH
$00→ACLRA清零指令53SP1((SP)+addr8)→(SP)+addr8COMaddr8,SP42IX1((X)+addr8)→(X)+addr8COMaddr8,X31IX((X))→(X)COM,X42DIR(addr8)→addr8COMaddr811INH(X)→XCOMX根据结果影响N、Z标志,而V=0,C=111INH(A)→ACOMA取反指令操作说明周期数字节寻址方式操作指令类型CLRaddr8,SP$00→(SP)+addr843SP1Z=1,而V=0,N=0算术右移指令续表353SP1ASRaddr8,SP42IX1ASRaddr8,X31IXASR,X42DIRASRaddr811INHASRX11INHASRACb7b0操作说明周期数字节寻址方式操作指令类型53SP1ASLaddr8,SP42IX1ASLaddr8,X31IXASL,X42DIRASLaddr811INHASLX11INHASLA算术左移指令C0b7b0根据结果影响V、NZ、C标志根据结果影响V、NZ、C标志续表353SP1LSRaddr8,SP42IX1LSRaddr8,X31IXLSR,X42DIRLSRaddr811INHLSRX11INHLSRACb7b0类型逻辑左移指令C0b7b0操作操作说明周期数字节寻址方式指令53SP1LSLaddr8,SP42IX1LSLaddr8,X31IXLSL,X42DIRLSLaddr811INHLSLX11INHLSLA根据结果影响V、NZ、C标志根据结果影响V、Z、C标志,而N=0逻辑右移指令0续表353SP1RORaddr8,SP42IX1RORaddr8,X31IXROR,X42DIRRORaddr811INHRORX11INHRORACb7b0循环左移指令Cb7b0操作说明周期数字节寻址方式操作指令类型53SP1ROLaddr8,SP42IX1ROLaddr8,X31IXROL,X42DIRROLaddr811INHROLX11INHROLA根据结果影响V、NZ、C标志根据结果影响V、NZ、C标志循环右移指令例:LDA#$5DTAXSTX,XAND#$0FORA#$30AND,XBIT#$01A#$5DX(A);(X)=$5D(X);$5D单元$5DA(A)∧#$0F;(A)=$0DA(A)∨#$30;(A)=$3DA(A)∧((X));(A)=#$3D∨#$5D=#$1D(A)∧#$01;Z=0,N=03.2.3程序控制类指令又分:无条件转移指令/条件转移指令和控制类指令。3.2.3.1无条件转移指令
MC68HC08的无条件转移指令又分为:
•无条件跳转指令
•转子程序指令
•返回指令无条件转移指令如表
4
所示:操作说明周期数字节寻址方式操作指令类型42relPC进栈,(PC)+2+rel→PCBSRrel63IX2PC进栈,00:(X)+addr16→PCJSRaddr16,X52IX1PC进栈,00:(X)+addr8→PCJSRaddr8,X41IXPC进栈,00:(X)→PCJSR,X53EXTPC进栈,addr16→PCJSRaddr1642DIRPC进栈,00:addr8→PCJSRaddr832rel(PC)+2+rel→PCBRArel43IX200:(X)+addr16→PCJMPaddr16,X32IX100:(X)+addr8→PCJMPaddr8,X21IX00:(X)→PCJMP,X33addr16→PCJMPaddr1622DIR00:addr8→PCJMPaddr8无条件跳转指令表4无条件转移指令转子程序指令EXT类型指令操作寻址方式字节周期数操作说明返回指令RTSRTI(SP)+1→SP,((SP))→PCH(SP)+1→SP,((SP))→PCLINHCCR、ACC、X、PCH、PCL依次从栈中弹出INH1147续表4根据结果影响V、H、I、N、Z、C标志3.2.3.2条件转移指令
MC68HC08的条件转移指令又分为:
•标志位测试转移指令(包括无符号数比较转移指令和有符号数比较转移指令)
•比较转移指令
•减1比较转移指令条件转移指令如表
5
所示:类型指令操作及测试条件寻址方式字节周期数操作说明标志位测试转移指令(无符号数比较转移指令)BHIrel大于转移C∨Z=0BHSrel大于等于转移C=0BLOrel小于转移C=1BLSrel小于等于转移C∨Z=1BEQrel等于转移Z=1BNErel不等于转移Z=0标志位测试转移指令(有符号数比较转移)BGErel大于等于转移N⊕V=0BGTrel大于转移Z∨(N⊕V)=0BLTrel小于转移N⊕V=1BLErel小于等于转移Z∨(N⊕V)=1表5条件转移指令relrelrelrelrelrelrelrelrelrel22222222223333333333IRQ脚=0BILrelIRQ脚=1BIHrelI=0BMCrelI=1BMSrelH=0BHCCrelH=1BHCSrelC=0BCCrelrelC=1BCSrel标志位测试转移操作说明周期数字节寻址方式测试条件指令类型续表5relrelrelrelrelrelrelrelrelrelrel222222222222333333333333BPLrelBMIrelBNErelBEQrelN=0N=1Z=1Z=0操作说明周期数字节寻址方式测试转移条件指令类型64SP1DBNZaddr8,SP,rel42IXDBNZX,rel53IX1DBNZaddr8,X,rel32INHDBNZXrel32INHDBNZArel53DIR(addr8)-1→addr8,≠0DBNZaddr8,rel64SP142IX+53IX1+43IMM4353DIR(A)-(addr8)=0
比较转移指令续表5CBEQaddr8,rel减1比较转移指令CBEQA#data,relCBEQX#data,relCBEQaddr8,X+,relCBEQX+,relCBEQaddr8,SP,rel(A)-data=0(X)-data=0(A)-((H:X)+addr8)=0,(H:X)+1
H:X(A)-((H:X))=0,(H:X)+1
H:X(A)-((SP)+addr8)=0(A)-1→A,≠0(X)-1→X,≠0((X)+addr8)-1→(X)+addr8,≠0((X))-1→(X),≠0((SP)+addr8)-1→(SP)+addr8,≠0IMM3.2.3.3控制类指令
MC68HC08的控制类指令又分为:
•C和I标志控制指令
•空操作指令
•复位指令
•省电控制指令(低功耗指令)•软件中断指令控制类指令如表6所示:表6控制类指令类型指令操作寻址方式字节周期数操作说明标志控制SEC1→CINH11CLC0→CINH11SEI1→IINH12CLI0→IINH12空操作NOPINH11BRNrelINH21复位RSP$FF→SPL,SPH保持不变INH13省电控制WAIT停止CPU的运行INH11STOP停止振荡器的工作INH11软件中断SWI(PC)+1→PC(PCL)→(SP);(SP)―1→SP(PCH)→(SP);(SP)―1→SP(X)→(SP);(SP)―1→SP(ACC)→(SP);(SP)―1→SP(CCR)→(SP);(SP)―1→SP1
→I($FFFC)
→PCH;($FFFD)
→PCLINH193.2.4位操作类指令位操作指令包括置位/清零(复位)指令和位测试转移指令,位的寻址采用对所寻址位所在的内部RAM单元直接寻址的方式(DIR)加上对所寻址位直接位寻址的方式(bit)相结合的寻址方式。
•置位/清零指令
•位测试转移指令位操作指令如表7所示:表7位操作类指令类型指令测试条件若寻址方式字节周期数置位清零BSETbit,addr81→(addr8)
·bitDIR.bit24BCLRbit,addr80→(addr8)
·bitDIR.bit24位测试BRSETbit,addr8,rel(addr8)·bit→C,若(C)=1,则(PC)+3+rel→PCDIR.bit35BRCLRbit,addr8,rel(addr8)·bit→C,若(C)=0,则(PC)+3+rel→PCDIR.bit353.2.5指令系统识记简表3.2.5.1各类指令中所采用寻址方式组合类别
MC68HC08各类指令中所采用寻址方式组合类别大致有以下几种:
•Ⅰ类含:#dataaddr8addr16,Xaddr8,Xaddr16,Xaddr8,SPaddr16,SP•Ⅱ类含:addr8addr16,Xaddr8,Xaddr16,Xaddr8,SPaddr16,SP
•Ⅲ类含:AXaddr8,Xaddr8,X
addr8,SP•Ⅳ类含:rel•Ⅴ类其它其中Ⅰ、Ⅱ、Ⅲ类寻址方式组合主要用于数据存取类指令和算术/逻辑运算类指令中,而Ⅱ、Ⅳ类寻址方式组合主要用于程序控制类指令中。3.2.5.2指令系统简表
•数据存取(数据传送)类指令指令类别LDALDXSTASTXTAXTXA寻址组合类别Ⅰ类Ⅰ类Ⅱ类Ⅱ类Ⅴ类Ⅴ类
•算术/逻辑运算类指令指令类别ADDADCSUBSBCCMPCPX寻址组合类别Ⅰ类Ⅰ类Ⅰ类Ⅰ类Ⅰ类Ⅰ类指令类别ANDORAEORBIT寻址组合类别Ⅰ类Ⅰ类Ⅰ类Ⅰ类指令类别INCDECNEGTSTMULDIV寻址组合类别Ⅲ类Ⅲ类Ⅲ类Ⅲ类Ⅴ类Ⅴ类指令类别CLRCOMLSLASLLSRASRROLROR寻址组合类别Ⅲ类Ⅲ类Ⅲ类Ⅲ类Ⅲ类Ⅲ类Ⅲ类Ⅲ类
•程序控制类指令
指令类别JMPBRAJSRBSRBXX寻址组合类别Ⅱ类Ⅳ类Ⅱ类Ⅳ类Ⅳ类汇编源程序格式标号操作码操作数;注释冒号或空格空格(一)标号*开头,本行为注释行;可执行语句标号必须以字母开头,由字母、数字、特殊符号组成,长度不大于15个字符。(二)操作码大写、小写等价汇编伪指令ORG,定位伪指令格式:ORG表达式表达式的值赋给程序计数器。EQU ,赋值伪指令。格式:标号EQU表达式把表达式的值赋给前面的标号。该标号不能在程序其它地方再定义。FCB,字节变量定义伪指令格式:标号FCB表达式,表达式,…表达式为空,则操作数为一个字节的零。FDB,双字节变量定义伪指令。格式:标号FDB表达式,表达式,…双字节数,高字节在前,低字节在后。存储区:从现行程序计数器开始。标号被赋值第一个操作数的首地址。操作数可为数字常量、字符常量、符号或表达式。表达式为空,则操作数为两个字节的零。FCC,字符串变量定义伪指令格式:标号FCC‘字符串’把一个ASCII码字符串依次存入相应的存储器中。第一个字符从当前程序计数器值指定地址开始存放。RMB,保留存储器字节伪指令。格式:标号RMB表达式存储区:从现行程序计数器开始保留一块存储区,保留存储区的字节长度等于表达式的值。不进行任何初始化。例:ORG$00A0COUNTEQU10SOURCEFCB$23,,$40ASCFCC‘AB’RESULFDB$8130GRRMB723004041428130????……??SOURCEASCRESULTGR7B3.3汇编语言程序设计简单程序设计结构程序设计
算术运算程序设计代码和数制转换程序设计排序、搜索程序设计
浮点运算子程序设计AAOPR1OPR1+1RESULTRESULT+1OPR2OPR2+1RESULT+2++进位高8位低8位…进位高8位高8位低8位低8位…例3.1双字节补码加法子程序功能:将起始地址为OPR1和OPR2的两个二字节数相加,将结果存RESULT开始的二个单元中。3.3.1简单程序设计OPR1 EQU $60OPR2 EQU $62DADD: LDA OPR1+1 ADD OPR2+1 STA OPR1+1 LDA OPR1 ADC OPR2 STA OPR1 RTS高8位低8位…进位高8位高8位低8位低8位…OPR1OPR1+1RESULTRESULT+1OPR2OPR2+1RESULT+2例3.2双字节减法功能:将起始地址为SOURCE1和SOURCE2的两个二字节数相减(前者为被减数),将结果存RESULT开始的二个单元中。AASOURCE1SOURCE1+1RESULTRESULT+1SOURCE2SOURCE2+1--高8位低8位…高8位高8位低8位低8位…DSUB:LDASOURCE1+1SUBSOURCE2+1STARESULT+1LDASOURCE1SBCSOURCE2STARESULT RTS高8位低8位…高8位高8位低8位低8位…SOURCE1SOURCE1+1RESULTRESULT+1SOURCE2SOURCE2+1例3.3双字节求补功能:将OPR1开始二字节求补DNEG:NEGOPR1+1BCSD1INCOPR1D1:RTS
OPR1高低DNEG:COMOPR1 LDAOPR1+1COMA ADC#1 STAOPR1+1CLRAADCOPR1STAOPR1例3.3双字节拆成四个半字节数据
功能:将SOURCE开始的二个字节拆成四个半字节,并将结果存入RESULT开始的四个单元中。DISA:LDASOURCELDX#RESULTAND#$F0LSRALSRALSRALSRASTA,XINCXLDASOURCEAND#$0F
STA,X
INCXLDASOURCE+1AND#$F0LSRALSRALSRALSRASTA,XINCXLDASOURCE+1AND#$0FSTA,XA
(SOURCE)X(RESULT)A(A)∧#$F0A右移4次(X)
(A)X(X)+1A(SOURCE)A(A)∧#$0F(X)
(A)
A
0CA
(SOURCE+1)A(A)∧#$F0A右移4次X(X)+1(X)
(A)X(X)+1A(SOURCE+1)A(A)∧#$0F(X)
(A)
例3.4查表求数字0
~9的显示字模子程序
功能:将ACC中存放的0~
9的数字的字模从表中查出,存入RESULT单元中。DISPLDASOURCECMP#$00;可不用
BLODRET;可不用
CMP#$09BHIDRETTAXLDATAB,XSTARESULTDRETRTSTABFCB$3F,$06,$5B,$4F,$66FCB$6D,$7D,$07,$7F,$6F3F065B4F666D7DTABLED分静态显示、动态显示两种。LED静态显示+5VI/O口RLED01灭10亮74LS373G74LS373G74LS373GPC0PC1PC7MC68HC05PB0PB1PB7LED动态显示PC0PC1PC7MC68HC05PB0
PB5PB6PB7I0Q0I1Q1I7Q7GNDVDDaghI0Q0
I5Q5I6Q6I7Q7GND(2)1.段码表(1)(3)(4)(9)(8)(6)(7)PC7PC6PC5PC0PC1
9831467…2为小数点,此处未连接0011111100000110$3F$0601011011$5B2.查段码表DISTA:FCB$3FFCB$06FCB$5BFCB$4FFCB$66FCB$6DFCB$7DFCB$07FCB$6FFCB$7FFCB$77FCB$7CFCB$39FCB$5EFCB$79FCB$71FCB$00FCB$40FCB$38灭中间3.动态刷新软件延时,延时时间粗略估算。4.程序显示缓冲区:首地址SOURCE例3.5将自存储器SOURCE开始的50个数据的累加和存放到自DESI开始的二字节中。SADDLDX#$00CLRASTADESILOOPADDSOURCE,XBCCNEXTINCDESINEXTINCXCPX#50BLOLOOPSTADESI+1
3.3.2结构程序设计datadata…datadataSOURCESOURCE+1DESIDESI+1AA例3.6将自存储器SOURCE开始的100个数据(字节)中的所有正数相加,并将其累加和存放到自BUFF开始的二字节中。SPADCLRXCLRASTABUFFSTABUFF+1LOOPLDASOURCE,XBMINEXT;N=1?BEQNEXT;Z=1?ADDBUFF+1STABUFF+1BCCNEXTINCBUFFNEXTINCXCPX#100BLOLOOPSOURCEBUFFBUFF+1例3.7将自存储器SOURCE开始的NUM字节16位无符号数中的最大数找出来,存放到自MAX开始的二字节中。(所有低字节存于高地址)EACHCLRXLDASOURCE,XSTAMAXINCXLDASOURCE,XSTAMAX+1INCXLOOPLDAMAXCMPSOURCE,X BHINEXT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小班家园共育活动方案计划
- 特许投资分析中的技术应用试题及答案
- 2024年计算机二级重要策略试题及答案
- 2024年流程优化在投资中的应用试题及答案
- 生态保护区的选址与地理因素-试题及答案
- 电子商务职教市场的品牌建设与形象传播试题及答案
- 城市化进程对环境影响试题及答案
- 动物非感染性疾病新知试题及答案
- 2024互联网营销师效率提升试题及答案
- 2024年人力资源管理师考题解析试题及答案
- 2024年计算机二级WPS考试题库(共380题含答案)
- 汉字的奥秘探索
- 《海上风电设备运输规范》
- 2024年江苏省徐州市中考数学真题卷及答案解析
- 2025届云南省民族大学附属中学高三(最后冲刺)数学试卷含解析
- 湖北省七市2025届高三下学期第五次调研考试数学试题含解析
- 2024年太阳能电池片产业海外专利预警分析报告
- 2023河南专升本英语真题及答案
- 河流沿岸护栏安装工程协议
- 前庭阵发症-讲稿
- 第十三届全国交通运输行业城市轨道交通列车司机(学生组)职业技能大赛技术方案
评论
0/150
提交评论