版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章AT89C51的指令系统本章介绍89C51的汇编语言指令系统。3.1指令系统概述
AT89C51的基本指令共111条,按指令所占的字节来分:
(1)单字节指令49条;
(2)双字节指令45条;
(3)三字节指令17条。按指令的执行时间来分:
(1)1个机器周期(12个时钟振荡周期)指令64条
(2)2个机器周期(24个时钟振荡周期)指令45条(3)只有乘、除两条指令的执行时间为4个机器周期(48个时钟振荡周期)。12MHz晶振:机器周期为1
s。6MHz晶振:机器周期为2
s。3.2指令格式
两部分组成,即操作码和操作数。
操作码:规定指令进行什么操作
操作数:指令操作的对象有单字节指令、双字节指令、三字节不同长度的指令,格式不同:(1)单字节指令:操作码、操作数
同在一个字节中。
(2)双字节指令:操作码+操作数。
(3)三字节指令:操作码+操作数+操作数。
3.3指令系统的寻址方式寻址方式就是在指令中说明操作数所在地址的方法。共7种寻址方式。
1.寄存器寻址方式
操作数在寄存器中
MOVA,Rn;(Rn)→A,n=0~7
MOVA,R1;若R1存放操作数位3CH,则指令的结果是A=3CH。执行表示把寄存器Rn的内容传送给累加器A寻址范围:(1)4组通用工作寄存区共32个工作寄存器。(OOH~1FH)(2)部分特殊功能寄存器,例如A、B以及数据指针寄存器DPTR等。2.直接寻址方式
操作数直接以单元地址的形式给出:
MOVA,40H;MOVTCON,A;MOVA,P1;
ADDA,43H
寻址范围:
(1)内部RAM的128个单元
(2)特殊功能寄存器。除了以单元地址的形式外,还可用寄存器符号的形式给出。例如:
MOVA,80H
与MOVA,P0是等价的。3.寄存器间接寻址方式
寄存器中存放的是操作数的地址,在寄存器前加前缀标志“@”
。访问内部RAM或外部RAM的低256个字节时,只能采用R0或R1作为间址寄存器。例如:
MOVA,@Ri
;i=0或1
其中Ri中的内容为40H,把内部RAM40H单元内容送A。寻址范围:(1)访问内部RAM低128个单元,其通用形式为@Ri(2)对外部内部RAM的64K字节的间接寻址,例如: MOVXA,@DPTR(3)片外数据存储器的低256字节例如:MOVXA,@Ri(4)堆栈区堆栈操作指令PUSH(压栈)和POP(出栈)使用堆栈指针(SP)作间址寄存器4.立即寻址方式
操作数在指令中直接给出,需在操作数前面加前缀“#”。例如:MOVA,#40H;A40H
MOVDPTR,#2000H;DPTR2000H5.基址寄存器加变址寄存器间址寻址方式
本寻址方式是以DPTR或PC作基址寄存器,以累加器A作为变址寄存器。例如:指令MOVCA,@A+DPTR
其中A的原有内容为05H,DPTR的内容为0400H,该指令执行的结果是把程序存储器0405H单元的内容传送给A。说明:(1)本寻址方式是专门针对程序存储器的寻址方式,寻址范围可达到64KB。(2)本寻址方式的指令只有3条:
MOVCA,@A+DPTR MOVCA,@A+PC JMP@A+DPTR(3)用程序指针PC作基地址,A作变址,形成操作数地址:@A+PC。例如:执行下列指令:地址目标代码汇编指令
21007406MOVA,#06H210283MOVCA,@A+PC210300NOP210400NOP
﹕﹕﹕﹕
210932DB32H
当执行到MOVCA,@A+PC时,当前PC=2103H,A=06H,因此@A+PC指示的地址是2109H,该指令的执行结果是A=32H。(4)用数据指针DPTR作基地址,A作变址,形成操作数地址:@A+DPTR。例如,执行下列指令:
MOVA,#01HMOVDPTR,#TABLEMOVCA,@A+DPTRTABLE:DB41HDB42H
﹕﹕上面程序中,变址偏移量A=01H,基地址为表的首地址TABLE,指令执行后将地址为TABLE=01H程序存储器单元的内容送给A,执行结果是A=42H。6.位寻址方式
MCS-51有位处理功能,可以对数据位进行操作。例如:MOVC,40H
是把位40H的值送到进位位C。寻址范围包括:(1)内部RAM中的位寻址区。位有两种等价的表示方法:(1)直接就是位地址,如40H;(2)另一种(28H).0,是28H单元中的最低位。(2)特殊功能寄存器中的可寻址位
在指令中有4种表示方法:a.直接使用位地址。例如PSW.5的位地址为0D5H。b.位名称的表示方法。例如:PSW.5是F0标志位,可使用F0表示该位。c.单元地址加位数的表示方法。例如:(0D0H).5。d.特殊功能寄存器符号加位数的表示方法。例如:PSW.5。位地址包括:内部RAM地址空间的可进行位寻址的128位和SFR地址空间的可位寻址的11个8位寄存器的88位。例:MOVC,07H;C(07H)SETBEX0;EX01
07H是内部RAM的位地址空间的1个位地址,该指令的功能是将07H内的操作数位送累加器C中。若(07H)=1,则指令执行结果C=1。
EX0是IE寄存器的第0位,相对位地址是A8H,指令功能是将EX0位置1,指令执行结果是EX0=1。7.相对寻址方式
在相对寻址的转移指令中,给出了地址偏移量,以“rel”表示,即把PC的当前值加上偏移量就构成了程序转移的目的地址:目的地址=转移指令所在的地址+转移指令的字节数+rel
偏移量rel是一带符号的8位二进制数补码数。范围是:–128-+127
例如:SJMP08H;双字节指令设PC=2000H为本指令的地址,则PC的当前值为2002H,转移目标地址为(2000H+02H)+08H=200AH例如:
JZ30H;若A=0时,跳转PCPC+2+rel;若A≠0时,则程序顺序执行这时一个零跳转指令,是双字节指令。指令执行完后,PC当前值为该指令首字节所在单元地址+2,所以,目的地址=当前PC的值+rel。向地址增加方向最大可转移(127+转移指令字节)个单元地址,向地址减少方向最大可转移(128-转移指令字节)个单元地址。
7种寻址方式及寻址空间,见表3-1。3.4AT89C51指令系统分类介绍111条指令,按功能分类,可分为下面5大类:(1)数据传送类(28条)
(2)算术操作类(24条(3)逻辑运算类(25条)
(4)控制转移类(17条)
(5)位操作类(17条)指令中符号的意义:Rn当前寄存器区的8个工作寄存器R0~R7(n=0~7)。Ri当前寄存器区中可作间接寻址寄存器的2个寄存器R0、
R1(i=0,1)。Direct
直接地址,即8位的内部RAM或特殊功能寄存器的字节地址。(RAM单元地址0~127,特殊功能寄存器的地址,如I/O端口、控制寄存器、状态寄存器(128~255)#data
包含在指令中的8位立即数。#data16
包含在指令中的16位立即数。rel
相对转移指令中的偏移量,为8位的带符号补码数。DPTR
数据指针,可用作16位的数据地址寄存器。bit
内部RAM或特殊功能寄存器中的直接寻址位。C(或Cy)进位标志位或位处理机中的累加器。addr11
11位目的地址(ACALL和AJMP;2K范围调用)addr16
16位目的地址(LCALL和LJMP;64KB范围调用)@间接寻址寄存器前缀,如@Ri,@A+DPTR(X)
X中的内容。((X))
由X寻址的单元中的内容。→箭头右边的内容被箭头左边的内容所取代。$当前指令的首地址3.4.1数据传送类指令
使用最频繁的一类指令,通用格式:
MOV<目的操作数>,<源操作数>属“复制”,而不是“搬家”数据传送类指令不影响标志位:Cy、Ac和OV,影响奇偶标志位P。1.以累加器为目的操作数的指令
MOVA,Rn;(Rn)→A,n=0~7 MOVA,@Ri;((Ri))→A,i=0,1 MOVA,direct;(direct)→A MOVA,#data;#data→A
例如:
MOVA,R6;(R6)→A,寄存器寻址
MOVA,70H;(70H)→A,直接寻址
MOVA,@R0;((R0))→A,间接寻址
MOVA,#78H;78H→A,立即寻址
2.以Rn为目的操作数的指令
MOVRn,A;(A)→Rn,n=0~7 MOVRn,direct;(direct)→Rn,n=0~7MOVRn,#dat;#data→Rn,n=0~7功能:是把源操作数的内容送入当前一组工作寄存器区的R0~R7中的某一个寄存器。3.以直接地址direct为目的操作数的指令
MOVdirect,A;(A)→directMOVdirect,Rn;(Rn)→direct,n=0~7MOVdirect1,direct2; MOVdirect,@Ri;((Ri))→direct MOVdirect,#data;#data→direct功能:把源操作数送入直接地址指出的存储单元。direct指的是内部RAM或SFR的地址。4.以寄存器间接地址为目的操作数的指令
MOV@Ri,A;(A)→((Ri)),i=0,1MOV@Ri,direct;(direct)→((Ri))MOV@Ri,#data;#data→((Ri))5.16位数传送指令
MOVDPTR,#data16;#data16→DPTR
唯一的16位数据的传送指令
,立即数的高8位送入DPH,立即数的低8位送入DPL。6.堆栈操作指令MCS-51内部RAM中可以设定一个后进先出(LIFO-LastInFirstOut)的区域称作堆栈.堆栈指针SP指出堆栈的栈顶位置。(1)进栈指令
PUSHdirect
先将栈指针SP加1,然后把direct中的内容送到栈指针SP指示的内部RAM单元中。例如:当(SP)=60H,(A)=30H,(B)=70H时,
执行:
PUSHACC
(SP)+1=61H→SP,(A)→61H
PUSHB ;(SP)+1=62H→SP,(B)→62H结果:(61H)=30H,(62H)=70H,(SP)=62H(2)出栈指令
POPdirectSP指示的栈顶(内部RAM单元)内容送入direct字节单元中,栈指针SP减1。例如:
当(SP)=62H,(62H)=70H,(61H)=30H,
执行:
POPDPH ;((SP))→DPH,(SP)-1→SPPOPDPL ;((SP))→DPL,(SP)-1→SP
结果:(DPTR)=7030H,(SP)=60H7.累加器A与外部数据存储器传送指令
MOVXA,@DPTR ;((DPTR))→A,读外部RAM/IOMOVXA,@Ri ;((Ri))→A,读外部RAM/IOMOVX@DPTR,A ;(A)→((DPTR)),写外部RAM/IOMOVX@Ri,A ;(A)→((Ri)),写外部RAM/IO功能:读外部RAM存储器或I/O中的一个字节,或把A中一个字节的数据写到外部RAM存储器或I/O中。
注意:伴随着RD*或WR*信号有效。
采用DPTR间接寻址,高8位地址(DPH)由P2口输出,低8位地址(DPL)由P0口输出。采用Ri(i=0,1)间接寻址,可寻址片外RAM的256个单元。Ri内容由P0口输出。MOV后“X”表示单片机访问的是片外RAM存储器或I/O。8.查表指令
共两条,用于读程序存储器中的数据表格的指令,均采用基址寄存器加变址寄存器间接寻址方式。
(1)MOVCA,@A+PC
以PC作基址寄存器,A的内容作为无符号整数和PC中的内容(下一条指令的起始地址)相加后得到一个16位的地址,该地址指出的程序存储单元的内容送到累加器A。注意:PSEN*信号有效。(读外部程序存储器的选通信号)
在访问外部RAM时,PSEN信号无效。例如:(A)=30H,执行地址1000H处的指令
1000H:
MOVCA,@A+PC
本指令占用一个字节,执行结果将程序存储器中1031H的内容送入A。优点:不改变特殊功能寄存器及PC的状态,根据A的内容就可以取出表格中的常数。缺点:表格只能存放在该条查表指令后面的256个单元之内,表格的大小受到限制,且表格只能被一段程序所利用。
(2)MOVCA,@A+DPTR
以DPTR作为基址寄存器,A的内容作为无符号数和DPTR的内容相加得到一个16位的地址,把由该地址指出的程序存储器单元的内容送到累加器A.例如:(DPTR)=8100H(A)=40H执行指令
MOVCA,@A+DPTR
本指令的执行结果只和指针DPTR及累加器A的内容有关,与该指令存放的地址及常数表格存放的地址无关,
因此表格的大小和位置可以在64K程序存储器中任意安排,一个表格可为各个程序块公用。两条指令是在MOV的后面加C,“C”是CODE的第一个字母,即代码的意思。9.字节交换指令
XCHA,Rn XCHA,direct XCHA,@Ri例如:
(A)=80H,(R7)=08H,(40H)=F0H(R0)=30H,(30H)=OFH执行下列指令:
XCHA,R7;(A)与(R7)互换
XCHA,40H;(A)与(40H)互换
XCHA,@R0;(A)与((R0))互换结果:(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H
10.半字节交换指令
XCHDA,@Ri
累加器的低4位与内部RAM低4位交换。例如:
(R0)=60H,(60H)=3EH,(A)=59H执行完XCHDA,@RO
指令,则(A)=5EH,(60H)=39H。1.数据传送类指令(1)片内数据传送指令1)以累加器A为目的操作数的指令有以下形式:【例1-1】将R1的内容传送至A。
MOVA,R1【例1-2】将立即数16H传送至A。
MOVA,#16H【例1-3】将R0指示的内存单元20H的内容传送至A。
MOVR0,#20HMOVA,@R0【例1-4】将30H单元的内容传送至A。
MOVA,30H2)以工作寄存器Rn为目的操作数的指令有以下形式:【例1-5】将A的内容传送至R1;30H单元的内容传送至R3;立即数80H传送至R7。用如下指令完成。
MOVR1,A;R1AMOVR3,30H;R3(30H)MOVR7,#80H;R780H3)以直接地址为目的操作数的指令有以下形式:【例1-6】将A的内容传送至30H单元;R7的内容传送至20H单元;立即数0FH传送至27H单元;40H单元内容传送至50H单元。用以下指令完成。
MOV30H,AMOV27H,#0FHMOV20H,R7MOV50H,40H4)以间接地址为目的操作数的指令:
【例1-7】将20H开始的32个单元全部清0。
MOVA,#00H;A00HMOVR0,#20H;R020H,以R0作地址指针
MOVR7,#20H;R7计数,R732LP1:MOV@R0,A;将R0指示的单元清0INCR0;R0R0+1,R0指下一单元
DJNZR7,LP1;R7R7-1,若R7不为0则转LP1重复5)16位数据传送指令有以下惟一形式:
【例1-8】将外部RAM的8000H单元的内容传送至A中。
MOVDPTR,#8000H;DPTR8000HMOVXA,@DPTR;A(8000H)(2)片外数据存储器传送指令【例1-9】有一输入设备,其端口地址为2040H,该端口数据为41H,将此值存入片内RAM的20H单元。用如下指令完成。
MOVDPTR,#2040H;MOVXA,@DPTR;A(2040H),即A41HMOV20H,A;(20H)A【例1-10】有一输出设备,其端口地址为2041H,将片内RAM的20H单元的数据输出给该设备。用如下指令完成。
MOVDPTR,#2041H;DPTR2041HMOVA,20H;A(20H)MOVX@DPTR,A;(2041H)A【例1-11】把片外RAM的2000H单元中的数61H取出,传送到片外RAM的3FFFH单元中去。用如下指令完成。
MOVDPTR,#2000H;DPTR2000HMOVXA,@DPTR;A(2000H),即A61HMOVDPTR,#3FFFH;DPTR3FFFHMOVX@DPTR,A;(3FFFH)A(3)程序存储器数据传送指令【例1-12】LED显示器0~9的字形显示段码在程序存储器中存放情况(表格)如下:210AH:0C0H字符“0”的段码210BH:0F9H字符“1”的段码210CH:0A4H字符“2”的段码210DH:0B0H字符“3”的段码210EH:99H字符“4”的段码从段码表中取出“3”并送LED(端口地址为1200H)显示,可用如下指令完成:2100H:MOVA,#0AH;A0AH(偏移量)2102H:MOVCA,@A+PC;A(2103H+0AH=210DH),即A0B0H2103H:MOVDPTR,#1200H;DPTR1200H2106H:MOVX@DPTR,A;输出显示“3”执行结果:A=0B0H,PC=2107H。字符“3”段码送1200H显示。【例1-13】在程序存储器中,有一表示数字字符ASCII代码的数据表格,表格的起始地址为7000H。7000H:30H(字符“0”的代码)7001H:31H(字符“1”的代码)7002H:32H(字符“2”的代码)7003H:33H(字符“3”的代码)7004H:34H(字符“4”的代码)7005H:35H(字符“5”的代码)将A中的数字2转换为字符“2”的ASCII代码,可用如下指令完成:1004H:MOVA,#02H;A02H1006H:MOVDPTR,#7000H;DPTR7000H1009H:MOVCA,@A+DPTR;A(7000H+02H),即A32H执行结果:A=32H,PC=100AH。(4)数据交换指令【例1-14】A=3FH,R0=20H,(20H)(即内部RAM的20H单元)=46H。执行指令:XCHA,@R0执行结果:A=46H,(20H)=3FH【例1-15】A=7FH,R0=20H,(20H)=35H执行指令:XCHDA,@R0执行结果:A=475H,(20H)=3FH【例1-16】将20H单元的内容与A的内容互换,然后将A的高四位存入R1指向的内部RAM单元中的低四位,A的低四位存入该单元的高四位。
XCHA,20H;A(20H)SWAPA;ACC.7~ACC.4与ACC.3~ACC.0互换
MOV@R1,A;(R1)A【例1-17】已知外部RAM的20H单元的内容为38H,内部RAM的20H单元的内容为08H,为使这两个单元的内容相互交换,可由下列指令完成:
MOVR1,20HMOVXA,@R1;A38H(片内20H单元的内容)
XCHA,@R1;A08H,(20H)38H(38H送片内20H单元)
MOVX@R1,A;(20H)08H(5)堆栈操作指令【例1-18】设堆栈栈底为30H,将现场A和DPTR的内容。已知A=12H,DPTR=3456H。可由以下指令完成:MOVSP,#30HPUSHAPUSHDPLPUSHDPH执行结果:SP=33H,片内RAM的31H、32H、33H单元的内容分别为12H、56H、34H。【例1-19】将上题中已压栈的内容弹出至原处,即恢复现场。可由以下指令完成:POPDPHPOPDPLPOPA执行结果:SP=30H,A=12HDPTR=3456H【例1-20】将片内2500H单元中的内容压入堆栈后弹出到片内40H单元。可由以下指令完成:MOVDPTR,#2500HMOVXA,@DPTR;A(2500H)MOV20H,A;(20H)AMOVSP,#30H;SP30HPUSH20H;20H单元内容压入堆栈POP40H;弹出到40H单元3.4.2算术操作类指令
单字节的加、减、乘、除法指令,都是针对8位二进制无符号数。执行的结果对Cy、Ac、OV
三种标志位有影响。但增1和减1指令不影响上述标志。1.加法指令
共有4条加法运算指令:
ADDA,Rn;(A)+(Rn)→A,n=0~7ADDA,direct;(A)+(direct)→AADDA,@Ri;(A)+((Ri))→A,i=0,1
ADDA,#data;(A)+#data→A一个加数总是来自累加器A,而另一个加数可由不同的寻址方式得到。结果总是放在A中。使用加法指令时,要注意累加器A中的运算结果对各个标志位的影响:(1)如果位7有进位,则置“1”进位标志Cy,否则清“0”Cy(2)如果位3有进位,置“1”辅助进位标志Ac,否则清“0”Ac(Ac为PSW寄存器中的一位)(3)如果位6有进位,而位7没有进位,或者位7有进位,而位6没有,则溢出标志位OV置“1”,否则清“0”OV。溢出标志位OV的状态,只有在带符号数加法运算时才有意义。当两个带符号数相加时,OV=1,表示加法运算超出了累加器A所能表示的带符号数的有效范围。
例3-1
(A)=53H,(R0)=FCH,执行指令
ADDA,R0结果:(A)=4FH,Cy=1,Ac=0,OV=0,P=1注意:上面的运算中,由于位6和位7同时有进位,所以标志位OV=0。
例3-2(A)=85H,(R0)=20H,(20H)=AFH,执行指令:
ADDA,@R0
结果:(A)=34H,Cy=1,Ac=1,OV=1,P=1注意:由于位7有进位,而位6无进位,所以标志位OV=1
2.带进位加法指令标志位Cy参加运算,因此是三个数相加。共4条:
ADDC A,Rn ;(A)+(Rn)+C→A,n=0~7ADDC A,direct ;(A)+(direct)+C→AADDC A,@Ri ;(A)+(Ri)+C→A,i=0,1 ADDC A,#data ;(A)+#data+C→A
例3-3(A)=85H,(20H)=FFH,Cy=1,执行指令:
ADDCA,20H结果为:(A)=85H,Cy=1,Ac=1,OV=0,P=1(A中1的位数为奇数)3.增1指令
5条增1指令:
INCA INCRn;n=0~7 INCdirect INC@Ri;i=0,1 INCDPTR不影响PSW中的任何标志。第5条指令INCDPTR,是16位数增1指令。指令首先对低8位指针DPL的内容执行加1的操作,当产生溢出时,就对DPH的内容进行加1操作,并不影响标志Cy的状态。4.十进制调整指令用于对BCD码十进制数加法运算结果的内容修正。
指令格式:DAA两个BCD码按二进制相加之后,必须经本指令的调整才能得到正确的压缩BCD码的和数。(1)十进制调整问题二进制数的加法运算原则并不能适用于十进制数的加法运算,有时会产生错误结果。例如:(a)3+6=90011+0101=1001运算结果正确(b)7+8=150111+1000=1111运算结果不正确(c)9+8=171001+1000=00001C=1结果不正确二进制数加法指令不能完全适用于BCD码十进制数的加法运算,对结果作有条件的修正
——十进制调整(2)出错原因和调整方法BCD码只用了了其中的10个,6个没用到的编码。(1010,1011,1100,1101,1110,1111)为无效码凡结果进入或者跳过无效码编码区时,其结果就是错误的。①相加结果大于9,说明已经进入无效编码区;②相加结果有进位,说明已跳过无效编码区。调整的方法是把结果加6调整,即所谓十进制调整修正。修正方法应是:(a)累加器低4位大于9或辅助进位位Ac=1,则进行低4位加6修正。(b)累加器高4位大于9或进位位Cy=1,则进行高4位加6修正。(c)累加器高4位为9,低4位大于9,则高4位和低4位分别加6修正。是否加6是通过执行指令:DAA
来自动实现的。例3-4
(A)=56H,(R5)=67H,把它们看作为两个压缩的BCD数,进行BCD数的加法。执行指令:
ADDA,R5DAA由于高、低4位分别大于9,所以要分别加6进行十进制调整对结果进行修正。01010110+)0110011110111101+)01100110100100011结果为:(A)=23H,Cy=1
可见,56+67=123,结果是正确的。
十进制调整,高、低位分别加6设累加器A中置有两位BCD数01010110(56),R2中为01110101(75),用两条指令实现十进制加法。ADDA,R2DAA(A)=01010110+)(R2)=0111010111001011+)01100110100110001BCD:结果1315.带借位的减法指令
4条指令:
SUBBA,Rn;(A)-(Rn)-Cy→A,n=0~7SUBBA,direct;(A)-(direct)-Cy→ASUBBA,@Ri;(A)-((Ri))-Cy→A,i=0,1SUBBA,#data;(A)-#data-Cy→A从累加器A中的内容减去指定的变量和进位标志Cy的值,结果存在累加器A中。如果位7需借位则置“1”Cy,否则清“0”Cy;如果位3需借位则置“1”Ac,否则清“0”Ac;如果位6需借位而位7不需要借位,或者位7需借位,位6不需借位,则置“1”溢出标志位OV,否则清“0”OV。例3-5
(A)=C9H,(R2)=54H,Cy=1,执行指令:SUBBA,R2
结果:(A)=74H,Cy=0,Ac=0,OV=1(位6向位7借位)
6.减1指令
4条指令:
DECA ;(A)-1→A DECRn ;(Rn)-1→Rn,n=0~7 DECdirect ;(direct)-1→direct DEC@Ri ;((Ri))-1→(Ri),i=0,1
减1指令不影响标志位。例3-6(A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH,执行指令
DEC A ;(A)-1→A DEC R7 ;(R7)-1→R7 DEC 30H ;(30H)-1→30H DEC @R1 ;((R1))-1→(R1)
结果为
(A)=0EH,(R7)=18H,(30H)=0FFH,(40H)=0FEH,P=1,不影响其他标志7.乘法指令
MULAB;A×B→BA
如果积大于255,则置“1”溢出标志位OV8.除法指令
DIVAB;A/B→A(商),余数→B如果B的内容为“0”(即除数为“0”),则存放结果的A、B中的内容不定,并置“1”溢出标志位OV。例3-7(A)=FBH,(B)=12H,执行指令
DIV AB
结果为
(A)=0DH,(B)=11H,Cy=0,OV=0。2.算术运算类指令(1)不带进位的加法指令[例2-1]已知A=B5H,R1=96H,执行指令:ADDA,R1A10110101+R11001011001001011运算结果:A=4BH,OV=D6
7⊕D7
C=0⊕1=1,其和产生溢出。则标志位:Cy=1,AC=0,OV=1。(2)带进位加法指令[例2-2]设A=0AEH,(20H)=81H,Cy=1,求两数的和及对标志位的影响。ADDCA,20H执行结果为:A=0AEH+81H+1=30H,Cy=1,AC=1,OV=1。
(3)加1指令[例2-3]设R0=7EH,DPTR=10FEH,(7EH)=0FFH,(7FH)=38H,执行下列指令:INC@R0;(7EH)=00HINCR0;R0=7FHINC@R0;(7FH)=39HINCDPTR;DPTR=10FFHINCDPTR;DPTR=1100HINCDPTR;DPTR=1101H执行结果:(7EH)=00H,R0=7FH,(7FH)=39H,DPTR=1101H(4)十进制调整指令[例2-4]A=56H,R3=67H,执行指令:ADDA,R3;A56H+67H(A=0BDH)DAA
则结果为:A=23H,Cy=1(5)带借位减法指令[例2-5]设A=0BDH,R1=73H,Cy=1执行指令:SUBBA,R1结果为:A=67H,Cy=0,AC=0,OV=0(6)减1指令(略)(7)乘法指令[例2-6]设A=50H,B=32H,执行指令:MULAB
A01010000×B00110010111110100000执行结果:A=0A0H,B=0FH,OV=1,Cy=0(8)除法指令[例2-7]设A=0FAH(250),B=14H(20)执行指令:DIVAB执行结果:A=0CH(12),B=0AH(10),OV=0,Cy=03.4.3逻辑操作类指令1.简单逻辑操作指令
(1)CLRA功能是累加器A清“0”。不影响Cy、Ac、OV等标志。
(2)CPLA功能:累加器A的内容按位逻辑取反,不影响标志。
例:设(A)=10101010B,执行指令CPLA结果(A)=01010101B
2.左环移指令
RLA功能是累加器A的8位向左循环移位,位7循环移入位0,不影响标志。设执行RL
A执行前(A)=01001011B,执行RLA后,(A)=10010110BA7A03.带进位左环移指令
RLCA功能:将累加器A的内容和进位标志位Cy一起向左环移一位,Acc.7移入进位位Cy,Cy移入Acc.0,不影响其它标志。A7A0A7A0CY设执行前RLCA指令前(A)=01001011,CY=1,执行RLCA指令后(A)=10010111B,CY=0。把进位标志连同A的内容一起向左移一位。A7CYA04.右环移指令
RRA功能是累加器A的内容向右环移一位,Acc.0移入Acc.7,不影响其它标志。设执行指令RRA指令前(A)=01001011B,执行RRA后(A)=10100101BA0A7A7A0
5.带进位环移指令
RRCA功能:累加器A的内容和进位标志Cy一起向右环移一位,Acc.0进入Cy,Cy移入Acc.7。设执行RRCA指令前(A)=01001010B,CY=1,执行RRCA指令后(A)=10100101B,CY=0,把进位连同A内容一起向右移。例:设(A)=5AH,C=1执行指令:CPLA后(A)=A5H执行指令:CLRA后(A)=001011010执行指令:RLA后(A)=B4H10110100执行指令:RRA后(A)=2DH执行指令:RRCA后(A)=ADH6.累加器半字节交换指令
SWAPA将累加器A的高半字节(Acc.7~Acc.4)和低半字节(Acc.3~Acc.0)互换。例3-8
(A)=0C5H,执行指令:
SWAPA
结果:(A)=5CH执行指令:RLCA后(A)=B5H总结:左移一位相当于乘2。例如:MOVA,#01H;01H送累加器ARLA;02H送ARLA;04H送ARLA;08H送A右移一位相当于除2。上述累加器A=08H,执行指令:RRA;(A)04HRRA;(A)02HRRA;(A)01H。累加器内容又变为1。7.逻辑与指令
ANL A,Rn;(A)∧(Rn)→A,n=0~7 ANL A,direct;(A)∧(direct)→A ANL A,#data;(A)∧#data→AANL A,@Ri;(A)∧((Ri))→A,i=0~1 ANL direct,A;(direct)∧(A)→direct ANL direct,#data ;(direct)∧#data→direct例3-9
(A)=07H,(R0)=0FDH,执行指令:
ANLA,R0
结果:(A)=05H8.逻辑或指令
ORLA,Rn;(A)∨(Rn)→A,n=0~7 ORLA,direct;(A)∨(direct)→A ORLA,#data;(A)∨data→A ORLA,@Ri;(A)∨((Ri))→A,i=0,1 ORLdirect,A;(direct)∨(A)→direct ORLdirect,#data
;(direct)∨#data→direct
例3-10
(P1)=05H,(A)=33H,执行指令
ORLP1,A
结果:(P1)=37H
9.逻辑异或指令
XRLA,Rn;(A)⊕(Rn)→A XRLA,direct;(A)⊕(direct)→A XRLA,@Ri
;(A)⊕((Ri))→A,i=0,1 XRLA,#data;(A)⊕#data→A XRLdirect,A
;(direct)⊕(A)→direct XRLdirect,#data
;(direct)⊕#data→direct
例3-11
(A)=90H,(R3)=73H执行指令:
XRLA,R3结果:(A)=E3H3.逻辑运算类指令(1)逻辑”与”指令[例3-1]设A=0AAH,将A的低4位保持不变,高4位屏蔽,然后将其经P1口输出。可执行如下指令:ANLA,#0FHMOVP1,A执行结果为:A=0AH(高4位清0,低4位不变)(2)逻辑”或”指令[例3-2]已知A=0D4H,执行指令:ORLA,#0FH11010100ⅴ0000111111011111执行结果为:A=0DFH(高4位不变,低4位置1)。(3)逻辑“异或”指令[例3-3]A=0D4H,执行指令:
XRLA,#0FH11010100⊕0000111111011011执行结果为:A=0DBH(高4位不变,低位求反)
(4)累加器A清0与求反[例3-4]利用求反指令,对40H单元内容求补(即求反加1)。
MOVA,40HCPLAINCAMOV40H,A[例3-5]要求将累加器A的内容送到P1口的低5位,传送时要绝对
不影响P1口的高3位。ANLA,#00011111B;屏蔽A中的高3位ANLP1,#11100000B;屏蔽P1口锁存器中的低5位ORLP1,A;将A中低5位送到P1口,保留P1的高3位3.4.4控制转移类指令
1.无条件转移指令
AJMPaddrll2K字节范围内的无条件跳转指令,64K程序存储器空间分为32个区,每区2K字节,转移的目标地址必须与AJMP下一条指令的地址的高5位地址码A15-A11相同。执行指令时,先PC加2,然后把addrll送入PC.10~PC.0,PC.15~PC.11保持不变,程序转移到目标地址。本指令是为能与MCS-48的JMP指令兼容而设的。2.相对转移指令
SJMPrel实现的程序转移是双向的。在编写程序时,直接写上要转向的目标地址标号就可以。例如:
LOOP: MOVA,R6
┇
SJMPLOOP ┇程序在汇编时,由汇编程序自动计算和填入偏移量。手工汇编时,偏移量rel的值则需程序设计人员计算。3.长跳转指令
LJMPaddr16指令执行时把指令的第二和第三字节分别装入PC的高位和低位字节中,无条件地转向addr16指出的目标地址。目标地址可以在64K程序存储器地址空间的任何位置。4.间接跳转指令
JMP@A+DPTR由A中8位无符号数与DPTR的16位数内容之和来确定。以DPTR内容作为基址,A的内容作变址。给A赋予不同的值,即可实现程序的多分支转移。5.条件转移指令
规定的条件满足,则进行转移,条件不满足则顺序执行下一条指令。当条件满足时,把PC装入下一条指令的第一个字节地址,再把带符号的相对偏移量rel加到PC上,计算出目标地址。
JZrel ;如果累加器为“0”,则转移
JNZrel ;如果累加器非“0”,则转移
例:累加器原始内容为01H,执行指令JZLABEL1;未发生跳变,不为0DECA;00HJZLABEL2;为0跳转到LABEL2处例:累加器
原始内容为00H,执行指令JNZLABEL1;不为0转移至LABEL1,为0,向下执行INCAJNZLABEL2;(A)=01H时,不为0跳转到LABEL2处6.比较不相等转移指令
CJNEA,direct,rel CJNEA,#data,rel CJNERn,#data,rel CJNE@Ri,#data,rel比较前面两个操作数的大小,如果它们的值不相等则转移。如果第一操作数(无符号整数)小于第二操作数(无符号整数),则置“1”Cy,否则清“0”Cy。以上四条指令都执行以下操作:a:若目的操作数=源操作数;PCPC+3,CY0b:若目的操作数>源操作数;则程序转移PCPC+3+relCY0c:若目的操作数<源操作数;则程序转移PCPC+3+relCY1d:指令执行后根据CY的状态判断数值大小CY=0,目的操作数>源操作数CY=1,目的操作数<源操作数由于rel的地址范围为-128-+127,因此指令相对转移范围为-125-+130例:下列程序只有当P1端口输入位01H时程序才进行下去,否则计算机等待:MOVA,#01HWAIT:CJNEA,P1,WAIT;P1口为01H向下执行7.减1不为0转移指令这是一组把减1与条件转移两种功能结合在一起的指令。共两条指令:
DJNZRn,rel ;n=0~7 DJNZdirect,rel
将源操作数(Rn或direct)减1,结果回送到Rn寄存器或direct中去。如果结果不为0则转移。允许程序员把寄存器Rn或内部RAM的direct单元用作程序循环计数器。主要用于控制程序循环。以减1后是否为“0”作为转移条件,即可实现按次数控制循环。例:RAM地址为40H、50H和60H的内容分别为01H、70H和15H。
执行指令:DJNZ40H,LABEL-1;为0,顺序执行DJNZ50H,LABEL-2;6F不为0,转到LABEL-2DJNZ60H,LABEL-3;其结果:程序转到LABEL-2处,40H、50H和60H单元的内容分别为00H、6FH、15H。8.调用子程序指令(1)短调用指令
ACALLaddrll与AJMP指令相类似,是为了与MCS-48中的CALL指令兼容而设的。(2)长调用指令
LCALLaddr169.子程序的返回指令
RET执行本指令时: (
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- AI换脸趣味视频创新应用课程设计
- Snort日志分析教程课程设计
- 基于同态加密的隐私计算原型价值课程设计
- 城轨营销训练课程设计
- 测微目镜的课程设计
- 基于模拟退火车间调度应用案例课程设计
- 基于IoT的智慧养老监护系统项目开发课程设计
- 生物信息学DNA序列比对课程设计课程设计
- ug加工实例课程设计
- 图像压缩的离散余弦变换(DCT)对比分析课程设计
- 2026年秋季学期新交际英语(新版)一年级上册教学计划及进度表
- 2026新教材语文 统编版语文五年级上册-语文园地一
- 2026广东珠海市轨道交通局招聘2人笔试参考题库及答案详解
- 河道采砂后砂坑生态平复治理施工方案
- 生态环境法学 课件全套 周珂
- 1.1 数说祖国 课件 (共18张) 北师大版数学四年级上册
- 2026宁夏农垦集团部分所属企业招聘27人笔试题库及参考答案详解(夺分金卷)
- 2026年重症医学科西院区机械通气培训试题及答案
- 煤化工产业发展研究及技术创新与产业链布局策略分析报告
- 2025年高考真题-生物(江西卷) 含解析
- 2026年教师资格证(高中)《学科知识与教学能力》真题
评论
0/150
提交评论