《指令系统总结及课后题.ppt》由会员分享,可在线阅读,更多相关《指令系统总结及课后题.ppt(28页珍藏版)》请在三一办公上搜索。
1、第三章指令系统小结及课后题,1.简述下列基本概念:指令、指令系统、机器语言、汇编语言、高级语言。,指令:CPU根据人的意图来执行某种操作的命令指令系统:一台计算机所能执行的全部指令集合机器语言:用二进制编码表示,计算机能直接识别和执行的语言汇编语言:用助记符、符号和数字来表示指令的程序语言高级语言:独立于机器的,在编程时不需要对机器结构及其指令系统有深入了解的通用性语言,4、简述8951的寻址方式和所能涉及的寻址空间。,3、简述8951的汇编指令格式。,答:操作码 目的操作数,源操作数,寻址方式中常用的符号注释,Rn(n=07):当前选中的工作寄存器组R0R7。Ri(I=0,1):作为地址指针
2、的两个工作寄存器R0,R1。#data:8位立即数。#data16:16位立即数。direct:8位片内RAM单元(包括SFR)的直接地址。addr11:11位目的地址,用于ACALL和AJMP指令中。addr16:16位目的地址。用于LCALL和LJMP指令中。rel:补码表示的8位地址偏移量。范围:-128+127D。bit:片内RAM或SFR的直接寻址位地址。:间接寄存器的符号。/:位操作指令中对该位先取反再参与操作,不影响原值。():中的内容。():指出的地址单元中的内容。:指令操作流程方向。,5、访问特殊功能寄存器和外数据存储器,应采用那些寻址方式?答:,SFR:直接寻址,位寻址,寄
3、存器寻址;片外RAM:寄存器 间接寻址,6、8951中已知(30H)=38H,请分析以下各是什么指令,说明源操作数的寻址方式以及执行结果。,MOV A,40H;直接寻址(40H)A MOV R0,A;寄存器寻址(A)R0 MOV P1,#0F0H;立即数寻址0F0P1 MOV R0,30H;直接寻址(30H)(R0)MOV DPTR,#3848H;立即数寻址 3848HDPTR MOV 40H,38H;直接寻址(38H)40H MOV R0,30H;直接寻址(30H)R0 MOV P0,R0;寄存器寻址(R0)P0 MOV 18H,#30H;立即数寻址30H18H MOV A,R0;寄存器间接
4、寻址(R0)A MOV P2,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、8951片内高128字节的地址寻址要注意什么/?答:用直接寻址,位寻址,寄存器寻址,8、指出些列指令的本质?,MOV A,DATA;MOV A,#DATA;MOV DATA1,DATA2;MOV 74H,#78H;,直接寻址2字节1周期立即数寻址2字节1周期直接寻址3字节2周期立即数寻址3字节2周期,9、设R0的内容分为
5、32H,A的内容为48H,。请指出在执行下列程序段后上述各单元内容的变化?,MOVA,R0;(R0)=80HAMOVR0,40H;(40H)=08H(R0)MOV40H,A;(A)=8040HMOVR0,#35H;35HR0最后结果:(R0)=35H(A)=80H,(32H)=08H,(40H)=80H,高128字节RAM区(SFR区,特殊功能寄存器区),字节地址,FF F0 E0 D0 B8 B0 A8 A0 99 98 90 8D 8C 8B 8A 89 88 87 83 82 81 80,B ACC PSW IP P3 IE P2 SBUF SCON P1 TH1 TH0 TL1 TL0
6、 TMD TCON PCON DPH DPL SP P0,10、如何访问SFR,可采用那些寻址方式?答:用直接寻址,位寻址,寄存器寻址11、如何访问片外RAM,可使用那些寻址方式?答:只能采用寄存器间接寻址(用MOVX指令)12、如何访问片内RAM,可使用那些寻址方式?答:低128字节:直接寻址,位寻址,寄存器间接寻址,寄存器寻址(R0R7)高128字节:直接寻址,位寻址,寄存器寻址13、如何访问片内外程序存储器,可使用那些寻址方式?答:采用变址寻址(用MOVC指令)14、说明十进制调整的原因和方法?答:压缩BCD码在进行加法运算时应逢十进一,而计算机只将其当作十六进制数处理,此时得到的结果不
7、正确。用DA A指令调整(加06H,60H,66H)15、说明8951布尔机处理机功能?答:用来进行位操作,16.已知(A)=83H,(R0)=17H,(17H)=34H。请写出执行完下列程序段后A的内容。ANLA,#17HORL17H,AXRLA,R0CPLA,所以(A)=CBH,17.使用位操作指令实现下列逻辑操作。要求不得改变未涉及位的内容。(1)使ACC.0置1;(2)清除累加器高4位;(3)清除ACC.3,ACC.4,ACC.5,ACC.6。,(1)SETB ACC.0或SETB E0H;E0H是累加器的地址(2)CLR ACC.7 CLR ACC.6 CLR ACC.5 CLR A
8、CC.4(3)CLR ACC.6 CLR ACC.5 CLR ACC.4 CLR ACC.3,MOV 27H,R7MOV 26H,R6MOV 25H,R5MOV 24H,R4MOV 23H,R3MOV 22H,R2MOV 21H,R1MOV 20H,R0,18.编程实现把内部RAM R0R7的内容传递到20H27H单元。,19.试编写程序,将内部RAM的20H、21H和22H 3个连续单元的内容依次存入2FH、2EH和2DH中。,MOV 2FH,20 MOV 2EH,21 MOV 2DH,22,20、编程,进行两个16位数的减法:6F5DH-13B4H,结果存入内部RAM的30和31H单元,3
9、0H存低八位。,CLR CMOV A,#5DH;被减数的低8位AMOV R2,#B4H;减数低8位R2SUBB A,R2;被减数减去减数,差AMOV 30H,A;低8位结果30HMOV A,#6FH;被减数的高8位AMOV R2,#13H;减数高8位R2SUBB A,R2;被减数减去减数,差AMOV 31H,A;高8位结果30H,带借位减法指令(四条),(1)A10CJNE A,#0AH,L1;(A)与10比较,不等转L1LJMP LABEL;相等转LABELL1:JNC LABEL;(A)大于10,转LABEL,21、编程,若累加器A满足下列条件,则程序转至LABEL存储单元,设A中为无符号
10、数。,(2)A10CJNE A,#0AH,L1;(A)与10比较,不等转L1RET;相等结束L1:JC LABEL;(A)大于10,转LABEL RET;(A)小于10,结束,(3)A10CJNE A,#0AH,L1;(A)与10比较,不等转L1L2:LJMP LABEL;相等转LABELL1:JNC L2;(A)小于10,转L2RET,(1)10;(2)A10;(3)A10。,22.已知(SP)=25H,(PC)=2345H,(24H)=12H,(25H)=34H,(26H)=56H。问此时执行“RET”指令以后,(SP)=?(PC)=?,(SP)=23H,(PC)=3412H,23.若(S
11、P)=25H,(PC)=2345H,标号LABEL所在的地址为3456H。问执行长调用指令“LCALL LABEL”后,堆栈指针和堆栈的内容发生什么变化?PC的值等于什么?,(SP)=27H,(26H)=48H,(27H)=23H,(PC)=3456H,24.上题中的LCALL指令能否直接换成ACALL指令,为什么?如果使用ACALL指令,则可调用的地址范围是什么?,MOV R2,#31H;数据块长度R2 MOV R0,#20H;数据块首地址R0LOOP:MOV A,R0;待查找的数据A CLR C;清进位位 SUBB A,#0AAH;待查找的数据是0AAH吗 JZ L1;是,转L1 INC
12、R0;不是,地址增1,指向下一个待查数据 DJNZ R2,LOOP;数据块长度减1,不等于0,继续查找 MOV 51H,#00H;等于0,未找到,00H51H RETL1:MOV 51H,#01H;找到,01H51H RET,25.试编写程序,查找在内部RAM的20H50H单元中是否有0AAH这一数据。若有,则将51H单元置为01H;若未找到,则将51H单元清0。,26.试编写程序,查找在内部RAM的20H50H单元中出现00H的次数,并将查找的结果存入51H单元。,MOV R2,#31H;数据块长度R2 MOV R0,#20H;数据块首地址R0LOOP:MOV A,R0;待查找的数据A JN
13、Z L1;不为0,转L1 INC 51H;为0,00H个数增1 L1:INC R0;地址增1,指向下一个待查数据 DJNZ R2,LOOP;数据块长度减1,不等于0,继续查找 RET,27.外部数据RAM中有一个数据块,存有若干字符、数字,首地址为SOURCE。要求将该数据块传送到内部RAM以DIST开始的区域,直到遇到字符“”时结束(“”也要传送,它的ASCII码为24H)。,MOV DPTR,#SOURCE;源首地址DPTR MOV R0,#DIST;目的首地址R0 LOOP:MOVX A,DPTR;传送一个字符 MOV R0,A INC DPTR;指向下一个字符 INC R0 CJNE
14、A,#24H,LOOP;传送的是“$”字符吗?不是,传送下一个字符 RET,已知R3和R4中存有一个十六位的二进制数,高位在3中,低位在4中,编程求其补,并存回原处。MOV A,R3;取该数高8位A ANL A,#80H;取出该数符号判断 JZ L1;是正数,转L1 MOV A,R4;是负数,将该数低8位A CPL A;低8位取反 ADD A,#01H;加1 MOV R4,A;低8位取反加1后R4 MOV A,R3;将该数高8位A CPL A;高8位取反 ADDC A,#00H;加上低8位加1时可能产生的进位 MOV R3,A;高8位取反加1后R L1:RET,29、已知30H和31H中存有一
15、个十六位的二进制数,高位在前,低位在后,编程将它们乘2,并存回原处。CLR C;清进位位C MOV A,31H;取该数低8位A RLC A;带进位位左移1位 MOV 31H,A;结果存回31H MOV A,30H;取该数高8位A RLC A;带进位位左移1位 MOV 30H,A;结果存回30H,30、内存中有两个4字节以压缩的BCD码形式存放的十进制数,一个放在30H-33H的单元中,一个放在40H-43H的单元中,编程求他们的和,结果放在30H-33H的单元中。MOV R2,#04H;字节长度R2 MOV R0,#30H;一个加数首地址R0 MOV R1,#40H;另一个加数首地址R1 CL
16、R C;清进位位LOOP:MOV A,R0;取一个加数 ADDC A,R1;两个加数带进位位相加 DA A;十进制调整 MOV R0,A;存放结果 INC R0;指向下一个字节 INC R1;DJNZ R2,LOOP;数据块长度减1,不等于0,继续查找 RET,31、编程,把片外RAM从2000H开始存放的8个数传送到片内30H开始的单元中。MOV R2,#08H;数据块长度R2 MOV R0,#30H;数据块目的地址R0 MOV DPTR,#2000H;数据块源地址DPTRLOOP:MOVX A,DPTR;传送一个数据 MOV R0,A INC DPTR;指向下一个数据 INC R0;DJN
17、Z R2,LOOP;数据块长度减1,没传送完,继续传送 RET,32.要将片内RAM中0FH单元的内容传送到寄存器B,对0FH单元的寻址可以有3种方法:(1)R寻址;(2)R间址;(3)direct寻址。请分别编出相应程序,比较其字节数、机器周期数和优缺点。,33.阅读下列程序,要求:(1)说明该程序的功能;(2)填写所缺的机器码;(3)试修改程序,使片内RAM的内容成为如图3-20所示的结果。7A MOVR2,#0AH MOVR0,#50HE4CLRAF6LOOP:MOVR0,A08INCR0DA DJNZR2,LOOPDONE:,图3-20 片内RAM,34.设(R0)=7EH,(DPTR
18、)=10FEH,片内RAM中7E单元的内容为0FFH,7F单元的内容为38H。试为下列程序的每条指令注释其执行结果。INCR0INCR0INCR0INCDPTRINCDPTRINCDPTR35.下列程序段经汇编后,从1000H开始的各有关存储单元的内容将是什么?ORG1000HTAB1EQU1234HTAB2EQU3000HDB“START”DWTAB1,TAB2,70H,36.阅读下列程序,并要求:(1)说明程序的功能;(2)写出涉及的寄存器及片内RAM单元(如图3-21所示)的最后结果。图3-22片内RAMMOVR0,#40HMOVA,R0INCR0ADDA,R0INCR0MOVR0,ACLRAADDCA,#0INCR0MOVR0,A,图3-21 片内RAM,37.要求同上题(如图3-22所示),程序如下:MOVA,61HMOVB,#02HMULABADDA,62HMOV63H,ACLRAADDCA,BMOV64H,A 图3-22片内RAM,38.试编写程序:采用“与”运算,判断某8位二进制数是奇数还是偶数个1。39.试编写程序:采用“或”运算,使任意8位二进制数的符号位必为1。MOV A,XXHORL A,#80HMOV XXH,A40.请思考:采用“异或”运算,怎样可使一带符号数的符号位改变,数据位不变;怎样可使该数必然变为0。,