您的位置:首页 > 其它

HC08传送类指令操作对CCR的影响如何?

2017-08-23 23:45 148 查看
1.可以说没什么影响`
M68HC08指令系统
计算机的指令系统是一套控制计算机操作的编码,称之为机器语言。计算机只能识别和执行机器语言的指令,机器语言指令是随计算机系统的不同而不同的。为容易为人们所理解,便于内存和使用,通常用符号指令(即汇编指令)来表示计算机的指令。这一章我们以M68HC08的汇编指令来析M68HC08的指令系统函数和使用方法1 指令格式
1.1 汇编指令格式
M68HC08汇编指令由操作码助记符字段和操作数字段所组成,指令的格式
操作码[操作数1],[操作数2] CodeGo.net,[操作数3]
优先部“操作码”助记符,由2-5个英文字母组成,例如LDMOVDBNXZBRSET等第二部为“操作数”字段,根据指令函数的不同,操作数可以有一个二个三个或者没有(例如空操作指令NOP)操作码与操作数之间以空格隔,操作数和操作数之间用“,”号开。指令前可以加标号,标号代表这条指令的起始存储地址,指令后可以加注释,注释以“;”号开始,一行指令以回车符结束STRT:MOV#FF,DORA;PTA编程为输出口中
1.2 常用伪指令
一定位伪指令
格式:ORG地址
“地址”可以十六进数(以$开头)或十进制表示,该伪指令给出以下的程序或数据的起始存储地址ORG $C000
则该伪指令下面的程序或常数存放在$C000开始的存储器中二定义字节常数伪指令
格式:FCB X1X2X3,…Xn
定义程序区中的字节常数,Xi是单字节常数也可以是用单引号括起来的字符串(这时定义ASCII码),每个字节为一个字符ORG $8000
FCB $3F, $61
则在Flash的$8000$8001两个单元定义两个常数$3F$61。利用字节定义伪指令可以在程序存储器中定义常数表,如显示器的字形数据表等三定义字常数伪指令
格式:FDB Y1Y2…Ym
定义程序区中字(双字节)常数位字节在前,低位字节在后,Yi用十六进制或十进制数表示ORG $FFFE
FDB $8000
则在$FFFE$FFFF定义一个字常数,$80存储在$DDDW单元,而$FFFF单元存储$0。利用FDB指令可以定义复位和中断向量1.3 符号说明
M68HC08汇编程序允许使用标准的M68HC08汇编指令和多种伪指令(详见§7.1M68HC08汇编使用方法)为以下说明和析指令的方便,我们对常用的符号作简单说明一函数性符号
·( )寄存器或存储单元的内容;
·←数据传送的方向;
·↑表示退栈;
·↓表示进栈;
·&表示逻辑或;
·○+表示逻辑异或;
·×乘;
·÷除;
·+加;
·-减;
·:表示连成双字节;
·《表示扩展为有符号的16位数二寄存器或存储单元符号
·A累加器;
·CCR条件码寄存器;
·H变址寄存器高8位;
·X变址寄存器低8位;
·PC程序计数器;
·PCH程序计数器的高8位;
·PCL程序计数器的低8位;
·SP堆栈指针;
·M存储器地址或数据(视寻址方式而定)
·rel相对偏移量(表示有符号的8位二进制数)三位标识符号
·V溢出标志位;
·H半进位;
·I中断屏蔽位;
·N负标志位;
·Z零标志位;
·C进位/借位四对条件码寄存器影响:
·-无影响;
·0:清“零”;
·:根据结果置“1”或清“零”五机器码标志
·dd:$00XX的低8位地址;
·ee:16位偏移量地址;
·ff:16位偏移量低8位或8位偏移量;
·ii:单字节立即数;
·ll:16位扩展寻址低8位;
·rr:相对偏移量六源操作数标志
·OPR:操作数,一个或两个字节,由操作方式确定;
·rel:相对偏移量七寻址方式
·INH:隐含寻址;
·IMM:8位立即数寻址;
·DIR:8位直接地址寻址;
·EXT:16位扩展寻址;
·IX:16位变址无偏移量;
·IX1:16位变址8位偏移量;
·IX2:16位变址,16位偏移量;
·IX+:16位变址,无偏移量,变址寄存器;
·IX1+:16位变址,8位偏移量,变址寄存器;
·rel:8位相对寻址;
·DD:直接寻址;
·IMD:立即寻址,直接寻址;
·IX+D:16位变址,直接寻址,变址寄存器;
·DIX+:直接寻址,16位变址,变址寄存器;
·SP1:堆栈指针寻址,8位偏移量;
·SP2:堆栈指针寻址,16位偏移量2 寻址方式
指令给出操作数或产生操作数有效地址(EA)的方式称为寻址方式。根据寻址方式,CPU就可以取得操作数。M68HC08比M68HC05增种寻址方式,使程序员能选择最合适的寻址方式来优化程序,达到缩短程序长度提高运行速度的目的。下面别介绍M68HC08指令系统的寻址方式一隐含寻址
无操作数或操作数隐含在操作码字节中NOP ;无操作数
CLRA ;清零累加器
一般只能访问CPU寄存器二立即数寻址
操作数包含在指令操作码后面的一个或两个字节中LDA # $10 ;80H—A
LDHX# $8100;81H—H,0—X
M68HC08指令系统中,数字前加$表示十六进制数,加%表示二进制数,无前缀表示十进制数,指令的数据前加#表示立即数三直接寻址
操作数的有效地址EA包含在指令操作码后续字节中。直接寻址的有效地址在指令的地址段中只指出低8位的值8位固定为零,即EA=$00XX。这种寻址方式只能访问零页的I/O寄存器或RAMINC $50 ;(50H)+1→50H单元
四扩展寻址
扩展寻址方式中,操作数的16位有效地址EA在指令操作码的后面两个字节中。实际
上也是一种直接寻址方式。因为有效地址为16位,可以访问64K字节存储空间的任意单元JMP $C100 ;$C100→PC,CPU转至$C100执行程序
LDA $8120;(8120H) →A
在使用M68HC08汇编时,用户不必考虑指令是用直接寻址还是扩展寻址。汇编程序自动根据指令中有将地址值取直接寻址或扩展寻址方式五变址寻址无偏移量
这是一种间接寻址方式,操作数的有效地址EA的高8位在H寄存器中,低8位在X寄存器中。这种寻址方式可以访问64K字节存储空间的任意单元DEC,X;(HX)—1→(HX)单元
六变址8位移量
操作数的有效地址为(H:X)加上无符号的8位偏移量。这种寻址方式可用于查表,从n个元素的表中选择第k个元素,k在变址寄存器中,表格的首地址为8位偏移量LDA $50,X;(HX)+$50) →A
七变址16位偏移量
操作数的有效地址为(H:X)加上无符号的16位偏移量,类似于变址8位偏移量,可用于查表和程序散转FMP KTAB,X
KTAB JMP PGM0
JMP PGM1
根据(HX)的不同转移到不同的地方八堆栈指针8位偏移量
操作数的有效地址是(SP)加上无符号的8位偏移量。这种变址8位移量寻址方式相似。这种寻址方式主要方便对堆栈的操作。若系统中不用中断,SP可以作为第二变址寄存器LDA $10,SP ;(SP)+$100) →A
九操作数有效地址为(SP)加上16位无符号的偏移量,类似于变址16位偏移量的寻址方式LDA $100,SP ;((SP)+$100)→A
十相对寻址
相对寻址只用于转移指令和子程序调用指令,转移的有效地址为当前PC值加上8位带符号的偏移量,偏移量位于操作码后面的字节中。在使用M68HC08汇编时程序员不必计算偏移量值,只要用标号表示转移的目标地址,汇编程序自动计算偏移量,偏移量为-128~+127,超出这个范围,汇编会报错BCC MLP1 ;C=0转MLP1,相对寻址
INC A ;(A)+1→A
BRA MLP2 ;转MLP2,相对寻址
MLP1: CLRA
MLP2: STA ,X
存储器单元和存储器单元之间的数据传送指令,由源操作数和目的操作数不同寻址方式combinations得到以下四种寻址方式寻址方式
源操作数
目的操作数
例子
函数
十一IMD
立即数寻址
直接寻址
MOV # $80,$40
S80→$40单元
十二DD
直接寻址
直接寻址
MOV $80,$40
($80)→$40单元
十三IX+D
变址,(HX)+1
直接寻址
MOVX+,$40
((HX))→$40单元,(HX)+1
十四DIX+
直接寻址
变址(HX)+1
MOV $40,X+
($40)→(HX),(HX)+1
十五变址无偏移量,变址寄存器
操作数的有效地址为变址寄存器内容。这是一种间接寻址方式,指令执行后变址寄存器内容CBEQ X+,rel ;((HX))=(A)转移,(HX)+1→HX
十六变址8位偏移量,变址寄存器
操作数有效地址为变址寄存器内容加上8位无符号偏移量,指令执行后变址寄存器内容FNNZ $80,X+rel ;($80+(HX)-1不等于0转移;
且(HX)+1→HX
3 M68HC08指令系统
3.1指令类型
一根据指令周期类
指令周期反映指令运行的速度。M68HC08指令周期是以内部总线时钟周期为单位的。指令周期占内部总线时钟周期数按指不同有1,2,3,4,5,6,7,9等几种。若内部总线时钟频率为8MHz,最短的指令周期为125ns,最长的指令周期为1125ns二根据指令字节长度类
指令字节长度反映指令的存储效率。M68HC08有单字节指令双字节指令和3字节指令三根据指令函数类
根据指令的函数,HC08指令系统可为以下几类:
①数据传送指令;
②算术运算指令;
③逻辑运算指令;
④位操作指令;
⑤移位指令;
⑥程序转移和控制指令3.2数据传送指令
数据传送指令实现CPU寄存器I/O寄存器RAM和ROM(或Flash)之间的数据传送,一般情况下指令执行结果只影响CCR的“N”和“Z”标志位。若所传送的数据为零,置“1”Z,否则清零Z;数据最高位为1置“1”N,否则清零N一CPU寄存器取数指令
1.所寻址的单元内容送累加器A
CCR
指令
操作
V
H
I
N
Z
C
寻址方式
总线周期
LDA # opr
LDA opr
LDA opr
LDA opr, X
LDA opr,X
LDA,X
LDA opr, SP
A←(M)
0



IMM
DIR
EXT
IX2
IX1
IX
SP1
2
3
4
4
3
2
4
LDA opr, SP
SP2
5
LDA # $80 ;$80→A
LDA PORTA ;并行口中A输入信息读到A(先用EQU指令定义PORTA)
2.所寻址的单元内容送16位变址寄存器的低8位X,而高8位H的内容保持不变
CCR
指令
操作
V
H
I
N
Z
C
寻址方式
总线周期
LDA # opr
LDA opr
LDA opr
LDA opr, X
LDA opr,X
LDA,X
LDA opr, SP
LDA opr, SP
A←(M)
0



IMM
DIR
EXT
IX2
IX1
IX
SP1
SP2
2
3
4
4
3
2
4
5
3.所寻址的两个单元的16位数据送变址寄存器HX
CCR
指令
操作
V
H
I
N
Z
C
寻址方式
总线周期
LDA # opr
LDA opr
H:X←(M:M+1)
0



IMM
DIR
2
3
这是两条16位数据传送指令,主要用于对变址寄存器HX赋值LDHX # $80 ;0→H,$80→X
LDHX $8212 ;($8212) →H,($8213) →X
二CPU寄存器存储命令
1.累加器A的内容存储到所寻址的单元
STA PORTA ;(A)输出到并行口不PORTA
STA $80,X ;(A)存储到地址为(HX)+$80的单元
2.变址寄存器低8位X的内容存储到所寻址的单元
3.16位变址寄存器的内容存储到所寻址的两个单元
STHX $80;(H)→$80单元(X)→$81单元
三堆栈操作指令
1.进栈指令
M68HC08的进栈操作是数据先进栈,然后栈指针减1,因此SP指向下一次进栈的地
址单元。不影响标志位2.退栈指令
HC08的退栈操作是栈指针SP先,然后取(SP)指出栈单元内容。不影响标志位四CPU寄存器之间的的数据传送指令
由上面所列指令及其函数可以看出除TAP指令外,这类指令不影响标志位五存储器单元之间的数据传送指令
这类指令在编程时应注意格式:MOV源操作数,目的操作数MOV $50, $60 ;($50)→$60单元
MOV # $80,$60;立即数$80→$60单元
3.3 算术运算指令
一加法指令
1.不带进位加法指令ADD
累加器A和所寻址的单元内容相加,运算结果送累加器A。影响标志位OVHNZC,运算结果满足下列条件时置“1”相应的标志位,否则清零OV:(A).7,(M).7=1,而结果最高位(RESOLT7,以R7表示)为0,负数相加溢出;或(A).7=0(M).7=0而结果最高位R7为1,正数相加溢出;
H:相加结果低3位向高4位进位时置“1”;
N:相加结果R7为1时置“1”;
Z:相加结果为零时置“1”;
C:相加时最高产生位进位时置“1”2.带进位加法ADC
累加器A进位标志C和所寻址的单元内容相加果送累加器A。对标志位的影响和ADD指令相同,ADC指令用于实现multibyte加法3.十进制调整指令
这条指令对累加器中由上一条加法指令(加数和被加数均为压缩BCD码)所得的8位结果(在A)进行十进制调整,使A的内容为BCD码。调整规则
a. (A).3~(A).0大于9或H=1则(A)+$06→A,否则(A).3~(A).0不变;
b. (A).7~(A).4大于9或C=1则(A)+$60→,否则(A).7~(A).4不变;
c. 结束(A)=$56 ($50)=$67执行指令:
ADD $50 ;(A)=$BD,(C)=0(A).7~(A).4>9,(A).3~(A).0>9
DAA ;经调整之后(A)=23,(C)1
4.16位变址寄存器加上8位带符号立即数指令
这条指令将补码表示的8位立即数扩展为16位带符号数并和(HX)相加,运算结果送HX,不影响标志位5.16位堆栈指针加上8位带符号立即数指令
这条批令将补码表示的8位立即数扩展为16位有符号数并和(SP)相加果送SP,不影响标志6.指令
指令不影响标志位C和H,(A)=$FFADD # $1 ;结果(A)=0,(C)=1,(H)=1
INCA ;结果(A)=0,(C)和(H)不变
二减法指令
1.不带借位减法指令
A的内容减去所寻址单元内容果送累加器A,影响VNZC标志位。满足下列条件置“1”,否则清零V:(A).7=1(M).7=0而结果R7=0,为负数减正数溢出;或者(A).7=0(M).7=1而结果R7=1,为正数减负数溢出。这时1→VN:相减结果R7=1时,1→N
Z:相减结果为零时,1→Z;
C:相减时最高位产生借位时,1→C2.带借位减法指令
A的内容减去C和所寻址单元的内容结果送A,对标志位的影响和SUB指令产生的影响相同3.减1指令
对所寻址单元的内容减去1减1指令不影响标志位H和C4.累加器A的比较指令CMP
A和所寻址的单元内容相比较,实际上是A减去所寻址单元内容,只影响标志位,而不传送减法的结果,即不影响A和寻址单元的内容,对标志位影响和关法指令产生的影响相同5.X的比较指令CPX
X和所寻址的单元内容的相比较,只影响标志位,不影响X和所寻址单元内容,对标志位影响和减法指令产生的影响相同6.HX的比较指令CPHX
16位变址寄存器HX内容和可寻址的两个单元内容相比较,只影响标志位,不影响HX和可寻址单元内容,对标志位影响和减法指令产生的影响相同7.取补指令
0减去所寻址的单元,即所寻址单元的取反,然后。对VNZC标志位影响和减法指令产生的影响相同8.测试指令
测试所寻址单元的内容是否为零或负数。执行所寻址单元内容减去0的操作,并影响
VNZ标志位,不影响原来单元内容三乘法指令
X和A中两个无符号数相乘,积的高8位送X,低8位送A。清零H和C标志,不影响其他标志位四除法指令
(H):(A)中无符号16位数除以(X)中8位无符号数,商→A,余数送H。若商大于$FF或除数为零,置1进位标志C,否则清零标志C3.4逻辑运算指令
一单操作数简单逻辑指令
1.清零指令
清“0”所寻址的单元,0→VN1→Z不影响其他标志位2.取反指令
对的寻址单元的内容按位取反二双操数逻辑运算指令
1.“逻辑与”指令
累加器A和所寻址的单元内容按位做逻辑与运算果选A。结果最高位R7=1置“1“N,否则清零N果为零,1→Z,否则0→Z按位“逻辑与“操作在两个操作数对应位都为1时果对应位才为1,否则对应结果位为0。(A)=$F0则执行指令AND# $0F后(A)=02.“逻辑或”指令
累加器A和所寻址单元内容按位进行逻辑或运算结果送A按位逻辑或操作,只有当两个操作数对应位都为零时果的对应位才为零,否则为1。(A)=$F0,执行ORA# $0F后则(A)=$FF3.“逻辑异或”指令
累加器A和所寻址单元内容按位进行逻辑异或运算果送A按位逻辑异或就是按位半加。当两个操作数对应位不同时结果对应为1,相同时为0。(A)=$F0,若执行指令EOR# $A0,则(A)=$504.位测试指令
A和所寻址的单元内容逻辑与。但结果不传送,只影响标志位VNZ,不影响A和所寻址单元内容这些指令用于测试所寻址单元的指定位为零还是1。(A0=$01,执行指令BIT$50后,若Z=0则($50).0=0
3.5位操作指令
一标志位操作指令
1.对CCR寄存器的IC置“1“指令
2.对CCR寄存器的IC清零指令
对标志位I的置“1“和清零就是控制CPU的关中和开中二对零页RAM/IO寄存器的位操作指令
对于零页的RAM单元或IO寄存器,CPU执行位置1和清零指令一样地快速方便3.6移位指令
一逻辑左移指令
所寻址的单元内容左移一位,低位移入0位移到C二逻辑右移指令
所寻址的单元内容右移一位位移入0,低低移出至C三带进位循环左移指令
所寻址单元的内容带进位循环右移一位,C移入最高位,最低位移出至C五算术左移指令
算术左移指令函数和逻辑左移指令操作相同
六算术右移指令
将所寻址的单元内有符号的8位数右移一位,符号位保持不变,相当于除2操作七累加器A半字节交换指令
累加器A的高4位和低4位相互交换,不影响标志位3.7 程序转移和控制类指令
一无条件转移指令
1.相对转移指令
2.绝对转移令
绝对转移指令,将所寻址的两个单元内容作为地址送PC,使CPU转到该地址开始执行程序,不影响标志位二条件转移指令
1.测试状态标志条件转移指令
这类指令,根据上一条指令执行结果,测试CCR的标志位状态,若条件满足,执行相对转移指令,若条件不满足,则顺序执行下一条指令,不影响标志位若执行有符号减法或比较批令后,CCR相关位与实际两操作数间的关系为:如果CPU内部A或X的内容大于等于所寻址单元内容,则N○+V=0;如果A或X内容大于所寻址单元内容,Z1(N○+V)=0;A或X小于所寻址的单元内则N○+V=1执行无符号减法或比较指令后,CCR相关位与实际两操作数间的关系为:如果CPU内部A或X的大于等于所寻址单元内容则C=0;A或X大于所寻址单元内容C=0,Z=0;A或X内容小于所寻址单元内容C=1BLTBGEBLEBGT指令一般直接跟在有符号数减法或比较指令之后2.测试IRQ条件转移指令
这两条指令也不影响标志位测试所寻址单元相应位状态,若满足条件则发生转移,否则顺序执行下一条指令。只能对零页的RAM或I/O寄存器的位测试转移。不影响标志位4.减1不为零转移
这是兼有减1指令和不等于零转移指令函数的条件转移指令,不影响标志位5.比较相等转移指令
累加器A或X和所寻址单元内容相比较,若相等,则执行一相对转移指令;若不相等,顺序执行下一条指令。不影响标志位三调用子程序指令
1.相对调用指令
该调用子程序指令函数和相对转移指令类似,只是增加PC进栈操作也不影响标志位2.绝对调用子程序指令
这些指令函数和绝对转移指令函数相似,只是附加PC值进栈操作。不影响标志位四返回指令
1.从子程序返回指令RTS
这条指令的函数是PC退栈返回主程序。一般子程序必须以RIS结束2.从中断返回指令RTI
这条的函数和RTS相似,只是多CPU寄存器CCRAX的退栈操作,使CPU从原来被中断地方继续执行程序。中断服务程序必须以RTI指令结束五控制指令
1.软件中断指令SWI
CPU执行SWI指令,产生不可屏蔽的软件中断,主要用于设计开发工具的监控程序五控制指令
1.软件中断指令SWI
CPU执行SWI指令,产生不可屏蔽的软件中断,主要用于设计开发工具的监控程序2.堆栈指针复位指令RSP
RSP指令使SPL值为$FF,而SPH值保持不变。不影响标志注:为保证栈指针能正确初始化,最好使用LDHX和TXS指令,例对于把SP初始化为$00FF,可使用:LDHX# $100和TXS这两条指令3.节电方式指令
4.空操作指令
空操作指令,指令本身不执行任何操作。用在延时等程序中,以调节程序执行的时间上面我们简要地析M68HC08的指令系统。对汇编语言程序设计有一定基础的读者,就可以用M68HC08提供的指令,设计出各种应用程序。
本文标题 :HC08传送类指令操作对CCR的影响如何?
本文地址 :CodeGo.net/8499968/ 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: