(完整)单片机原理与运用-第三章答案编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)单片机原理与运用-第三章答案)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整)单片机原理与运用-第三章答案的全部内容。
第三章单片机的汇编语言与程序设计习题1.设内部RAM中59H单元的内容为50H,写出当执行下列程序段后寄存器A,R0和内部RAM中50H,51H单元的内容为何值?MOV A,59HMOV R0,AMOV A,#00HMOV @R0,AMOV A,#25HMOV 51H,AMOV 52H,#70H解: MOV A,59H ; A=50HMOV R0,A ; RO=50HMOV A,#00H ; A=00HMOV @R0,A ; 50H=00HMOV A,#25H ; A=25HMOV 51H,A ; 51H=25HMOV 52H,#70H ; 52H=70H所以:A=25H R0=50H ; 50H=00H 51H=25H2.请选用合适的指令对P0口内容做修改(例如使P0。
0~P0。
3不变,P0。
4~P0。
7为0).解: MOV A,P0ANL A,0fhMov P0,A3.试问外部数据存储器和程序存储器可以用哪些指令来实现?举例说明。
解:访问外部数据存储器指令有:MOVX @DPTR,A MOVX DPTR,#0100H MOV @DPTR,AMOVX A,@DPTR MOVX DPTR,#0200H MOV A,@DPTRMOVX A,@Ri MOVX A,@R0MOVX @Ri,A MOVX @RI,A访问程序存储器指令有:MOVX A,@A+PCMOVX A,@A+DPTR4.设堆栈指针SP中的内容为60H,内部RAM中30H和31H单元的内容分别为24H和10H,执行下列程序段后,61H,62H,30H,31H,DPTR及SP中的内容将有何变化?PUSH 30HPUSH 31HPOP DPLPOP DPHMOV 30H,#00HMOV 31H,#0FFH解:PUSH 30H ;61H=24HPUSH 31H ;62=10H SP=62HPOP DPL ;DPL=10HPOP DPH ;DPH=24H SP=60HMOV 30H,#00H ;30H=00HMOV 31H,#0FFH ;31H=0FFH5.设(A)=40H,(R1)=23H,(40H)=05H。
执行下列两条指令后,累加器A和R1以及内部RAM中40H单元的内容各位何值?XCH A,R1XCHD A,@R1解: XCH A,R1 ;A=23H R1=40HXCHD A,@R1 ;A=25H 40H=03H6.两个四位BCD码数相加,被加数和加数分别存于50H,51H和52H,53H单元中(次序为千位、百位在低地址中),和数存在54H,55H和56H中(56H用来存放最高位的进位,试编写加法程序)解: ORG 0000HLJMP STARTORG 0100HSTART: MOV A,53HADD A,51HDA AMOV 55H,AMOV A,52HADDC A,50HDA AMOV 56H,CSJMP $END7。
设(A)=01010101B,(R5)=10101010B,分别写出执行ANL A,R5;ORL A,R5:XRL A,R5 指令后结果。
解: ANL A,R5 ; 00000000BORL A,R5 ; 11111111BXRL A,R5 ; 111111118.设指令SJMPrel=7EH,并假设该指令存放在2114H和2115H单元中.当该指令执行后,程序将跳转到何地址?解:2116H+60H=2176H9。
简述转移指令AJMP addr11,SJMP rel,LJMP addr16及JMP @A+DRTR的应用场合。
解:AJMP addr11为2K字节范围内的无条件转跳指令,把程序的执行转移到指定的地址。
SJMP rel是无条件转跳指令,执行时在PC加2后,把指令中补码形式的偏移量加到PC上,并计算出转向目标地址.转向的目标地址可以在这条指令前128字节到后127字节之间LJMP addr16执行这条指令时把指令的第二字节和第三字节分别装入PC的高位和地位字节中无条件地转向指定地址.转移目标地址可以在64K程序存储器地址空间的任何地方,不影响任何标志。
JMP @A+DRTR指令的功能是把累加器中8位无符号数与数据指针DRTR中的16位数相加,将结果作为下条指令地址送入PC,利用这条指令能实现程序的散转.10.试分析下列程序段,当程序执行后,位地址00H,01H中的内容将为何值?P1口的8条I/O线为何状态?CLR CMOV A,#66HJC LOOP1CPL CSETB 01HLOOP: ORL C,ACC.0JB ACC。
2,LOOP2CLR 00HLOOP2: MOV P1,A解: CLR C ;CY=0MOV A,#66H ;A=66HJC LOOP1CPL C ;CY=1SETB 01H ;20H。
1=1LOOP: ORL C,ACC.0 ;CY=1JB ACC。
2,LOOP2 ;CLR 00HLOOP2: MOV P1,A ;P1=01100110BSJMP $20H.0=0 20H。
1=1 P1=66H11。
的特查指令表,写出下列两条指令的机器码,并比较一下机器码中操作数排列次序点。
MOV 78H,80HMOV 78H,#80H解:直接寻址单元传送到直接寻址单元的机器码是第二个操作数在前,而立即数传送到直接地址单元是第一个操作数在前,次序正好相反。
12。
手工汇编下列程序段ORG 873BHAAA EQU 851AHQQQ MOV A,35HCLR CSUBB A,#0AHJC QQ16MOV A,36HSUBB A,#0AHJC QQ15AJMP AAAQQ15: MOV 35H,#00HQQ16: JNB 02H,QQ17 MOV R6,39HDEC R6SJMP QQ18QQ17: MOV R6,39HINC 39HQQ18: CLR 05HLJMP 8500HEND13。
若有两个无符号数x,y分别存放于内部存储器50H,51H单元中,试编写一个程序实现x*10+y,结果存入52H,53H两个单元中。
解: ORG 0000HSJMP STARTORG 0030HSTART :MOV A,50HMOV B,#10MUL AB ;(50H)×10积的高、低字节分别在B、A中ADD A,51HMOV 53H,A ;积的低字节加(51H)其和存放在53H中MOV A,#00HADDC A,BMOV 52H,A ;积的高字节加进位位存放在52H中。
SJMP $END14从内部存储器20H单元开始,有30个数据。
试编一个程序,把其中的正数,负数分别送51H和71H开始的存储单元,并分别记下正数负数的个数送50H和70H单元。
解: ORG 0000HSJMP STARTORG 0030HSTART: MOV 1EH,#51H ;正数存放首地址51H存于1EH单元MOV 1FH,#71H ;负数存放首地址71H存于1EH单元MOV R0,#20H ;建立取数(源操作数)的地址指针MOV R2,#30 ;预置数据长度MOV 50H,#00H ;正数个数统计单元清零MOV 70H,#00H ;负数个数统计单元清零LOOP:MOV A,@R0 ;取数JB ACC.7,NEG ;是负数转NEG处理POST:MOV R1,1EH ;是正数,将暂存的地址送R1(间址寄存器)MOV @R1,A ;将正数入存INC 50H ;正数个数加1INC 1EH ;正数暂存地址加1修正LOOP1: INC R0 ;取数地址加1修正DJNZ R2,LOOP ;计数长度减1,不等于零,继续循环统计SJMP $;结束NEG: MOV R1,1FH ;是负数,将暂存的地址送R1(间址寄存器)MOV @R1,A ;将正数入存INC 70H ;负数个数加1INC 1FH ;负数暂存地址加1修正SJMP LOOP1 ;转取数地址修正15内部存储单元40H中有一个ASCII码字符,试编一程序,给该数的最高位加上奇检验.解: ORG 0000HSJMP STARTORG 0030HSTART: MOV A,40H ;取数给ACLR ACC。
7 ;A最高位(奇偶校验位)清零JB P, LOOP ;40H中的ASCII码原来就是奇数个1(最高位给零)SETB ACC.7 ;40H中的ACSII码原来是偶数个1,最高位置1LOOP:MOV 40H,A ;入存SJMP $ ;结束END16。
编写一段程序,将存放在自DATA单元开始的一个四字节数(高位在前)取补后送回原单元。
解:若DATA在内部数据存储器中(假如存放在30H起始的4个单元中);采用求反加1的算法;ORG 000HSJMP STARTORG 0030HSTART: SETB C ;置进位位为1MOV R2,#04H ;预置计数长度MOV R0,#DATA1+3 ;取数指针指向低字节的地址LOOP: MOV A,@R0 ;取数CPL A ;求反ADDC A,#00H ;加进位MOV @R0,A ;入存DEC R0 ;地址指针修正DJNZ R2,LOOP ;4字节未处理完,继续循环处理SJMP $ ;结束DATA1 EQU 30H;END17.以BUF1为起始地址的外存储区中,存放有16个单字节无符号二进制数,是编一程序,求其平均值并送BUF2单元.解:设R2、R3存放和,将其除以16(R2、R3联合左移4位)即为平均置值(单字节存放)ORG 0000HSJMP STARTORG 0030HSTART: MOV R2,#00H ;和高字节清零MOV R3,#00H ;和低字节清零MOV DPTR,#DATA1 ;建立外部数据存储器的地址指针MOV R4,#10H ;预置计数长度LOOP: MOVX A,@DPTR ;从外部数据存储器取数ADD A ,R3MOV R3,AMOV A,R2;ADDC A,#00H;MOV R2,A ;累加INC DPTR ;地址指针修正DJNZ R4,LOOP ;16字节未累加完,继续循环累加MOV R4,#04H ;R2、R3联合移位4次(除以16)LOOP1: CLR CMOV A,R2RRC AMOV R3,ADJNZ R4,LOOP1 ;平均值存放于R3中SJMP $ ;结束DATA1 EQU 1000H;END18。