语言PPT课件知识分享_第1页
语言PPT课件知识分享_第2页
语言PPT课件知识分享_第3页
语言PPT课件知识分享_第4页
语言PPT课件知识分享_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言PPT课件由2~5个英文字母组成的助记符至少一个空格用“,”隔开,操作个数可为无,1,2,3操作码:反映了指令的功能。操作数:反映了指令的对象。eg:MOVA

,#01 ;01 A 7401ADDCA,R1 ;(A)+(R1)+CY A 39§3.1.1汇编语言格式由操作助记符和操作数字段组成汇编指令指能汇编成机器语言代码的指令。格式:操作码 [操作数1],[操作数2],[操作数3]§3.1.2汇编伪指令伪指令:汇编时不产生机器语言代码的指令,仅提供汇编控制信息。一、定位伪指令

ORGm

m:一般为十六进制数。

m指出在该伪指令后的指令的汇编地址,即生成的机器指令起始存贮器地址。显然,当使用多条ORGm伪指令时,应注意其后生成的机器指令存放地址不应重叠。eg: ORG0

START:SJMPMAIN

ORG0BH LJMP PTFO

ORG40H MAIN: 二、定义字节伪指令

[标号:]DBX1、X2

Xn§3.1.2汇编伪指令 ORG 1000H

DB 0AAH

SJ-DATA: DB 25,25H

ZFC-DATA: DB 'MCS-51'

经汇编后,从地址1000H处存贮器的内容为:

(1000H)=AAH

(1001H)=19H

(1002H)=25H

(1003H)=4DH

(1004H)=43H

(1005H)=53H

(1006H)=2DH

(1007H)=35H

(1008H)=31H三、字定义伪指令

[标号:]DWY1、Y2

Yn§3.1.2汇编伪指令通知汇编程序从当前ROM地址开始,保留存贮单元,并存入DW后面的数据。存放时高8位在前,低8位在后。

例3-3 ORG 1000H

DW 1234H

SJ_DATA: DW 56H,2000

经汇编后,从地址1000H处存贮器的内容为:

(1000H)=12H

(1001H)=34H

(1002H)=00H

(1003H)=56H

(1004H)=07H

(1005H)=D0H四、EQU赋值伪指令

字符名称EQU项(数或汇编符号)§3.1.2汇编伪指令例:3-4: AA EQU R1 MOV A,AA

例:3-5: D10 EQU 10 ADD_Y EQU 07ABH MOV A,D10 LCALL ADD_YEQU伪指令是把“项”赋给“字符名称”,注意这里的“字符名称”不同于标号(其后没有冒号),但它是必须的。用EQU赋过值的符号名可以用作数据地址、代码地址、位地址或是一个立即数。五、DS定义存贮空间伪指令

DS表达式§3.1.2汇编伪指令在汇编时,从指定地址开始保留DS之后“表达式”的值所规定的存贮单元。 ORG 1000H DS 07H DB 20H,20 DW 12H

经汇编后,从地址1000H开始保留7个单元,然后从1007H处存贮器的内容为: (1007H)=20H (1008H)=14H (1009H)=00H (100AH)=12H六、DATA数据地址赋值伪指令

字符名称DATA表达式§3.1.2汇编伪指令这里的“字符名称”与标号不同(其后没有冒号),但它是必须的,其功能是把“表达式”的值赋给左边的“字符名称”。DATA伪指令与EQU伪指令的主要区别是:EQU定义的“字符名称”必须先定义后使用,而DATA定义的“字符名称”没有这种限制,故DATA伪指令通常用在源程序的开头或末尾。例3-7:ORG 0100H AA DATA 35H DPTRADATA 0AA00H MOV A,AA ;(35H)A MOV DPTR,#DPTRA ;0AA00HDPTR七、BIT定义位地址符号伪指令

