《单片机讲义第三章精.ppt》由会员分享,可在线阅读,更多相关《单片机讲义第三章精.ppt(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、单片机讲义第三章第1页,本讲稿共88页3.1 指令系统简介指令周期:完成一条指令操作所需要的机器周期数指令长度:指令代码所占字节数指令代码:是程序指令的二进制数表示方法 89C51指令系统共有111条指令,分5 大类第2页,本讲稿共88页指令系统指令系统42种操作码助记符描述33种操作功能,形成111条指令:49条单字节、46条双字节、16条三字节;64条单周期、45条双周期、2条四周期。第3页,本讲稿共88页特点1、可以进行直接地址到直接地址的数据传送(不经ACC或Rn)2、用变址寻址方式访问程序存储器中的表格3、在算术运算指令中有乘法和除法4、对一些I/O口进行操作有读-修改-写功能5、有
2、与布尔处理器相对应的位操作指令第4页,本讲稿共88页指令格式一、汇编语言指令格式标号:操作码 操作数1,操作数2,操作数3;注释 例:LOOP:MOV A,#40H;A 40H其中操作数其中操作数1 1一般为目的操作数一般为目的操作数。1.标号:指令的符号地址。18个字母或数字,并以冒号“:”结尾。2.操作码:指明指令功能。25个字母。例如:MOV 传送 ANL 逻辑与 MUL 乘法 RR 右循环 RET 子程序返回第5页,本讲稿共88页指令格式3.操作数:指令操作对象数据、地址、寄存器名及约定符号。4.注释行:说明指令在程序中的作用。操作码和操作数是指令主体。第6页,本讲稿共88页编写程序时
3、,应注意以下几个问题:(1)标号标号是语句地址的标志符号。有关标号的规定如下:1、标号由18个字母或数字组成,可以使用一个下划线符号“_”。2、第一个字符必须是字母。3、指令助记符或系统中保留使用的字符串不能作为标号。4、标号后面必须跟一个冒号。5、一条语句可以有标号,也可以没有标号。标号的有无取决于本程序中其他语句是否需要访问这条语句。第7页,本讲稿共88页以下是合法的标号 以下是不合法的标号LOOP1:5LOOP:(第一个字符是数字)START:A*5:(“*”不能在标号中出现)Q4_:ADD:(指令助记符)SSS:START(无冒号)L123:L12345678:(超过8个字符)(2)操
4、作码规定语句执行的操作。操作码是以指令助记符或伪指令助记符表示的。操作码是汇编指令中惟一不能空缺的部分。第8页,本讲稿共88页(3)操作数用于给指令的操作提供数据或地址。在一条指令中,操作数可以为1项、2项或3项,各操作数之间用逗号隔开,操作数也可能空缺。例如:LOOP:INC A ;1项操作数 ADD A,#50H;2项操作数 CJNE A,#5,LOOP;3项操作数 RET;无操作数第9页,本讲稿共88页(4)注释注释不属于语句的功能部分,它只对语句进行解释说明。在程序汇编时注释字段不被汇编,可有可无,只起说明作用。注释内容以“;”开头。注释符在程序调试时可以使某些指令失效,不起作用,以便
5、查找原因。(5)分隔符分隔符用于分割语句的各个部分,以便于区分。冒号“:”用于标号之后;空格用于操作码和操作数之间;逗号“,”用于操作数之间;分号“;”用于注释之前。第10页,本讲稿共88页缩写符号 p32缩写符号一定要牢记!会在以后指令的学习中不断加强。第11页,本讲稿共88页3.2 寻址方式寻找操作数的方法叫寻址方式。寻找操作数的方法叫寻址方式。1、立即寻址2、直接寻址(字节、位)3、寄存器寻址4、寄存器间接寻址5、变址寻址6、相对寻址7、位寻址第12页,本讲稿共88页立即寻址方式指令中给出实际操作数据(立即数),一般用于为寄存器或存储器赋常数初值。“#”之后为立即数举例:8位立即数:MO
6、V A,#40H ;A40H16位立即数:MOV DPTR,#2100H;DPTR2100H第13页,本讲稿共88页直接寻址方式指令操作数是存储器单元地址,数据在存储器单元中。MOV A,40H;A(40H)例:设存储器两个单元的内容如图所示,执行指令 MOV A,40H 后 A=56H 直接寻址方式对数据操作时,地址是固定值,而地址所指定的单元内容为变量形式。41H 78H40H 56H第14页,本讲稿共88页直接寻址访问空间(1)内部RAM低128B(2)SFR 访问SFR的唯一方法第15页,本讲稿共88页寄存器寻址方式指令操作数为寄存器名,数据在寄存器中。例:MOV A,R0;A(R0)
7、设指令执行前 A=20H,R0=40H,执行指令后,A=40H,R0=40H 能用的寄存器有:R0R7、A、B、AB和DPTR第16页,本讲稿共88页寄存器间接寻址方式指令的操作数为寄存器名,寄存器中的内容为数据的地址。存放地址的寄存器称为间址寄存器或数据指针。例:MOV A,R0;A(R0)设指令执行前 A=20H,R0=40H,地址为40H存储器单元内容如图所示。执行指令后,A=24H,R0=40H,(40H)=34H 41H 67H 40H 34HR0第17页,本讲稿共88页寄存器间接寻址(1)内部RAM低128B,用R0、R1为间址寄存器(2)外部RAM的两种形式:R0、R1DPTR第
8、18页,本讲稿共88页变址寻址数据在存储器中,指令给出的寄存器中为数据的基地址和偏移量。数据地址=基地址+偏移量例:MOVC A,A+DPTR;A(A)+(DPTR)设指令执行前 A=09H,DPTR=2000H,存储器单元内容如图所示。执行指令后,A=12H 2008H 89H2009H 12H第19页,本讲稿共88页相对寻址方式以PC的内容作为基地址,加上偏移量,所得结果送PC寄存器作为转移地址。偏移量在128+127之间。只在相对转移指令中使用。例:SJMP80H;短跳转 PC当前值+80H为转移地址第20页,本讲稿共88页直接寻址方式之位寻址方式指令给出位地址。一位数据在存储器的位寻址
9、区。例:MOV C,40H;Cy(位地址40H)设指令执行前 Cy=1,位地址40H存储器单元如图,执行指令后,Cy=028H 0110001029H 11010111位寻址区第21页,本讲稿共88页位地址的表示方式(1)直接使用位地址(2)使用字节地址加位序号(3)用位名称(4)用寄存器符号加位序号第22页,本讲稿共88页寻址方式小结寻寻址方式址方式存存储储器空器空间间立即立即寻寻址址程序存程序存储储器器ROM直接直接寻寻址址片内片内RAM低低128字字节节和特殊功能寄存器和特殊功能寄存器SFR寄存器寄存器寻寻址址 工作寄存器工作寄存器R0R7,A,B,AB,DPTR,Cy寄存器寄存器间间接
10、接寻寻址址片内片内RAM低低128字字节节(R0,R1,SP),片外),片外RAM(R0,R1,DPTR)变变址址寻寻址址程序存程序存储储器(器(A+PC,A+DPTR)相相对寻对寻址址程序存程序存储储器当前器当前PC-128B+127B字字节节范范围围(PC+rel)位位寻寻址址片内片内RAM的的20H2FH字字节节地址中的所有位和地址中的所有位和SFR中字中字节节地址能被地址能被8整除整除单单元的位元的位第23页,本讲稿共88页3.3 数据传送类指令把源操作数传送到目的操作数,指令执行后,源操作数不变,目的操作数修改为源操作数。查表指令的寻址空间第24页,本讲稿共88页数据传送指令理解实现
11、寄存器、存储器之间的数据传送。1、内部传送指令。2、外部传送指令。3、交换指令。4、堆栈操作指令。5、查表指令。注意以下内容中注释后面对指令进行注释的方法以及所用到的缩写符号第25页,本讲稿共88页存贮器结构与数据传送指令MOVC:程序存储器MOV:片内RAMMOVX:片外RAM第26页,本讲稿共88页以累加器A为目的操作数的数据传送指令1)MOV A,#data;A data 2)MOV A,direct;A(direct)3)MOV A,Rn;A(Rn)4)MOV A,Ri;A(Ri)n=07 i=0,1第27页,本讲稿共88页以寄存器Rn为目的操作数的数据传送指令 1)MOV Rn,A;
12、Rn(A)2)MOV Rn,#data;Rn data3)MOV Rn,direct;Rn (direct)n=07注意:p36最末一行警示例3-1第28页,本讲稿共88页以直接地址为目的操作数的数据传送指令1)MOV direct,A;direct (A)2)MOV direct,#data;direct data3)MOV direct1,direct2;direct1(direct2)4)MOV direct,Rn;direct (Rn)5)MOV direct,Ri;direct (Ri)n=07 i=0,1例3-2第29页,本讲稿共88页以间址Ri为目的操作数的数据传送指令以Ri间址
13、单元为目的操作数的数据传送指令1)MOV Ri,A ;(Ri)(A)2)MOV Ri,#data ;(Ri)data3)MOV Ri,direct;(Ri)(direct)i=0,1 注意书中例3-3上一行的警示第30页,本讲稿共88页以DPTR为目的操作数的数传送指令16位立即数传送指令MOV DPTR,#data16;DPTR data16唯一的一条16位立即数传送指令例3-4第31页,本讲稿共88页外RAM数据传送指令64K范围:MOVX A,DPTR;(A)(DPTR)MOVX DPTR,A;(DPTR)A 256B范围:MOVX A,Ri ;(A)(Ri)MOVX Ri,A ;(Ri
14、)Ai=0,1注意与P2口的关系。P38例3-5倒数第三行的警示第32页,本讲稿共88页疑难指令详解数据传输指令外部数据存贮器的操作只有6条指令,注意Ri的取值范围在00FFH之间。MOV C,bit MOV A,databit,data都是数字,在00FFH,它们只相差C,A两个符号。MOVX A,Ri MOVX Ri,A与P0口有关,外部RAM地址范围00FFH,如果用P2口作为高位地址,外部RAM地址范围为P2+Ri第33页,本讲稿共88页查表指令 p39ROM数据传送指令实现从程序存储器读取数据到A累加器,只能使用变址间接寻址方式。多用于查常数表程序,可直接求取常数表中的函数值MOVC
15、 A,A+DPTR;A(A)+(DPTR)查表范围为 64KB 程序存储器任意空间,称为远程查表指令。MOVC A,A+PC ;A (A)+(PC)常数表只能在查表指令后256B范围内。(PC内容为下一条指令的起始地址。)例3-6第34页,本讲稿共88页疑难指令详解查表指令查表指令只用于程序存贮器的操作。X3X2X1X0:MOVC A,A+PC用这条指令优点在于与处理较少,且不影响其他SFR的值,缺点是表格只能靠近这条指令安排,在X3X2X1X0(H)以下的00FFH之中(PC为下条指令首地址)。偏移量放在A中,偏移量=表首地址-(X3X2X1X0+1)第35页,本讲稿共88页疑难指令详解查表
16、指令X3X2X1X0:MOVC A,A+DPTR这条指令使用广泛,使用时不用计算偏移量,表格可以放在程序存贮器的任何地址空间。缺点是如果DPTR已经被使用,则必须保护,并且在执行完查表后恢复,每次查表时只要置DPTR为表首地址就可以了。第36页,本讲稿共88页数据交换指令实现片内RAM区的数据双向传送,n=07 i=0,1。XCH A,Rn;(A)(Rn)XCH A,direct;(A)(direct)XCH A,Ri;(A)(Ri)XCHD A,Ri;(A)30(Ri)30 SWAP A;(A)74(Ri)30 例3-7第37页,本讲稿共88页堆栈操作指令实现对数据或断点地址保护 PUSH
17、direct ;SP(SP)+1,(SP)(direct)POP direct ;direct (SP),SP(SP)-1 注意书上的警示第38页,本讲稿共88页数据传送指令总结MOV:源操作数和目的操作数都在片内RAM中;MOVX:实现外部RAM与内部累加器A的数据传送;MOVC:两条专用查表指令,ROM与A之间的数据传送;以累加器A为目的寄存器的传送指令会影响PSW中的奇偶标志位,其余传送指令对所有标志位均无影响;Ri中i的范围是0和1;Rn中的n的范围是07每条指令中只能有1个Rn或Ri。如:MOV R1,R0 MOV A,R2 第39页,本讲稿共88页例:顺序执行下列指令序列,求每一步
18、执行结果MOV A,#30H ;A=30HMOV 4FH,A ;(4FH)=30HMOV R0,#20H;R0=20HMOV R0,4FH;(20H)=30HMOV 21H,20H ;(21H)=30H第40页,本讲稿共88页例:堆栈操作例:设 A=02,B=56H,执行下列指令后,SP=30H,A=02,B=56HSBRSBR:MOV SPMOV SP,#30H#30H;设栈底;设栈底PUSH APUSH APUSH BPUSH BMOV AMOV A,#0#0MOVMOV B B,#01#01POPPOP B BPOP APOP A第41页,本讲稿共88页例设内部RAM中(30H)40H,
19、(40H)10H,P1口作输入口,(P1)0CAH,程序及执行后的结果如下:MOV R0,#30H;单元地址30H送R0中MOV A,R0;R0间接寻址,将30H单元内容送AMOV R1,A;A送R1MOV B,R1;R1间接寻址,将40H单元内容送BMOV R1,P 1;将P1内容送40H单元MOV P2,P1;将P1内容送P2执行结果:(R0)=30H,(R1)=40H,(A)=40H,(B)=10H,(P1)=0CAH,(40H)=0CAH,(P2)=0CAH第42页,本讲稿共88页3.4 算术运算类指令算术运算指令执行的结果大多要影响到PSW中的某些位:OVCYACP第43页,本讲稿共
20、88页不带进位的加法指令ADD A,#data;A(A)+dataADD A,direct;A (A)+(direct)ADD A,Rn;A (A)+(Rn)ADD A,Ri;A (A)+(Ri)例3-8第44页,本讲稿共88页带进位的加法指令ADDC A,#data;A(A)+data+(Cy)ADDC A,direct;A (A)+(direct)+(Cy)ADDC A,Rn;A (A)+(Rn)+(Cy)ADDC A,Ri;A (A)+(Ri)+(Cy)注意书上的说明例3-9,3-10第45页,本讲稿共88页带借位的减法指令SUBB A,#data;A (A)-data-(Cy)SUBB
21、 A,direct;A (A)-(direct)-(Cy)SUBB A,Rn;A (A)-(Rn)-(Cy)SUBB A,Ri;A (A)-(Ri)-(Cy)注意书上的说明,最末两行例3-11第46页,本讲稿共88页加1指令INC A;A (A)+1INC direct;direct (direct)+1INC Rn;Rn (Rn)+1INC Ri;(Ri)(Ri)+1INC DPTR;DPTR (DPTR)+1第47页,本讲稿共88页疑难指令详解算术指令INC Ri 执行后Ri内容发生变化INC Ri执行后Ri内容不发生变化,而Ri间接寻址单元的内容发生变化第48页,本讲稿共88页减1指令D
22、EC A;A (A)-1DEC direct;direct (direct)-1DEC Rn;Rn (Rn)-1DEC Ri;(Ri)(Ri)-1第49页,本讲稿共88页乘/除运算指令乘法指令 MUL AB;BA (A)(B)除法指令 DIV AB;AB (A)(B)第50页,本讲稿共88页十进制调整指令DA A ;若(AC)=1或A309,则 A(A)+06H;若(Cy)=1或A749,则A(A)+60H例3-14第51页,本讲稿共88页疑难指令详解算术指令 DA AIF(A30)9 (AC)=1THEN(A30)(A30)+6ANDIF(A74)9 (CY)=1THEN A74)A74)+
23、6在计算机中,遇到十进制调整指令时,中间结果的修正是由硬件自动进行的,用户不用考虑加6,只要在加法指令后紧跟一条“DA A”指令既可。第52页,本讲稿共88页算术运算指令总结加1减1指令不影响Cy第53页,本讲稿共88页3.5 逻辑运算及移位类指令逻辑运算的特点:按位进行。第54页,本讲稿共88页逻辑与运算指令ANL A,#data;A(A)dataANL A,direct;A (A)(direct)ANL A,Rn;A (A)(Rn)ANL A,Ri;A (A)(Ri)ANL direct,A;direct (direct)(A)ANL direct,#data;direct (direct
24、)data例3-16第55页,本讲稿共88页逻辑或运算指令 ORL A,#data;A (A)dataORL A,direct;A (A)(direct)ORL A,Rn;A (A)(Rn)ORL A,Ri;A (A)(Ri)ORL direct,A;direct (direct)(A)ORL direct,#data;direct (direct)data例3-17第56页,本讲稿共88页逻辑异或运算指令XRL A,#data;A (A)dataXRL A,direct;A (A)(direct)XRL A,Rn;A (A)(Rn)XRL A,Ri;A (A)(Ri)XRL direct,A
25、;direct(direct)(A)XRL direct,#data;direct(direct)data例3-17第57页,本讲稿共88页取反/清零指令累加器清零指令:CLR A;0 A 累加器取反指令:CPL A;/A A 第58页,本讲稿共88页移位指令不带进位的循环左移指令RL A;(A)n+1(A)n,(A)0(A)7 不带进位的循环右移指令RR A;(A)n(A)n+1,(A)7 (A)0 带进位的循环左移指令RLC A ;(A)0Cy,(A)n+1(A)n,Cy(A)7,带进位的循环右移指令RRC A;(A)7Cy,(A)n(A)n+1,Cy(A)0 例3-18第59页,本讲稿共
26、88页逻辑运算指令总结循环移位必须在A中进行;字节的清零与取反只有A。第60页,本讲稿共88页3.6 控制转移类指令控制程序从原顺序执行地址转移到其他指令地址上,控制转移指令的分类:条件转移(比较转移,循环转移)无条件转移(相对转移,短转移,长转移,间接转移)子程序调用即返回第61页,本讲稿共88页无条件控制转移指令1、长转移指令LJMP addr16 ;PC addr162、绝对转移指令AJMP addr11 ;PC(PC)+2,PC100 addr113、短转移指令SJMP rel ;PC(PC)+2+rel4、变址寻址转移指令JMP A+DPTR ;PC(A)+(DPTR)例3-19,3
27、-20第62页,本讲稿共88页疑难指令详解转移指令JMPJMP A+DPTR散转指令的表格中,一般存放的是无条件转移指令LJMP XXXX,由LJMP XXXX再转移到相应的处理程序,因此,要给每个入口地址展宽为3个字节,以便安放3字节的LJMP指令。第63页,本讲稿共88页累加器判零转移指令JZ rel ;若(A)0,则PC(PC)+2+rel,若(A)0,则PC(PC)+2JNZ rel ;若(A)0,则PC(PC)+2+rel,若(A)0,则PC(PC)+2第64页,本讲稿共88页比较条件转移指令CJNE A,#data,rel ;若(A)data,则PC(PC)+3,Cy 0若(A)d
28、ata,则PC (PC)+3+rel,Cy 0若(A)data,则PC (PC)+3+rel,Cy 1CJNE A,direct,rel;若(A)(direct),则PC (PC)+3,Cy 0若(A)(direct),则PC (PC)+3+rel,Cy 0若(A)(direct),则PC (PC)+3+rel,Cy 1第65页,本讲稿共88页比较条件转移指令CJNE Rn,#data,rel;若(Rn)data,则PC(PC)+3,Cy 0 若(Rn)data,则PC(PC)+3+rel,Cy 0 若(Rn)data,则PC (PC)+3+rel,Cy 1CJNE Ri,#data,rel;
29、若(Ri)data,则PC(PC)+3,Cy 0 若(Ri)data,则PC(PC)+3+rel,Cy 0若(Ri)data,则PC(PC)+3+rel,Cy 1第66页,本讲稿共88页疑难指令详解转移指令CJNECJNE指令在进行比较不相等时程序作相对转移,并指出其大小,以备作第二次判断。数值比较:(CY)=0,目的操作数源操作数(CY)=1,目的操作数源操作数PC(PC)+3+rel,CY 0目的操作数源操作数PC(PC)+3+rel,CY 1第68页,本讲稿共88页减1条件转移指令DJNZ Rn,rel ;Rn(Rn)-1若(Rn)0,则PC (PC)+2+rel若(Rn)0,则PC (
30、PC)+2DJNZ direct,rel;direct (direct)-1若(direct)0,则PC (PC)+3+rel若(direct)0,则PC (PC)+3第69页,本讲稿共88页疑难指令详解转移指令DJNZ这是一组功能极强的循环转移指令可以派生出很多不同的应用和多重循环层次。内部RAM单元可以作为循环计数器。例3-21,3-22第70页,本讲稿共88页子程序概念什么是子程序?具有一定功能的程序段为什么要用子程序?减少编程的工作量,缩短程序的长度第71页,本讲稿共88页子程序特点 子程序:能完成某项特定功能的独立程序段,可被反复调用。为什么要用子程序,优点:(1)不必重复书写同样的
31、程序,提高编程效率;(2)程序的逻辑结构简单,便于阅读;(3)缩短了源程序和目标程序的长度,节省了程序存储器空间;(4)使程序模块化、通用化,便于交流,共享资源;(5)便于按某种功能调试。多次应用,完成相同的某种基本运算或操作的程序段,独立出来,标准化;需要时通过调用指令进行调用。可以节省存储空间,不容易出错。第72页,本讲稿共88页主程序与子程序之间的关系第73页,本讲稿共88页子程序调用LCALL addr16;PC(PC)+3(SP)(SP)+1,SP (PC)70(SP)(SP)+1,SP (PC)158 PC addr16ACALL addr11;PC (PC)+2(SP)(SP)+
32、1,SP (PC)70(SP)(SP)+1,SP (PC)158 PC100 addr11注意堆栈的变化!第74页,本讲稿共88页返回指令RET;PC158(SP),SP(SP)-1 PC70 (SP),SP (SP)-1RETI;PC158(SP),SP(SP)-1 PC70 (SP),SP (SP)-1注意p57 最末的警示第75页,本讲稿共88页控制转移指令总结控制转移指令通过改写PC的当前值,从而改变CPU执行程序的顺序,使程序发生跳转。子程序调用和返回指令也使程序发生转移。熟记LJMP,LCALL第76页,本讲稿共88页空操作指令NOP;PC(PC)+1第77页,本讲稿共88页3.7
33、 位操作类指令89C51有一个结构完整的布尔处理器包括位累加器和位操作指令。第78页,本讲稿共88页布尔处理机特点1、累加器CY,借用了进位标志位2、位寻址区(RAM)3、位寻址寄存器(SFR)4、位寻址I/O口:并行I/O中的每一位5、位操作指令系统:可实现各种位操作指令第79页,本讲稿共88页采用布尔处理器的优点1、可以利用位逻辑操作功能进行随机逻辑设计,可以把逻辑表达式直接变换成软件执行,方法简便;2、免去了过多的数据往返、字节屏蔽和测试分支,大大简化了编程,节省了存储器空间,加快了处理速度;3、还可以实现复杂的组合逻辑处理功能。第80页,本讲稿共88页bit的四种表示形式(1)直接使用
34、位地址(2)使用字节地址加位序号(3)用位名称(4)用寄存器符号加位序号CY在位操作指令中直接用C表示。第81页,本讲稿共88页位变量传送指令MOV C,bit;Cy(bit)MOV bit,C;bit (Cy)注意:警示例3-23第82页,本讲稿共88页位置位与清零指令 SETB C;Cy 1CLR C;Cy 0SETB bit;bit 1CLR bit;bit 0第83页,本讲稿共88页位逻辑运算指令ANL C,bit;Cy(Cy)(bit)ANL C,/bit;Cy (Cy)(/bit)ORL C,bit;Cy (Cy)(bit)ORL C,/bit;Cy (Cy)(/bit)CPL C
35、;Cy (/Cy)CPL bit;bit (/bit)例3-24第84页,本讲稿共88页位控制转移指令JC rel;若(Cy)=1,则PC(PC)+2+rel若(Cy)=0,PC则(PC)+2JNC rel;若(Cy)=1,则PC (PC)+2若(Cy)=0,则PC (PC)+2+rel第85页,本讲稿共88页位控制转移指令JB bit,rel;若(bit)=1,则PC(PC)+3+rel若(bit)=0,则PC (PC)+3JNB bit,rel;若(bit)=1,则PC(PC)+3若(bit)=0,则PC (PC)+3+relJBC bit,rel;若(bit)=1,则PC(PC)+3+rel,且0bit若(bit)=0,则PC (PC)+3 注意这条指令完成了两个功能第86页,本讲稿共88页位操作指令总结Bit与bit之间不能直接传送;无位“异或”指令。例3-25,3-26第87页,本讲稿共88页例用逻辑表达式表示出下面程序的功能。MOV A,BANL A,R0PUSH ACCMOV A,R0CPL AXRL A,BPOP BORL A,B第88页,本讲稿共88页
限制150内