版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、彭周华12.1 2.1 寻址方式寻址方式2.2 2.2 数据传送与交换指令数据传送与交换指令2.3 2.3 算术运算和逻辑运算指令算术运算和逻辑运算指令2.4 2.4 控制转移指令控制转移指令2.5 2.5 位操作指令位操作指令2.6 2.6 小小 结结2能为能为CPUCPU识别并执行的指令的集合。识别并执行的指令的集合。n5151系列单片机的指令系统包括以下几类系列单片机的指令系统包括以下几类数据传送交换类数据传送交换类算术运算算术运算逻辑运算逻辑运算循环类循环类控制转移类控制转移类位操作类位操作类3n51单片机指令系统具有以下3个特点: 执行速度快大多数指令为单机器周期指令,少数(大多数指
2、令为单机器周期指令,少数(4545条)为双条)为双机器周期指令,机器周期指令,2 2条四机器周期指令(乘,除)条四机器周期指令(乘,除) 指令短大多数为大多数为1-21-2字节,少数为字节,少数为3 3字节字节 丰富的位操作指令对内部对内部RAMRAM寄存器和特殊功能寄存器可进行位寻址。寄存器和特殊功能寄存器可进行位寻址。以上特点使之具有以上特点使之具有实时控制实时控制和和数据运算数据运算的功能。的功能。4nMCS-51MCS-51单片机汇编语言单片机汇编语言: : 操作符操作符 目的操作数,源操作数目的操作数,源操作数 MOV A, B MOV A, B操作符操作符- -指明该指令完成什么操
3、作;指明该指令完成什么操作;操作数操作数- -是指明该指令的操作对象。是指明该指令的操作对象。5 Rn:Rn: n=(0 n=(07 7),当前工作寄存器),当前工作寄存器R0R0R7R7中的一个中的一个 RiRi: i=(0: i=(0、1 1),),R0R0和和R1R1寄存器中的一个,用作间接寻址寄存器中的一个,用作间接寻址寄存器寄存器 dir:dir: 8 8 位直接字节地址(片内位直接字节地址(片内 RAM RAM 和和 SFR SFR ) #data#data: 8: 8位立即数,即位立即数,即8 8位常数。可以为位常数。可以为2 2进制进制(B)(B)、1010进进制(制(D D)
4、、)、 1616进制进制(H)(H)、 字符(字符( ) #data16#data16: : 表示表示1616位立即数,即位立即数,即1616位常数。位常数。6addr16 addr16 : : 表示表示1616位地址位地址 addr11addr11 : : 表示表示1111位地址位地址relrel : : 相对偏移量(为一字节补码),用于相对转相对偏移量(为一字节补码),用于相对转移指令中移指令中bitbit : : 位地址(在位地址空间中)位地址(在位地址空间中)$ $: : 表示当前指令的地址表示当前指令的地址11.11.():():表示存储器单元的内容表示存储器单元的内容7n寻址方式寻
5、址方式是指提供操作数的形式,即寻找操作数或操作数所在地址的方式。n为了区别指令中操作数的地址空间,对于不同的存储器中的数据采用不同的寻址方式。RAM区SFR区外部ROM区内部ROM区(EA=1)0000H0FFFHFFFFH外部RAM区0000HFFFFH00H7FHFFH80H1000H40H8n在 MCS -51单片机指令系统中, 有以下7种寻址方式: (1) 立即寻址;(2) 直接寻址;(3) 寄存器寻址;(4) 寄存器间接寻址;(5) 变址寻址;(6) 位寻址;(7) 相对寻址。 9n 立即寻址方式是指操作数包含在指令字节中。 跟在指令操作码后面, 该操作数称为立即数。 立即数有一字节
6、和二字节两种可能。例例: : MOV A, 80H ;A #80, MC=7480 MOV DPTR, 2000H;DPTR 2000H,MC=902000注意:立即数前面加前缀“#”,若立即数的首位为A-F,前面要加0 10n在指令中直接给出操作数地址的寻址方式。n在MCS -51 单片机指令系统中, 直接寻址方式中可以访问 3 种存储器空间: (1) 内部RAM区(00H-7FH)。(2) SFR区(80H-FFH)。(3) 位地址空间。 例例: : MOV A, 25H ;A (25H) MC:E525 MOV P0, #45H ;P0 45H MC:758045 MOV 30H, 20
7、H ;(30H) (20H) MC:852030注意:特殊功能寄存器可以用它的地址,也可以用它的寄存器名。 MOV A, P0等价于 MOV A, 80H11指令中以指令中以通用寄存器的内容通用寄存器的内容作为操作数的寻址方式作为操作数的寻址方式n操作数存放在通用寄存器中。n通用寄存器通用寄存器包括包括:A,B, R0R7, DPTR 。A寄存器可以寄存器寻址,也可以直接寻址(ACC)B寄存器在乘除法中寄存器寻址,其它指令中为直接寻址。注意:直接寻址与寄存器寻址的差别在于:直接寻址是操作数所在的地址出现在指令码中,寄存器寻址是寄存器编码出现在指令码中。例例: : MOV A,25H ;(25H
8、)A, MC:E525注意:注意:寄存器寻址的特点是指令代码短,执行快。12例例: : MOV A,R0 ;R0A, MC:E8MUL AB ;A*B BA, MC:A4MOV B, R0 ;R0 B, MC:88F0PUSH ACC ; A的内容压入堆栈 MC:C0E0ADD A, ACC ; ADD A, A?13n指令中以寄存器中的内容为地址,将地址所对应的内容作为操作数的寻址方式。操作数存放在以寄存器内容为地址的单元中。寻址寄存器:R0,R1,DPTR 。间接寻址前面加表示。如R0,R1,DPTR寻址区域:内部数据存储器和外部数据存储器如何间接寻址64K空间? 低地址由R0或R1提供,
9、高地址由P2口提供 以DPTR寄存器内容作为16为地址14注意: 分别采用指令MOV,MOVX区别是对内部RAM还是对外部RAM进行寻址。 对外部RAM的操作只有数据传送类指令。例例: : MOV A,#0F0HMOV R0,#20HMOV R0,A ;A(20H) 功能:累加器内容送至地址为功能:累加器内容送至地址为20H20H的内部的内部RAMRAM中中。 1500000000111111110000000000HR0FFHA02H111100001111000000000010例例: : MOV A,#0F0HMOV R0,#02HMOV R0,A16例例: : MOV P2, #3FH
10、MOV R1,#21HMOVX A,R1;外部外部RAMRAM(地址为(地址为R1R1中的内容)中的内容)A A0000000011110111000000000000HR1FFFFHA3F21H11110111001000010000000000111111P217例例: : MOV DPTR, #3F21H,MOVX DPTR,A;A A以以DPTRDPTR内容为地址的外部内容为地址的外部RAMRAM0000000011111111111101110000HFFFFH3F21H001000010000000000111111DPTR11110111A18n以DPTR或PC寄存器内容为基地址
11、,和A的内容相加形成操作数的地址。例例: : MOVC A, A+DPTR ; (A+DPTR) AMOVC A,A+PC ; (A+PC) A注意: 变址寻址只能对程序存储器进行寻址操作 变址寻址只有读操作,而没有写操作 采用MOVC指令19例例: : MOV DPTR,#0200HMOV A, #03HMOVC A, A+DPTR ; (A+DPTR) A0000000000011111000000000000HFFFFH0203H000000000000000000000010A0000001100011111DPTR20例例: : MOVC A, A+PC ; (A+PC) A 000
12、0100000001111000000010000HFFFFH0409H00000100A00001111PCMOVC A+PC, A ;指令功能?21对位地址中的内容进行位操作的寻址方式对位地址中的内容进行位操作的寻址方式n 位寻址只对片内RAM中20H2FH中的128个位地址及SFR中的可位寻址单元进行寻址操作例例: : SETBSETB 20H 20H ; 1 120H20H位位MOVMOV 32H 32H,C C ; CyCy32H32H位位ORL ORL C, 5AH C, 5AH ;22n以程序计数器PC的内容作为基值,加上指令所给出的偏移量(补码) ,形成目标地址(新的PC值),
13、称为相对寻址。例例: SJMP 08H(目的地址,通常用符号表示目的地址,通常用符号表示)PCPC+08H当前当前PC内容为当前指令地址内容为当前指令地址+2PC转移到转移到$+02H+08H;相对寻址只修改PC值,主要用于程序的跳转23注意:n指令中根据操作数所在的存储器空间不同而采用不同的寻址方式。n特殊功能寄存器中的操作数常使用符号字节地址和符号位地址的形式进行操作,而不直接使用字节地址和位地址。(PSW, TMOD, P0, IE,) 符号地址( C, RS0, EA, P1.1)位地址24n立即寻址-立即数(#)n直接寻址-直接给出地址n寄存器寻址-编码(A,B,R0-R7,DPTR
14、)n间接寻址-寄存器的内容作为地址(R0,R1,DPTR).数据空间,片内用MOV,片外用MOVXn变址寻址-基地址(PC,DPTR)+变址(A). 程序空间,片内与片外都用MOVCn位寻址-位地址n相对寻址-PC+偏移量,只修改PC的值思考题1, 3,425nMCS-51单片机的数据传送和交换类指令共有28条,分为:1.内部数据传送指令2.外部数据传送指令3.堆栈指令4.数据交换指令26n在MCS-51单片机中,数据传送是最基本和最主要操作指令。n 数据传送操作可以在片内RAM和SFR内进行,也可以在累加器A和片外存储器之间进行。n 指令中必须指定传送数据的源地址和目的地址,以便机器执行指令
15、时把源地址中内容传送到目的地址中,但不改变源地址中内容。27n指令通式指令通式为:为: MOV MOV , 其中,其中, 为源字节,为源字节, 为目的字节为目的字节指令功能指令功能是把源地址内容送到目的地址单元中,是把源地址内容送到目的地址单元中,源地址单元中的内容不变。源地址单元中的内容不变。n这类指令的源操作数和目的操作数地址都在单片这类指令的源操作数和目的操作数地址都在单片机内部,可以是片内机内部,可以是片内RAMRAM的地址,也可以是特殊的地址,也可以是特殊功能寄存器功能寄存器SFRSFR的地址。的地址。28n按照寻址方式,内部数据传送指令又可以分为立即型、直接型、寄存器型和寄存器间址
16、型等四类。n立即寻址型传送指令的特点是源操作数是立即数,处在指令码的第二字节或第三字节位置上,如:29例:已知:R0=20H,试问如下指令执行后累加器A、R7、20H和21H单元中内容是什么?MOV A, #18HMOV R7, #28HMOV R0, #08HMOV 21H, #48HA=18H,R7=28H,(20H)=08H, (21H)=48H。30n直接寻址型传送指令的特点是指令码中至少含有一个源操作数或目的操作数的直接地址,直接地址处在指令的第二字节或第三字节位置上。如:31例:已知:R132H、(30H)=AAH、(31H)=BBH、(32H)=CCH,试问如下指令执行后累加器A
17、、50H、 R6、32H和P1口中的内容是什么。MOV A, 30HMOV 50H,AMOV R6 , 31HMOV R1, 30HMOV P1, 32H A=AAH (50H)=AAH R6=BBH (32H)=AAH P1 =AAH32n寄存器寻址型传送指令的特点是目的地址或源地址含有寄存器寻址的通用寄存器(A,B,R0-R7,DPTR)n第一条指令和第二条指令属于同一种类型,用于累加器和工作寄存器之间的数据传送,n第三条指令是把工作寄存器Rn中内容传送到以direct为地址的RAM单元。MOV A, Rn ;A RnMOV Rn, A ; A RnMOV direct, Rn ;Rn (
18、direct)33MOV A, Ri ;A (Ri)MOV Ri, A ;A (Ri)MOV direct,Ri ; (Ri) (direct)n这三条指令的共同特点是Ri中存放的不是操作数本身,而是操作数所在存储单元的地址。n n n特点特点特点是含有间接寻址寄存器是含有间接寻址寄存器是含有间接寻址寄存器 RiRiRi34例:例:已知:(40H)=11H、(41H) =22H、R0=40H和R141H,试问如下指令执行后累加器A、40H、41H和42H单元中内容是什么。 MOV A, R0 MOV R1,A MOV 42H,R1 A=11HA=11H,(40H)=11H(40H)=11H,(
19、41H)=11H(41H)=11H,(42H)=11H(42H)=11H351.内部RAM、SFR之间的数据传送MOV dirRi Rn#dataAMOV A, Rn #data dir RiMOV dir,A RnRi #data dir MOV Rn, A dir #dataMOV Ri,Adir #data36特别注意不存在下列指令nMOV Rn, RinMOV Ri, RnnMOV Rn, RnnMOV Ri, Ri37EP1: R1=20H,(20H)=55HMOV A, R1MOV 30H, R1 EP2: (40H)=30H, MOV R7,40HMOV R7,40H A=55H
20、, (30H)=55H EP3: MOV DPTR,0A213H R7=30H, R7=40H DPTR=A213H 38EP:Q:(1) MOV A,R3 MOV R1,A(2) MOV 20H,R3 MOV R1,20H39A 外部数据存外部数据存储器储器程序存储器程序存储器 Ri , A DPTR , A A , Ri A , DPTRMOVXMOVCA , A+PCA , A+DPTRMOVXMOVC40例:实现片外数据存储器数据传送(2000H)(2100H)片 外RAM地 址内 容2000HXDPTR2100Hx41MOV DPTR,#2000H ; DPTR= 2000HMOVX
21、 A,DPTR ; AXMOV DPTR,#2100H ; DPTR= 2100HMOVX DPTR,A ; (2100H)X如何实现数据交换?如何实现数据交换?例:实现片外数据存储器数据传(2000H)(2100H)。使用P2口和8位寄存器Ri间址.42MOV P2,#20H ;高位地址MOV R0,#00 ;低位地址MOVX A, R0 ;读片外RAMMOV P2,#21H ;改变高位地址MOVX R0,A ;写片外RAM8位间址注:注: n只能从程序存储器读取数据到A累加器。n只能使用变址寻址方式,多用于常数查表程序。MOVC A,A+DPTR ;A(A+DPTR) 查表范围为64KB程
22、序存储器任意空间。MOVC A,A+PC ;A(A+PC) 改变改变A A的值;的值; A A的内容为无符号数,只能在查表指令后的内容为无符号数,只能在查表指令后256B 256B 范围。范围。43例:分析下列程序执行后,A=?MOV DPTR,#M2 ;M2M2的地址送的地址送DPTRDPTRMOV A,#01H ;A=01HA=01H;A=A=(A+DPTRA+DPTR)= =(1+M21+M2)M1: RET ;子程序结束子程序结束M2: DB 66H,77H,88H,99H ;常数表格常数表格MOV A,#02H ;A=02HA=02H;PC=M1, A=PC=M1, A=(A+PCA
23、+PC)= =(2+M12+M1)M1: RET ;单字节;44PCn初始化是SP指向07H, 数据从08H单元开始压入。n堆栈按字节数据操作,每次压入和弹出一个8位数。nSP指向栈顶,按地址增加方向生长。先加后压,先弹后减。45 :PUSHPUSH dir ;SP+1 SP, (dir) (SP) :POPPOP dir ;(SP)(dir),SP-1 SP46MOV A,#90H; MOV SP,#15H;PUSH ACC; POP 20H; 堆栈操作示意图堆栈操作示意图SP90HSP=16H,(16H)=90H(20H)=90H, SP=15H47:设 A=02H,(20H)=56H,执
24、行下列指令后,SP,A,(20H)=?SBR: MOV SP,#30H ;设栈底 PUSH ACC ;保护现场 PUSH 20H MOV A,#0 MOV 20H,#01 ;A=0 POP ACC ; POP 20H ;片内 RAM 34H 33H 32H 31H 30H 堆栈操作示意图堆栈操作示意图SP0256P7,P8n 实现片内RAM区的数据双向传送(3类):设设A= 29HA= 29H,(,(2AH ) 2AH ) 28H 28H XCHXCH A A,2AH 2AH ;A=A=?(2AH)=(2AH)=?XCH 60HXCH 60H,61H ?61H ?A48 XCHD A,Ri ;
25、A03 (Ri)03:A=34H (50H)=96HMOV R1, #50HXCHD A,R1 ;A? (50H)? n(Ri)A 49 n(Ri)A eXCHange DigitA=36H,(50H)=94H SWAP A;A47 A03:A=0FH 执行 SWAP A 50 AA A=F0H:将片内RAM2AH和 2BH单元中的ASCII码转换成压缩式BCD码存入20H单元.片内 RAM地址内容2BH35H2AH38H20H51MOVMOV R0 R0,#2AH#2AHMOVMOV R1 R1,#2BH#2BHXCHDXCHD A A,R0 R0 ;低4位交换A=X8HSWAPSWAP A
26、 A ;A=8XHXCHD AXCHD A,R1 R1 ;低4位交换,A=85HXCHXCHA A,20H 20H ;(20H)=85H85Hn51单片机算术运算指令有加, 进位加, 借位减,加1,减1,乘除指令。针对8位二进制。执行的结果对Cy,Ac,Ov位有影响,但加1减1不影响。n逻辑运算指令有与,或,异或指令。522.3.1 算术运算和逻辑运算对标志位的影响53n凡是对A 操作指令(包括传送指令)都将A中1个的奇偶反映到PSW的P标志位上。即A中奇数个“1”,P=1;偶数个“1”,P=0。n传送指令、加1、减1指令、逻辑运算指令不影响Cy、OV、AC 标志位。n加、减运算指令影响P、C
27、y、 OV、AC标志位, 乘除指令使OV=0,当乘积大于255,或除数为0时,OV置1。n对进位位Cy(指令中用C表示)进行操作的指令和大环移指令,显然会影响Cy。标志位的状态是控制转移指令的条件2.3.2以A为目的操作数的算术、逻辑运算指令(24条) dirRi Rn#dataAADDADDADDCADDCSUBBSUBBANLANLORLORLXRLXRLA ,Rn,Ri#datadir加加进位加进位加借位减借位减与与或或异或异或54ADD ADD with with C CarryarrySubSubtract with tract with B Borrow orrow E Ex xc
28、lusive-Oclusive-OR R L Logicogic55:判断下列指令执行后A=?,Cy=?, OV?,P=? MOV A,#9BH ;10011011ADD A, #9BH; A=36H,Cy=1,AC=1,OV=1,P=0:判断下列指令执行后A=?,Cy=?, OV?,P=? CLR CMOV A,#97H ;10010111ADDC A, #95H; 10010101A=2DH,Cy=1,AC=0,OV=1,P=056:判断标志位Cy, OV,A?MOV A, #56H ;01010110ADD A, #74H ;01110100ADD A,ACC ; 01010110 01
29、110100 11001010 Cy=0,OV=1,A=CAH 11001010110010100 Cy=1,OV=0,A=94H2.3.3 以dir为目的操作数逻辑运算指令(6条)A#data dirANLANLORLORLXRLXRLdir ,#dataA57与或异或n算术类与逻辑运算指令的操作意义非常明确注意:(1)减指令只有带借位减,因此在多字节减法中,最低字节作减法时,注意先清CY。(2)逻辑运算是按位进行的,两数运算的运算法则是:与:有“0”则“0”;与与0 0相与,其值全为相与,其值全为0 0,与,与1 1相与,其值不变相与,其值不变或:有“1”则“1”与与0 0相或,其值不变,
30、与相或,其值不变,与1 1相或,其值全为相或,其值全为1 1异或:相同为“0” , 相异为“1”;与与“0”0”异或异或, ,值不变值不变; ;与与“1”1”异或异或, ,值变反。值变反。5859 10000110 10001111A=8FH 10000110 10001001A89Hn加1指令(IncIncrementrement)A ARnRidirDPTRINCINC;A+1A+1A A;Rn+1Rn;(Ri)+1(Ri);(dir)+1(dir);DPTR+1DPTRn减1指令(Decrement)DECDECARnRidir;A-1A;Rn-1Rn;(Ri)-1(Ri);(dir)-
31、1(dir)60加1减1不影响标志位61:分析下列指令执行结果MOV 20H,#55HINC 20HMOV R7, #81HDEC R7n计算机完成二进制加法,其结果为二进制,如果是十进制相加(即BCD码相加)想得到十进制的结果,就必须进行十进制调整(即BCD 码调整)。调整指令: DA A ;将A中二进制相加和调整成BCD码。调整方法:和低4位大于9或有半进位(AC),则低4位加6; 和的高4位大于9或有进位(CY),则高4位加6。62u指令根据相加和及标志自行进行判断,因此该指令应紧跟在加指令之后,至少在加指令和该指令之间不能有影响标志的指令。uDA A指令只对一个字节和调整,如为多字节相
32、加必须进行多次调整。u此指令不能对减法结果进行调整。完成56+17的编程。(56和17用BCD码表示) MOV A,#56H ;A存放BCD码56H MOV B,#17H ;B存放BCD码17H ADD A, B ;A=6dH DA A ;A=73H SJMP $5 6 H1 7 H6 d H+67 3 H动态停机6364(1)A取反CPL A ; C Comomplplementement(2)A清零CLR A ;CLEAR 0A(3)A右循环RR A;Rotate Right0100101110010110A(4)A左循环RL A ;Rotate Left00111101651001111
33、0(5)A右大循环RRC ACY110010110(6)A左大循环RLC ACY66100101101100101111001011111P9P9(1)乘法指令(Multiply)MUL AB ; AxB BA,实现8位无符号数乘法 (2)除法指令(Divide)DIV AB ; AB 商在A中,余数在B中67P6P6例1:将21H单元的低三位和20H单元低五位合并为一个字节,并送至30H单元,要求(21H)的低三位放在高位。6800001111111100010010111120H21H30HACy6911110001R411110011R57000010001R7Any other sol
34、utions?Any other solutions?71P11,P14P11,P14:改变指令的执行顺序,转到指令指示的新的:改变指令的执行顺序,转到指令指示的新的PCPC地址执行。地址执行。nMCS-51MCS-51单片机的控制转移指令有以下类型:单片机的控制转移指令有以下类型: 无条件转移无条件转移:无需判断,执行该指令就转移到目的地址。:无需判断,执行该指令就转移到目的地址。 条件转移条件转移:需判断:需判断标志位标志位是否满足条件,满足条件转移是否满足条件,满足条件转移到目的地址,否则顺序执行。到目的地址,否则顺序执行。 绝对转移绝对转移:转移的目的地址用绝对地址指示,通常为无:转移
35、的目的地址用绝对地址指示,通常为无条件转移。条件转移。 相对转移相对转移:转移的:转移的目的地址用相对于当前目的地址用相对于当前PCPC的偏差的偏差(偏(偏移量)指示,通常为条件转移。移量)指示,通常为条件转移。 长转移或长调用长转移或长调用:目的地址距当前:目的地址距当前PC 64KBPC 64KB地址范围地址范围 短转移或短调用短转移或短调用:目的地址距当前:目的地址距当前PC 2KBPC 2KB地址范围。地址范围。72说明:说明:n该该指令功能指令功能是是保护断点保护断点,即将当前,即将当前PCPC(下一条指令的首地址)压入堆栈。(下一条指令的首地址)压入堆栈。子程序的入口地址子程序的入
36、口地址 addr16 addr16 送送PCPC,转子程序执行。,转子程序执行。n本指令为本指令为64KB64KB地址范围内的调子程序指令,子程序可在地址范围内的调子程序指令,子程序可在64KB64KB地址空间的任一处。地址空间的任一处。n本指令的机器码为三字节本指令的机器码为三字节: 12 addr16: 12 addr16。LCALLLCALL addr16 addr16 ;addr16addr16PC0PC015 15 73A Absolute bsolute CallCall说明:说明:n该该指令功能指令功能是是保护断点保护断点,即当前,即当前PCPC压入堆栈。压入堆栈。addr11P
37、C0addr11PC01010, ,而而PC11PC111515保持原值不变。保持原值不变。n本指令为本指令为2KB2KB地址范围的调子程序指令,子程序入口距当地址范围的调子程序指令,子程序入口距当前前PCPC不得超过不得超过2KB2KB地址范围。地址范围。n本指令的机器码为本指令的机器码为二字节二字节,设,设addr11addr11的各位是的各位是a10a9a8a2a1a0a10a9a8a2a1a0,则,则ACALLACALL指令指令机器码机器码a10a9a8a10a9a81000110001a7a6a5a4a3a2a1a0a7a6a5a4a3a2a1a0,其中其中1000110001是是A
38、CALLACALL指令的操作码。指令的操作码。 ACALLACALL addr11 ;addr11 addr11 ;addr11PC0PC0101074例:例:子程序调用指令子程序调用指令ACALLACALL在程序存储器中的首地址为在程序存储器中的首地址为0100H0100H,子程序入口地址为,子程序入口地址为0250H0250H。试确定能否使用试确定能否使用ACALLACALL指令实现调用?如果能使用,确定该指令的机指令实现调用?如果能使用,确定该指令的机器码。器码。75解解: : 因为因为ACALLACALL指令首地址在指令首地址在0100H0100H,而,而ACALLACALL是是2 2
39、字节指令,字节指令,所以下一条指令的首地址在所以下一条指令的首地址在0102H0102H。0102H0102H和和0250H0250H在同一在同一2KB2KB地址范围内,故地址范围内,故可用可用ACALLACALL调用调用。调用入口地址为。调用入口地址为0250H0250H,ACALLACALL指令的机器码形式为:指令的机器码形式为: 0100101 1 00010001 0101 0000B=5150H 0101 0000B=5150HRET RET ( (RetReturn)urn) ;从调用子程序返回。;从调用子程序返回。功能:功能:从栈顶弹出断点到从栈顶弹出断点到PCPC,从子程序返回
40、到主程序。,从子程序返回到主程序。RETIRETI ( (RetReturn urn I Interrupt)nterrupt); 从中断服务程序返回。从中断服务程序返回。功能功能:从栈顶弹出断点到:从栈顶弹出断点到PCPC,并恢复中断优先级状态,并恢复中断优先级状态触发器,从中断服务程序返回到主程序。触发器,从中断服务程序返回到主程序。 76(1 1)短转移)短转移( (A Absolute bsolute J Ju umpmp) )说明:说明:n转移范围转移范围:本指令为:本指令为2KB2KB地址范围内的转移指令。对地址范围内的转移指令。对转移目的地址的要求与转移目的地址的要求与ACALL
41、ACALL指令对子程序入口地指令对子程序入口地址的要求相同。址的要求相同。n机器码形式机器码形式:本指令为:本指令为2 2字节指令。设字节指令。设addr11addr11的各位的各位是是a10a9a8a2a1a0,a10a9a8a2a1a0,则指令的机器码为:则指令的机器码为:a10a9a8a10a9a80000100001a7a6a5a4a3a2a1a0a7a6a5a4a3a2a1a0。 AJMP AJMP addr11 addr11 ;addr11addr11PC0PC0101077(2)长转移(Long Jump)说明:n本指令为64KB程序存储空间的全范围转移指令。转移地址可为16位地
42、址中的任意值。n本指令为3字节指令,机器码:02 addr16。(3)间接转移 LJMP LJMP addr16 addr16 ;addr16addr16PC0PC01515 JMP JMP A+DPTR A+DPTR ;A+DPTRA+DPTRPC PC 例:A=02H,DPTR=2000H,指令JMPA+DPTR执行后,PC=2002H。即程序转移到2002H地址单元去执行。78例例:分析下面一段程序:分析下面一段程序: MOV MOV A, #02h;A, #02h; MOV MOV DPTRDPTR,#TABLE#TABLE JMP JMP A+DPTRA+DPTR TABLE TAB
43、LE: AJMP AJMP PROC0 PROC0 AJMPAJMP PROC1 PROC1 AJMPAJMP PROC2 PROC2 AJMP AJMP PROC3 PROC3 根据根据JMP A+DPTRJMP A+DPTR指令的操作可知,指令的操作可知,当当A=00HA=00H时,程序转入到地址时,程序转入到地址 PROC0 PROC0 处执行;处执行;当当A=02HA=02H时,转到时,转到PROC1PROC1处执行处执行可见这是一段多路转移程序,进入的路数由可见这是一段多路转移程序,进入的路数由A A确定。确定。因为因为AJMPAJMP指令指令是是2 2字节指令,所以字节指令,所以A
44、 A必须为偶数。必须为偶数。79(4)无条件相对转移(Short Jump)机器码为机器码为80 80 relrel说明:说明:n$ $为源地址(本指令的首地址),该指令为为源地址(本指令的首地址),该指令为2 2字节指令,字节指令,执行本指令时,当前执行本指令时,当前PCPC$+2$+2; $ $2 2relPCrelPCnrelrel 为转移的偏移量,转移可以向前转,也可以向后转,为转移的偏移量,转移可以向前转,也可以向后转,因此偏移量因此偏移量relrel 是是1 1 字节有符号数字节有符号数,用补码表示(,用补码表示(128128127127),所以指令转移范围在离源地址),所以指令转
45、移范围在离源地址$ $的的126126129129字节之间。字节之间。 SJMP rel;PC+relPC,80(1 1)短转移)短转移AJMPAJMP addr11 addr11(2 2)长转移)长转移LJMPLJMP addr16 addr16(3 3)间接转移)间接转移JMPJMP A+DPTR A+DPTR(4 4)无条件相对转移)无条件相对转移SJMPSJMP relrel81(1 1)累加器为零(非零)转移)累加器为零(非零)转移( (J Jump if ump if Z Zero)ero)nA=0 A=0 则转移(则转移($+2+relPC$+2+relPC)nA0 A0 程序顺
46、序执行。程序顺序执行。( (J Jump if ump if N Not ot Z Zero)ero)nA0 A0 则转移(则转移($+2+relPC$+2+relPC)nA=0 A=0 程序顺序执行,程序顺序执行, JZ JZ rel rel ;机器码为;机器码为60 rel60 rel JNZ JNZ rel rel ;机器码为;机器码为70 rel70 rel82(2 2)减)减 1 1 不等于零转移不等于零转移nRn-1RnRn-1Rn,RnRn=0=0顺序执行;顺序执行;nRn0Rn0,则转移到(,则转移到($+2+rel PC$+2+rel PC)n(dir)-1(dir), (d
47、ir)=0 (dir)-1(dir), (dir)=0 顺序执行;顺序执行;n(dir)0(dir)0,则转移到(,则转移到($+3$+3+rel PC+rel PC)本指令有自动减本指令有自动减 1 1 功能。功能。 DJNZ Rn , rel ; Decrement Jump if Not Zero DJNZDJNZ dir , rel dir , rel 83例:试分析以下程序运行后A中的结果。 MOV 23H,#0AH CLR A LP: ADD A,23H DJNZ 23H,LP SJMP $ A =10+9+8+7+6+5+4+3+2+1=55 =37H84P16P16(3 3)比
48、较转移指令)比较转移指令( (C Compare ompare J Jump if ump if N Not ot E Equal)qual)说明:说明: n CJNECJNE指令都是指令都是3 3字节指令,作减操作,字节指令,作减操作,影响影响CYCY标志,但不标志,但不回送结果。回送结果。n 若第一操作数大于或等于第二操作数,则标志若第一操作数大于或等于第二操作数,则标志CY=0CY=0。若。若第一操作数小于第二操作数,则第一操作数小于第二操作数,则CY=1CY=1。n 除实现两操作数相等与否的判断外,利用对除实现两操作数相等与否的判断外,利用对CYCY的判断的判断(位操作指令),可以完成
49、两数大小的比较(位操作指令),可以完成两数大小的比较。CJNECJNE A, dir , rel A, dir , relCJNECJNE A , #data , rel A , #data , relCJNECJNE Rn , #data , rel Rn , #data , relCJNECJNE Ri , #data , rel Ri , #data , rel;不相等,则转移, 执行(As+3+rel)PC;相等,顺序执行。85(1)累加器为零(非零)转移JZ rel JNZ relDJNZ Rn , rel DJNZ dir , rel(2)减1不等于零转移(3)比较转移指令CJNE
50、 A,dir , relCJNE A , #data , relCJNE Rn , #data , relCJNE Ri , #data , rel dirRiRiRnRn#data#dataADJNZ、CJNE指令示意图86例:例:编写程序,要求读编写程序,要求读P1 端口上的信息,若不为端口上的信息,若不为55H,则程序等待,直到,则程序等待,直到P1端口为端口为55H时,程序时,程序才往下顺序执行。才往下顺序执行。程序:程序:MOV A,#55H ;A55HCJNE A,P1,$ ;P155H,则程序循环执行本指令则程序循环执行本指令 在实际编程中,转移的在实际编程中,转移的目的地址目的
51、地址不管是不管是addr11addr11、addr16addr16、还是还是relrel , ,均是一均是一符号地址符号地址表示的表示的( (如如SJMP ABCSJMP ABC,AJMP AJMP LOOPLOOP),转移的类型是通过指令的操作符来决定的。),转移的类型是通过指令的操作符来决定的。87n在相对转移中,在相对转移中,relrel 是是1 1字节补码。转移指令中首地址字节补码。转移指令中首地址和转移的目的地址已知,在填机器码时,需计算和转移的目的地址已知,在填机器码时,需计算relrel。计算计算relrel 的方法的方法: :设本条转移指令的首地址为设本条转移指令的首地址为As
52、As源地址,指令字节数源地址,指令字节数为为BnBn(2/32/3)字节,当前)字节,当前PC= As+ PC= As+ BnBn;要转移的目标地;要转移的目标地址为址为Ad-Ad-目的地址目的地址。AdAd= =当前当前PC+relPC+rel补补= =As+Bn+relAs+Bn+rel补补relrel=(Ad-As-=(Ad-As-BnBn) )补补n这就是在已知源地址,目的地址和指令的长度时,计这就是在已知源地址,目的地址和指令的长度时,计算算relrel 的公式。的公式。88例:例:MCS-51MCS-51单片机指令系统中,没有停机指令,通单片机指令系统中,没有停机指令,通常用短转移
53、指令常用短转移指令SJMP $ ($SJMP $ ($为本指令的首地址为本指令的首地址) )来实现来实现动态停机的操作,试写出这条指令中机器码。动态停机的操作,试写出这条指令中机器码。解:解:查附录查附录A A ,SJMPSJMP relrel 的指令码为的指令码为80rel 80rel 据题意:本条指令的据题意:本条指令的首地址首地址 As=$As=$,转移的目的地址是本条指令地址,即转移的目的地址是本条指令地址,即Ad=$Ad=$,该指令为两字节,即该指令为两字节,即BnBn=2=2,relrel= Ad-As-= Ad-As-BnBn 补补= $= $ $22补补= =(2 2)补)补=
54、FEH=FEH所以所以SJMP $SJMP $指令的指令的机器码是机器码是80FEH80FEH。89例:计算下面程序中CJNE指令的偏移量。LOOP:MOV A,P1 ; 2字节CJNE A,#55H,LOOP ; 3字节解:目的地址: Ad=LOOPCJNE指令的首地址 : As=LOOP+2CJNE是3字节指令: Bn=3 rel=LOOP-(LOOP+2)-3补=-5补=FBH据附录A:CJNE A,#55H,LOOP的机器码B4 data rel指令码:B455FBH。90n该指令经取指,译码后,不进行任何操作(空操作),n常用于产生一个机器周期的延时,或上机修改程序时作填充指令,以方
55、便增减指令。NOP ; 机器码 00 ,1 MC91例:例: 将将A A累加器的低累加器的低4 4位取反四次、高位取反四次、高4 4位不变。每变位不变。每变换一次,从换一次,从P1P1输出。输出。解:解:方法一方法一 加加 1 1 计数计数 MOV MOV R0 R0,#0 ;#0 ;计数器初值送计数器初值送0 0LLLL: XRL XRL A A,#0FH ;#0FH ;高高4 4位不变,低位不变,低4 4位取反位取反 MOV MOV P1P1,A ;A ;从从P1P1输出输出 INC INC R0 ; R0 ;计数加计数加1 1 CJNECJNE R0 R0,#04#04,LL ;LL ;
56、不满不满4 4次循环次循环 RET RET 方法二方法二 减减1 1计数计数 MOVMOV R0,#04H ; R0,#04H ; 计数初值送计数初值送4 4LL: LL: XRLXRL A A,#0FH#0FH MOVMOV P1 P1,A A DJNZDJNZ R0 R0,LL ;LL ;次数减次数减1 1不等于不等于0 0循环循环 RETRET92例:例:内部内部RAMRAM的的40H40H地址单元中,有地址单元中,有1 1字节符号数,编字节符号数,编写求其绝对值后放回原单元的程序。写求其绝对值后放回原单元的程序。解:解:程序如下:程序如下:MOV MOV A A,40H40HANLANL A A,#80H#80HJNZ JNZ NEG ;NEG ;负数转移负数转移SJMP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑剪力墙方案设计图纸
- 共享养鸡营销方案
- 建筑方案设计说明-玻璃幕墙
- 电饭煲营销方案模板
- 承德二层轻钢房施工方案
- 大型庙会美食策划活动策划方案
- 项目法律咨询服务方案
- 相亲交友策划活动策划方案
- 建筑工艺工程施工方案设计
- 双碳建筑项目方案设计说明
- 2025年深圳劳动合同范本
- 【2025年】合肥市蜀山区社区工作者招聘考试笔试试卷【答案】
- 全国计算机等级考试(二级)真题汇编及答案解析
- 依法全面治国课件
- 学前儿童扭伤课件
- 2025年全国新闻记者职业资格考试(新闻采编实务)综合试题及答案
- 2025至2030年中国硬脆性陶瓷材料市场分析及竞争策略研究报告
- 2025四川成都市简州新城投资集团有限公司专业技术人才招聘23人笔试参考题库附带答案详解
- 可持续城市更新项目100平方公里历史文化街区保护可行性研究报告
- 中安保集团安全培训课件
- 铜精矿海外采购合同范本
评论
0/150
提交评论