字符名称BIT位地址§3.1.2汇编伪指令这里的“字符名称”与标号不同(其后没有冒号),但它是必须的,其功能是把BIT之后的“位地址”值赋给“字符名称”。例3-6: P11 BIT P1.1 A2 BIT 02H MOV C,P11 MOV A2,C八、汇编结束伪指令END—指出汇编结束,其后即使还有指令,汇编程序也不作处理。§3.2MCS-51的寻址方式在高级语言编程时,程序设计人员不必关心程序和数据的内存空间安排问题。但在汇编语言程序设计时,要针对系统的硬件环境编程,数据的存放、传送、运算都要通过指令来完成,编程者必须自始至终都十分清楚操作数的位置,以便将它们传送至适当的空间去操作。

寻址方式就是如何找到存放操作数的地址,把操作数提取出来的方法。MCS—51指令的系统的指令数的寻址方式主要有八种:寄存器寻址、直接寻址、寄存器间接寻址、立即寻址、基寄存器加变址寄存器间接寻址、相对寻址、位寻址、页面寻址。一、寄存器寻址由指令某一寄存器的内容作为操作数的寻址方式。eg: INC R0 ;(R0)+1R0INCR0指令执行过程示意图§3.2MCS-51的寻址方式在指令中含有操作数的直接地址,该地址指出了参与计算或传送的数据所在的字节单元或位的地址。eg: ANL70H,#48H ;(70H)^48H70H

二、

直接寻址操作数的直接地址§3.2MCS-51的寻址方式在指令中某一个寄存器的内容作为操作数的地址的寻址方式,用符号@表示。eg:ANL A,@R0 ;

(A)^((R0))

A

寄存器间接寻址使用所选定的寄存器中R0和R1作地址指针(对栈操作时用堆栈指针SP)来寻址内部RAM(0~FFH),也适用于访问外部扩展的数据存贮器,用R0、R1或DPTR作为地址指针。三、寄存器间接寻址§3.2MCS-51的寻址方式操作数包含在指令字节中eg: MOV A,#70H

以16位的程序计数器PC或数据指针DPTR作为基寄存器,以8位的累加器A作为变址寄存器,内容相加形成16位新的地址。

MOVCA,@A+PC ;((A)+(PC))A

MOVCA,@A+DPTR ;((A)+(DPTR))A五、基寄存器加变址寄存器间接寻址四、立即寻址§3.2MCS-51的寻址方式eg: JC 80H ;C=1跳转PC+2+rel PC设原PC=1005HPC+2+rel=1005H+2+80H=1007H-128=0F87H=1007H+FF80H=0F87H1000000010000000(-128)求补码:1111111110000000§3.2MCS-51的寻址方式六、相对寻址相对寻址方式是以当前的程序计数器PC值加上指令中给定的偏移量rel所得的结果作为转移地址。一般将相对转移指令操作码所在地址称为源地址,转移后的地址称为目的地址,则有:

目的地址=源地址+相对转移指令字节数+rel

§3.2MCS-51的寻址方式七、位寻址在计算机中,某些特定的操作数可以按8位二进制数中的某一位为单位进行存取和操作。位寻址方式是其操作数是8位二进制中的某一位。例315:MOV C,01H ;01H为位地址,表示(20H).1的内容传送到进位累加器。例316:SETB EA表示中断允许寄存器IE的位7置1。§3.2MCS-51的寻址方式八、页面寻址当用寄存器间接寻址方式访问外部扩展的数据存贮器,当用R0、R1作地址指针访问片外RAM时的寻址方式称为页面寻址。页面地址由P2口的内容决定,页面内的地址由R0或R1的内容决定。例317:MOV P2,#0A0H MOV R0,#01H MOV A,#10H MOVX @R0,A(1)对程序存贮器只能采用立即寻址和基寄存器加变址寄存器间接寻址寻址方式。(2)对特殊功能寄存器空间只能采用直接寻址方式(可以用符号来代表地址),不能采用寄存器间接寻址方式。(3)内部RAM高128B只能采用寄存器间接寻址方式,不能采用直接寻址方式。(4)内部RAM低128B既能采用寄存器间接寻址方式,又能采用直接寻址方式。(5)外部扩展的数据存贮器只能采用MOVX指令访问。虽然MCS51单片机的寻址方式有多种,但指令对哪一个存贮器空间进行操作是由指令的操作码和寻址方式确定的。总的来说,具有以下几点原则:§3.2MCS-51的寻址方式MCS—51汇编语言有42种操作码助记符,33种操作功能,111种指令,可分为:数据传送类(29)算术操作类(24)逻辑操作类(24)位操作类(17)控制转移类(17)§3.3MCS-51的指令系统§3.3.1

