第三章1、指令:CPU根据人的意图来执行某种操作的命令指令系统:一台计算机所能执行的全部指令集合机器语言:用二进制编码表示,计算机能直接识别和执行的语言汇编语言:用助记符、符号和数字来表示指令的程序语言高级语言:独立于机器的,在编程时不需要对机器结构及其指令系统有深入了解的通用性语言2、见第1题3、操作码[目的操作数][,源操作数]4、寻址方式寻址空间立即数寻址程序存储器ROM直接寻址片内RAM低128B、特殊功能寄存器寄存器寻址工作寄存器R0-R7、A、B、C、DPTR寄存器间接寻址片内RAM低128B、片外RAM变址寻址程序存储器(@A+PC,@A+DPTR)相对寻址程序存储器256B范围(PC+偏移量)位寻址片内RAM的20H-2FH字节地址、部分SFR5、SFR:直接寻址,位寻址,寄存器寻址;片外RAM:寄存器间接寻址6、MOVA,40H;直接寻址(40H)→AMOVR0,A;寄存器寻址(A)→R0MOVP1,#0F0H;立即数寻址0F0→P1MOV@R0,30H;直接寻址(30H)→(R0)MOVDPTR,#3848H;立即数寻址3848H→DPTRMOV40H,38H;直接寻址(38H)→40HMOVR0,30H;直接寻址(30H)→R0MOVP0,R0;寄存器寻址(R0)→P0MOV18H,#30H;立即数寻址30H→18HMOVA,@R0;寄存器间接寻址((R0))→AMOVP2,P1;直接寻址(P1)→P2最后结果:(R0)=38H,(A)=40H,(P0)=38H,(P1)=(P2)=0F0H,(DPTR)=3848H,(18H)=30H,(30H)=38H,(38H)=40H,(40H)=40H,(48H)=38H注意:→左边是内容,右边是单元7、用直接寻址,位寻址,寄存器寻址8、MOVA,DATA;直接寻址2字节1周期MOVA,#DATA;立即数寻址2字节1周期MOVDATA1,DATA2;直接寻址3字节2周期MOV74H,#78H;立即数寻址3字节2周期如果想查某一指令的机器码,字节数或周期数可查阅书本后面的附录A9、MOVA,@R0;((R0))=80H→AMOV@R0,40H;(40H)=08H→(R0)MOV40H,A;(A)=80→40HMOVR0,#35H;35H→R0最后结果:(R0)=35H(A)=80H,(32H)=08H,(40H)=80H10、用直接寻址,位寻址,寄存器寻址11、只能采用寄存器间接寻址(用MOVX指令)12、低128字节:直接寻址,位寻址,寄存器间接寻址,寄存器寻址(R0~R7)高128字节:直接寻址,位寻址,寄存器寻址13、采用变址寻址(用MOVC指令)14、压缩BCD码在进行加法运算时应逢十进一,而计算机只将其当作十六进制数处理,此时得到的结果不正确。用DAA指令调整(加06H,60H,66H)15、用来进行位操作16、ANLA,#17H;83H∧17H=03H→AORL17H,A;34H∨03H=37H→17HXRLA,@R0;03H⊕37H=34HCPLA;34H求反等于CBH所以(A)=CBH17、(1)SETBACC.0或SETBE0H;E0H是累加器的地址(2)CLRACC.7CLRACC.6CLRACC.5CLRACC.4(3)CLRACC.6CLRACC.5CLRACC.4CLRACC.318、MOV27H,R7MOV26H,R6MOV25H,R5MOV24H,R4MOV23H,R3MOV22H,R2MOV21H,R1MOV20H,R019、MOV2FH,20MOV2EH,21MOV2DH,2220、CLRCMOVA,#5DH;被减数的低8位→AMOVR2,#B4H;减数低8位→R2SUBBA,R2;被减数减去减数,差→AMOV30H,A;低8位结果→30HMOVA,#6FH;被减数的高8位→AMOVR2,#13H;减数高8位→R2SUBBA,R2;被减数减去减数,差→AMOV31H,A;高8位结果→30H注意:如果在你的程序中用到了进位位,在程序开始的时候要记得清0进位位21、(1)A≥10CJNEA,#0AH,L1;(A)与10比较,不等转L1LJMPLABEL;相等转LABELL1:JNCLABEL;(A)大于10,转LABEL或者:CLRCSUBBA,#0AHJNCLABEL(2)A>10CJNEA,#0AH,L1;(A)与10比较,不等转L1RET;相等结束L1:JNCLABEL;(A)大于10,转LABELRET;(A)小于10,结束或者:CLRCSUBBA,#0AHJNCL1RETL1:JNZLABELRET(3)A≤10CJNEA,#0AH,L1;(A)与10比较,不等转L1L2:LJMPLABEL;相等转LABELL1:JCL2;(A)小于10,转L2RET或者:CLRCSUBBA,#0AHJCLABELJZLABELRET22、(SP)=23H,(PC)=3412H参看书上80页23、(SP)=27H,(26H)=48H,(27H)=23H,(PC)=3456H参看书上79页24、不能。ACALL是短转指令,可调用的地址范围是2KB。在看这个题的时候同时看一下AJMP指令。同时考虑调用指令ACALL和LCALL指令和RET指令的关系。25、MOVR2,#31H;数据块长度→R2MOVR0,#20H;数据块首地址→R0LOOP:MOVA,@R0;待查找的数据→ACLRC;清进位位SUBBA,#0AAH;待查找的数据是0AAH吗JZL1;是,转L1INCR0;不是,地址增1,指向下一个待查数据DJNZR2,LOOP;数据块长度减1,不等于0,继续查找MOV51H,#00H;等于0,未找到,00H→51HRETL1:MOV51H,#01H;找到,01H→51HRET26、MOVR2,#31H;数据块长度→R2MOVR0,#20H;数据块首地址→R0LOOP:MOVA,@R0;待查找的数据→AJNZL1;不为0,转L1INC51H;为0,00H个数增1L1:INCR0;地址增1,指向下一个待查数据DJNZR2,LOOP;数据块长度减1,不等于0,继续查找RET27、MOVDPTR,#SOURCE;源首地址→DPTRMOVR0,#DIST;目的首地址→R0LOOP:MOVXA,@DPTR;传送一个字符MOV@R0,AINCDPTR;指向下一个字符INCR0CJNEA,#24H,LOOP;传送的是“$”字符吗?不是,传送下一个字符RET28、MOVA,R3;取该数高8位→AANLA,#80H;取出该数符号判断JZL1;是正数,转L1MOVA,R4;是负数,将该数低8位→ACPLA;低8位取反ADDA,#01H;加1MOVR4,A;低8位取反加1后→R4MOVA,R3;将该数高8位→ACPLA;高8位取反ADDCA,#00H;加上低8位加1时可能产生的进位MOVR3,A;高8位取反加1后→R3L1:RET29、CLRC;清进位位CMOVA,31H;取该数低8位→ARLCA;带进位位左移1位MOV31H,A;结果存回31HMOVA,30H;取该数高8位→ARLCA;带进位位左移1位MOV30H,A;结果存回30H30、MOVR2,#04H;字节长度→R2MOVR0,#30H;一个加数首地址→R0MOVR1,#40H;另一个加数首地址→R1CLRC;清进位位LOOP:MOVA,@R0;取一个加数ADDCA,@R1;两个加数带进位位相加DAA;十进制调整MOV@R0,A;存放结果INCR0;指向下一个字节INCR1;DJNZR2,LOOP;数据块长度减1,不等于0,继续查找RET31、MOVR2,#08H;数据块长度→R2MOVR0,#30H;数据块目的地址→R0MOVDPTR,#2000H;数据块源地址→DPTRLOOP:MOVXA,@DPTR;传送一个数据MOV@R0,AINCDPTR;指向下一个数据INCR0;DJNZR2,LOOP;数据块长度减1,没传送完,继续传送RET32、(1)MOVR0,0FH;2字节,2周期4字节4周期(差)MOVB,R0;2字节,2周期(2)MOVR0,#0FH;2字节,1周期4字节3周期(中)MOVB,@R0;2字节,2周期(3)MOVB,#0FH;3字节,2周期3字节2周期(好)33、(1)功能是将片内RAM中50H~51H单元清0。(2)7A0A(大家可以看一下书上,对于立即数寻址的话,后面一个字节存放的是立即数)7850(第一个字节的后三位是寄存器,前一个条指令是010也就是指的R2,在这里是R0,所以应该是78,后一个字节存放的是立即数)DAFC(这里涉及到偏移量的计算,可以参考书上56页)34、INC@R0;(7EH)=00HINCR0;(R0)=7FHINC@R0;(7FH)=39HINCDPTR;(DPTR)=10FFHINCDPTR;(DPTR)=1100HINCDPTR;(DPTR)=1101H35、解:(1000H)=53H(1001H)=54H(1002H)=41H(1003H)=52H(1004H)=54H(1005H)=12H(1006H)=34H(1007H)=30H(1008H)=00H(1009H)=70H36、MOVR0,#40H;40H→R0MOVA,@R0;98H→AINCR0;41H→R0ADDA,@R0;98H+(41H)=47H→AINCR0MOV@R0,A;结果存入42H单元CLRA;清AADDCA,#0;进位位存入AINCR0MOV@R0,A;进位位存入43H功能:将40H,41H单元中的内容相加结果放在42H单元,进位放在43H单元,(R0)=43H,(A)=1,(40H)=98H,(41H)=AFH,(42H)=47H,(43H)=01H37、MOVA,61H;F2H→AMOVB,#02H;02H→BMULAB;F2H×O2H=E4H→AADDA,62H;积的低8位加上CCH→AMOV63H,A;结果送62HCLRA;清AADDCA,B;积的高8位加进位位→AMOV64H,A;结果送64H功能:将61H单元的内容乘2,低8位再加上62H单元的内容放入63H,将结果的高8位放在64H单元。(A)=02H,(B)=01H,(61H)=F2H,(62H)=CCH,(63H)=B0H,(64H)=02H39、MOVA,XXHORLA,#80HMOVXXH,A40、(2)MOVA,XXHMOVR0,AXRLA,R0第五章1、什么是中断和中断系统?其主要功能是什么?答:当CPU正在处理某件事情的时候,外部发生的某一件事件请求CPU迅速去处理,于是,CPU暂时中止当前的工作,转去处理所发生的事件,中断服务处理完该事件以后,再回到原来被终止的地方,继续原来的工作。这种过程称为中断,实现这种功能的部件称为中断系统。功能:(1)使计算机具有实时处理能力,能对外界异步发生的事件作出及时的处理(2)完全消除了CPU在查询方式中的等待现象,大大提高了CPU的工作效率(3)实现实时控制2、试编写一段对中断系统初始化的程序,使之允许INT0,INT1,TO,串行口中断,且使T0中断为高优先级中断。解:MOVIE,#097HMOVIP,#02H3、在单片机中,中断能实现哪些功能?答:有三种功能:分时操作,实时处理,故障处理4、89C51共有哪些中断源?对其中端请求如何进行控制?答:(1)89C51有如下中断源①:外部中断0请求,低电平有效②:外部中断1请求,低电平有效③T0:定时器、计数器0溢出中断请求④T1:定时器、计数器1溢出中断请求⑤TX/RX:串行接口中断请求(2)通过对特殊功能寄存器TCON、SCON、IE、IP的各位进行置位或复位等操作,可实现各种中断控制功能5、什么是中断优先级?中断优先处理的原则是什么?答:中断优先级是CPU相应中断的先后顺序。原则:(1)先响应优先级高的中断请求,再响应优先级低的(2)如果一个中断请求已经被响应,同级的其它中断请求将被禁止(