数据传送类指令数据数据传送类指令一般的操作是把源操作数传送到目的操作数,指令执行后,一般是源操作数不改变,目的操作数修改为源操作数。可以在累加器A、工作寄存器R0~R7、内部数据存贮器、外部数据存贮器和程序存贮器之间进行。这类指令有:MOV,MOVX,MOVC,XCH,XCHD,SWAP,POP,PUSH共8种。一、以累加器A为目的操作数的指令MOV A,Rn ;寄存器寻址MOV A,Direct;直接寻址MOV A,@Ri;间接寻址MOV A,#data;立即寻址(Rn)A寄存器的内容作为含有操作数的直接地址。i=0,1寄存器的内容作为含有操作数的地址直接包含操作数把源操作数的内容送ACC,源操作数的内容不变化。eg:MOV A,R6 ;(R6) A

MOV A,70H;(70H)A MOV A,@R0;((R0)) A MOV A,#78H;78H A二、以Rn为目的操作数的指令MOV Rn,A;寄存器寻址MOV Rn,Direct;直接寻址MOV Rn,#data;立即寻址n=0~7eg:MOV R2,A;(A)

R2

MOV R7,70H;(70H)R7 MOV R7,#0A0H;0A0H R7§3.3.1

数据传送类指令源操作数的内容送入当前工作寄存器区的R0~R7MOV Direct,A ;寄存器寻址MOV Direct,Rn ;寄存器寻址MOV Direct,Direct;直接寻址MOV Direct,@Ri

;寄存器间接寻址MOV Direct,#data;立即寻址三、以直接寻址的单元为目的操作数的指令eg:MOV P1,A ;MOV90H,A;(A)P1

MOV 70H,R2;(R2)(70H) MOV 0E0H,78H ;(78H) A MOV 40H,@R0;((R0))40H MOV 01H,#80H ;80H01H§3.3.1

数据传送类指令源操作数的内容送入直接地址指出的存贮单元。四、以寄存器间接寻址的单元为目的操作数的指令MOV @Ri,A ;寄存器寻址MOV @Ri,Direct ;直接寻址MOV @Ri,#data ;立即寻址eg:MOV @R1,A ;(A)(R1)

MOV @R0,70H ;(70H)(R0) MOV @R1,#80H ;80H

(R1)

§3.3.1

数据传送类指令源操作数的内容送入R0或R1指出的内部RAM中。五、16位数据传送指令MOV DPTR,#data16;立即寻址把16位立即数送到数据指针DPTR。高8位DPH,低8位DPLeg:MOV DPTR,#8000H

§3.3.1

数据传送类指令六、查表指令1、MOVC A,@A+PC ;((A)+PC)A(A)作为无符号数和PC内容(下一条指令的起始地址)相加后得到一个16位的地址,将该地址的内容A2、MOVC A,@A+DPTR

;((A)+DPTR)A(A)作为无符号数和DPTR内容相加后得到一个16位的地址,将该地址的内容Aeg:(DPTR)=8100H,(A)=40HMOVC A,@A+DPTR; (????H)Aeg:(A)=30H,当前地址1000HMOVCA,@A+PC ;(????H)Aeg: ORG 8000HMOV A,#30MOVCA,@A+PC ;(????H)A…… ORG 8030HDB 41H,42H,43H,44H,45H§3.3.1

数据传送类指令§3.3.1

数据传送类指令七、累加器A与片外RAM数据传送指令eg: MOV DPTR,#0650H;设(0650H)=20H

MOV R0,#0FAH ;(0FAH)=10H MOV P2,#20H MOVXA,@R0

;(20FAH)A MOVX@DPTR,A ;(A)650H单元(A)外部数据存贮器MOVX A,@DPTR;MOVX A,@Ri

;MOVX @DPTR,A;MOVX @Ri,A;外部数据存贮器的内容A八、栈操作指令1、压栈指令PUSH Direct ;寄存器间接寻址

eg:(SP)=60H,(A)=30H,(B)=70H§3.3.1

数据传送类指令PUSHB;SP+1SP,(B)(SP),SP=62H,(62H)=70H中断保护现场PUSHA

;SP+1SP,(A)(SP),SP=61H,(61H)=30H①堆栈指针SP+1SP;②然后把直接地址的内容送到栈指针寻址的内部RAM单元中。POPDPL ;(61H)DPL,SP-1SP ;DPL=30HSP=60HPOPDPH ;(62H)DPH,SP-1SP ;DPH=70H,SP=61H2、弹栈指令

POP Direct ;寄存器间接寻址

eg:(SP)=62H,(62H)=70H,(61H)=30H§3.3.1

数据传送类指令①堆栈指针SP寻址的内部RAM单元送入直接地址指出的字节单元中;②SP-1SP 九、字节交换指令—内容交换XCH A,Rn ;寄存器寻址,(A)(Rn)

XCH A,Direct ;直接寻址,(A)(direct)

XCH A,@Ri ;寄存器间接寻址,(A)((Ri))

XCHD A,@Ri ;寄存器间接寻址 ;(A)0~3((Ri))0~3

SWAP A ;寄存器寻址,(A)0~3(A)4~7§3.3.1

数据传送类指令eg:①(A)=80H,(R7)=08H XCH A,R7 ;(A)(R7)

②(A)=80H,(70H)=88H XCH A,70H;(A)(70H)③(A)=80H,(70H)=60H MOV R0,#70H XCH A,@R0;(A)((R0))(A)=60H,(70H)=80H,(R0)=70Heg:④(A)=12H,(R1)=30H ,(30H)=34H XCHD A,@R1

⑤(A)=12H SWAP A§3.3.1

数据传送类指令MCS—51算术运算指令+,-,*,/,增量(加1),减量(减1)指令,执行结果将使进位(Cy)、辅助进位(AC),溢出(OV)标志置位或复位。但加1和减1指令不影响以上标志。其操作助记符有:ADD,ADDC,SUBB,DA,INC,DEC,MUL,DIV8种。一、不带进位的加法指令ADD A,Rn ;(A)+(Rn) A,n=0~7 ADD A,Direct ;(A)+(Direct)A ADD A,@Ri

;(A)+((Ri))A, i=0,1ADD A,#data ;(A)+data A

§3.3.2

算术运算类指令eg1:(A)=53H,(R0)=0FCHADD A,R0

101001111+1111110001010011(A)=4FH,CY=1AC=0,OV=0,P=1eg2:(A)=85H,(R0)=30H,(30H)=0AFHADD A,@R0 ;85H+0AFH A (A)=34H

100110100+1010111110000101(A)=34H,CY=1AC=1,OV=1,P=1二、带进位的加法指令ADDCA,Rn ;(A)+(Rn)+CYA ADDCA,Direct ;(A)+(direct)+CY A ADDCA,@Ri ;(A)+((Ri))+CY A ADDCA,#data ;(A)+data+CY A

§3.3.2

算术运算类指令eg2:(A)=85H,(20H)=0FFH,CY=1ADDCA,20H;+ 110000101

11000010111111111(A)=85H,CY=1AC=1,OV=0,P=1§3.3.2

算术运算类指令三、带进位减法指令SUBB A,Rn ;(A)-(Rn)-CYASUBB A,Direct ;(A)-(direct)-CY A SUBB A,@Ri

;(A)-((Ri))-CYA SUBB A,#data ;(A)-data-CYA

§3.3.2

算术运算类指令eg:(A)=0C9H,(R2)=54H,CY=1SUBBA,R2 - 1110010010111010001010100(A)=74H,CY=0,AC=0,OV=1,P=0四、增量指令(加1)指令INCA ;(A)+1AINCRn ;(Rn)+1 Rn

INC@Ri ;(Ri)+1 (Ri),i=0,1INCDPTR ;(DPTR)+1 DPTR

INCDirect ;(direct)+1 direct这组指令除对A操作影响P标志外不影响其它标志§3.3.2

算术运算类指令五、减量(减1)指令DECA ;(A)-1ADECRn ;(Rn)-1 Rn

DEC @Ri ;((Ri))-1 (Ri)DECDirect ;(direct)-1 directeg:(A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFHDEC R7 ;DEC 30H ;DEC @R1 ;DEC A ;0FH-1 A, (A)=0EH 19H-1 R7, (R7)=18H00H-1 (30H), (30H)=0FFH(40H)-1 (40H),(40H)=0FEHDA A

六、十进制调整指令对累加器中由上一条加法指令(加数和被加数均为压缩的BCD码)所获得的8位结果进行调整,使它调整为压缩BCD码的数。eg:(A)=0FFH,(R3)=0FH,(30H)=0F0H,(R0)=40H (40H)=00HINC R3 ;(R3)=10HINC 30H ;INC @R0 ;(30H)=0F1H(40H)=01H(A)=00HINC A ;BCD码—二进制表示的十进制数。而一个字节为8位,可以表示两个BCD码组合成压缩的BCD码。(最大的压缩BCD码数为99H)。§3.3.2

算术运算类指令ACC0~ACC3>9吗?AC=1否?(A)+06HAACC4~ACC7>9吗?CY=1否?(A)+60HA结束开始YNNYYNNY①A3~0>9或AC=1 A3~0+6 A②

A7~4>9或C=1 A7~4+6 A§3.3.2

算术运算类指令eg:(A)=56H,(R5)=67HADD A,R5 DAA10111101+011001110101011011000011+00000110+01100000100100011(A)=23H,CY=18位无符号数的乘法操作,乘积为16位,低8位放在A中,高8位放在B中。若积大于255,则置位OV标志,CY总为0。MUL AB

eg:(A)=50H,(B)=0A0H(B)=32H,(A)=00H, 积为3200H,CY=0,OV=1MUL AB ;七、乘法指令§3.3.2

算术运算类指令DIV AB ;(A)8位无符号数除以(B)8位无符号数,所得商的整数放在A中,余数放在B中。一般①(A)/(B)的商(A)②(A)/(B)的余(B)③CY=0,OV=0当(B)=0时,(A),(B)中内容均不确定,且OV=1。eg:(A)=0FBH,(B)=12HDIV AB (A)=0DH,(B)=11H,CY=0,OV=0100101111101111011001010010110101000111001010001八、除法指令§3.3.2

算术运算类指令§3.3.3

逻辑运算类指令一、对累加器A的单操作数的逻辑操作指令包括移位、与、或、非、异或、清除、求反等操作。其助记符有:CLR、CPL、RL、RLC、RR、RRC、ANL、ORL、XRL。1、CLR A

;累加器A清“0”,不影响CY、AC、OV2、CPL A

;A A,不影响标志3、RL A

;左移1位,Bit0 Bit1,…Bit7 Bit0A7 A0左移8次?4、RLC A

;(A)和CY一起向左1位。Bit0 Bit1,… Bit7CY,CY

Bit0A7 A0CY左移9次?A7 A0右移8次?右移9次?5、RR A

;右移1位,Bit7 Bit6,…Bit0 Bit7A7 A0CY6、RRC A

;(A)和CY一起向右1位。CY

Bit7,

Bit

Bit6,…Bit0CY7、累加器半字节交换SWAPA ;(Bit7~Bit4)

(Bit3~Bit0)互换。设(A)=12H,执行指令:SWAP A;(A)=21H§3.3.3

逻辑运算类指令二、 两个操作数的逻辑操作指令1、逻辑与指令ANL A,Rn ;(A)∧(Rn) AANL Direct,A ;(direct)∧(A)directANL A,Direct ;(A)∧(direct)A ANL A,@Ri

;(A)∧((Ri))A ANL A,#data ;(A)∧

data A

ANL Direct,#data ;(direct)∧

data direct

按位逻辑与操作,结果存放到目的操作数中。eg:(A)=07H,(R0)=0FDHANL A,R0

(A)=05H00000101∧1111110100000111eg:(A)=07H,(70H)=0FDHANL 70H,A

00000101∧0000011111111101(70H)=05HORL Direct,A ;(direct)∨(A)directORL A,#data ;(A)∨

data A

ORL Direct,#data ;(direct)∨

data

direct按位逻辑或操作,结果存放到目的操作数中。eg:(A)=33H,(P1)=05HORL P1,A00110111∨0011001100000101(A)=37HORL A,@Ri

;(A)∨((Ri))A 2、逻辑或指令ORL A,Rn ;(A)∨(Rn) A ORL A,Direct ;(A)∨(Direct)A 二、 两个操作数的逻辑操作指令§3.3.3

逻辑运算类指令XRL direct,A ;(direct)(A)directXRL direct,#data ;(direct)

datadirect eg:(A)=90H,(R3)=73HXRL A,R3111000110111001110010000异或:相同为0,相异为1(A)=0E3H3、逻辑异或指令XRL A,Rn ;(A)(Rn) AXRL A,Direct ;(A)(direct)A XRL A,@Ri

;(A)

((Ri))A XRL A,#data ;(A)

data A

按位逻辑异或操作,结果存放到目的操作数中。二、 两个操作数的逻辑操作指令§3.3.3

逻辑运算类指令(20H)6 CY,CY=0 CY P1.0或(90H)0位操作指令是以进位位CY(PWS.7)作为累加器C以RAM(20H~2FH)和SFR(8位倍数地址)内的位寻址区的位单元作为操作数,进行位变量的传送、修改和逻辑操作。一、位变量传送指令MOV C,bit ;(bit) CYMOV bit,C ;CYbit位传送必须经过累加器C来进行。eg:MOV C,06H ;MOV P1.0,C ;设CY=1,(06H)=22H,(20H)=0BFH§3.3.4位操作指令SETB C ;1 CYSETB Bit ;1 BitCLR C ;0 CYCLR Bit ;0 Bit CPL C

;CY CY

CPL Bit ;Bit Bit eg:CLR C ;CLR 27H ;0CY (24H)7=00(21H)0CLR 08H ;SETB P1.7 ;1 P1.7或(90H)7§3.3.4位操作指令二、位变量修改指令eg:MOV C,P1.0 ;ANL C,P1.1;(P1.0) CY ANL C,/P1.2 ;MOV P3.0,C;CY P3.0ANL C,Bit ;CY∧(Bit) CYANL C,/Bit ;CY∧(Bit) CY,Bit本身内容不变(P1.0)∧(P1.1) CY((P1.0)∧(P1.1))∧(P1.2)CY(P3.0)=((P1.0)∧(P1.1))∧(P1.2)三、位变量逻辑与、或运算指令§3.3.4位操作指令ORL C,Bit ;CY∨(Bit) CYORL C,/Bit ;CY∨(Bit) CY,Bit本身内容不变eg:CY=0,P1=0ORL C,/P1.1CY=1,P1=0eg:MOV C,00H

;ORL C,01H

;ORL C,02H ;MOV P1.0,C;(P1.0)=(20H)0∨

(20H)1

(20H)2…∨

(20H)7ORL C,07H ;┇

§3.3.4位操作指令1、短跳转指令AJMP addr11 ;PC+2 PC,指令中addr10~0 PC10~0这是2KB范围内的无条件跳转指令,转移到指定地址,地址为:PC15…PC11a10a9…a0 PC。MCS—51把存贮空间划分为32个区,每个区为2KB字节。AJMP的下一条指令第一个字节与跳转的入口地址必须在同一区内eg:KWR:AJMP addr11设addr11=001,0000,0000(a10~0)①设KWR处地址为:1030H则执行指令后转移到:a.PC+2 PC PC=1032H PC15~11=00010。b.00010

001,0000,0000B=1100H②

设KWR处地址为:3030H则执行指令后转移到:a.PC+2 PC PC=3032H PC15~11=00110。b.00110

001,0000,0000B=3100H0000H~07FFH0区0800H~0FFFH1区1000H~17FFH2区……§3.3.5控制转移指令一、无条件转移指令2、相对短跳转指令SJMP rel ;PC+2+rel PC rel:-128~127rel:-128~127,负数表示向后转移,正数表示向前转移。编程时,rel往往用一个标号来代替,由汇编程序在汇编过程中自动计算偏移字节数,并填入指令代码中。当手工汇编时,rel一般用补码表示。eg:KRD:SJMP PKRD标号PKRD的地址值为0123H则:0123H=0100+2+rel rel=21H①设 KRD的地址为0100H②

设KRD的地址为0100H标号PKRD值为00F2H则:00F2H=0100+2+rel rel=0F0H§3.3.5控制转移指令3、长跳转指令LJMP addr16 ;addr15~0 PC无条件跳转到指定地址,地址空间为64KB程序存贮器地址。4、基寄存器加变址寄存器间接转移指令JMP @A+DPTR ;(A)+(DPTR) PCeg:P96例38PM:MOV R1,ARL AADD A,R1MOV DPTR,#PMTBJP @A+DPTRPMTB:LJMP PM0 LJMP PM1 LJMP PM2 LJMP PM3 LJMP PM4 LJMP PM5 LJMP PM6§3.3.5控制转移指令1、测试条件符合转移指令JZrel;(A)=0,(PC)+2+rel(PC),(A)≠0,(PC)+2(PC)JNZrel;(A)≠0,(PC)+2+rel(PC),(A)=0,(PC)+2(PC)JCrel;CY=1,(PC)+2+rel(PC),CY=0,(PC)+2(PC)JNCrel;CY=0,(PC)+2+rel(PC),CY=1,(PC)+2(PC)JB Bit,rel;(Bit)=1,(PC)+3+rel (PC),

(Bit)=0,(PC)+3

(PC)JNB Bit,rel;

(Bit)=0,(PC)+3+rel (PC)

(Bit)=1,(PC)+3

(PC)JBC Bit,rel;

(Bit)=1,(PC)+3+rel (PC),且清(Bit)=0

(Bit)=0,(PC)+3

(PC)2、比较不相等转移指令a、CJNE A,direct,rel①(A)=(direct),(PC)+3 (PC),0 CY ②(A)>(direct),(PC)+3+rel (PC),0 CY ③(A)<(direct),(PC)+3+rel (PC),1 CY 二、条件转移指令b、CJNE A,#data,rel①(A)=data,(PC)+3 (PC),0 CY ②(A)>data,(PC)+3+rel (PC),0 CY ③(A)<data,(PC)+3+rel (PC),1 CY c、CJNE Rn,#data,rel①(Rn)=data,(PC)+3 (PC),0 CY ②(Rn)>data,(PC)+3+rel (PC),0 CY ③(Rn)<data,(PC)+3+rel (PC),1 CY d、CJNE @Ri,#data,rel①((Ri))=data,(PC)+3 (PC),0 CY ②((Ri))>data,(PC)+3+rel (PC),0 CY ③((Ri))<data,(PC)+3+rel (PC),1 CY 二、条件转移指令执行下面程序后将根据A的内容大于60H、等于60H、小于60H三种情况作不同处理:CJNE A,#60H,NEQ ;(A)不等于60H转移EQ: … ;(A)等于60H处理程序┇NEQ:JC LOW ;(A)<60H转移 ;(A)>60H处理程序┇LOW:… ;(A)<60H处理程序二、条件转移指令3、减1不为0转移指令DJNZ Rn,rel;(Rn)-1 (Rn)①(Rn)=0,(PC)+2 (PC) ②(Rn)≠0,(PC)+2+rel(PC)DJNZ direct,rel;(direct)-1 (direct) ①(direct)=0,(PC)+3

(PC) ②(direct)≠0,(PC)+3+rel(PC)子程序:具有一定功能的公用程序段。在子程序的末尾一般是一条返回指令(RET)。当主程序调用子程序时①把下一条指令地址 (SP),(SP+2)(SP)②子程序起始地址 PC子程序执行返回时:把调用子程序处下一条指令地址从堆栈中取出 PC,(SP)-2 (SP)二、条件转移指令三、调用和返回指令START:SETB P1.1 ;1 P1.1DL: MOV 30H,#03H ;03H 30H,置初值DL0: MOV 31H,#0F0H ;0F0H31H,置初值DL1: DJNZ 31H,DL1 ;(31H)-131H,(31H)不为0 重复执行 DJNZ 30H,DL0 ;(30H)-130H,(30H)不为0 转DL0 CPL P1.1 ;P1.1求反 AJMP DL ;转DL一般而言,可以多次调用子程序,子程序调用可以嵌套。执行返回主程序指令执行返回主程序指令子程序SUB执行调用子程序指令执行调用子程序指令主程序MAINCPU正在执行主程序CPU执行子程序AB主程序二次调用子程序示意图B主程序MAIN子程序SUB1子程序SUB2转向SUB1转向SUB2返回SUB1返回MAIN二级子程序嵌套示意图三、调用和返回指令压栈1、短调用指令ACALL addr11

①(PC)+2 PC②(SP)+1 SP,(PC7~0) (SP)低③(SP)+1 SP,(PC15~8) (SP)高④PC15PC14PC13PC12PC11a10a9…a0 PC(转向执行子程序)eg:(SP)=60H,标号MA值为0123H。SUB起始地址0345HMA:ACALL SUB

①(PC)+2②(SP)=61H,(61H)=25H ③(SP)=62H,(62H)=01H ④00000

01101000101=0345H①PC=0125H PC15~11=00000ACALL的下一条指令第一字节与子程序的入口地址必须在同一区内。三、调用和返回指令2、长调用指令压栈LCALL addr16 ;addr1664KB地址区①(PC)+3 PC②(SP)+1 SP,(PC7~0) (SP)低③(SP)+1 SP,(PC15~8) (SP)高④addr16 PCeg:(SP)=60H,START:标号地址0100H。 DIR:标号地址8100HSTART:LCALL DIR

②(SP)=61H,(61H)=03H ③(SP)=62H,(62H)=01H ④(PC)=8100H①(PC)=0103H三、调用和返回指令3、返回指令①、从子程序返回RET

②(SP)-1 SP,((SP))PC7~0③(SP)-1 SP①((SP))PC15~8即把堆栈顶的内容送到PC寄存器中。eg:(SP)=62H,(61H)=30H,(62H)=07HRET

②(SP)=61H;(61H) PC7~0,PC7~0=30H③(SP)=60H(PC)=0730H, 从0730H处开始执行。①07H PC15~8,

PC15~8=07H 三、调用和返回指令②、从中断返回RETI②(SP)-1 SP,((SP))PC7~0③(SP)-1 SP①((SP))PC15~8中断返回指令把栈顶的内容送到PC寄存器中,同时释放中断逻辑使之能接受同级的另一中断请求。CPU执行RETI指令后至少要再执行一条指令,才能响应新的中断请求。四、空操作指令NOP ;除(PC)+1(PC)外无任何操作。一般用于延时。三、调用和返回指令ADD INC —IncrementSUBB —SubtractWithBorrowADDC —Add with Carry flagDEC —DecrementMUL —MultiplyDIV —DivideDA —Decimal AdjustANL —AndLogical CLR —ClearXRL —Exclusive-OR

LogicalORL —OR

LogicalCPL —ComplementLogicalRL —RotateLeftRLC —RotateLeftwithCarryflagRR —RotateRightRRC —RotateRightwithCarryflagSWAP —指令助记符注释MOV —Move MOVC—MoveCode MOVX—MoveExternalRAMPUSH —POP —XCH —ExchangeXCHD —Exchangelow-order DigitACALL—AbsoluteSubroutineCallLCALL—LongSubroutineCallRET—ReturnfromSubroutine

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论