3-5 指出下列指令中45H代表什么。
MOV A,#45HMOV A,45HMOV 45H,46HMOV C,45HMOV A,#45H中的45H代表立即数45H,该立即数为16进制。
MOV A,45H 中的45H代表直接地址45H单元。
MOV 45H,46H中的45H代表目的操作数所指定的单元为45H。
MOV C,45H中的45H代表45H位。
3-6 分析下列程序执行的结果。
(1)MOV A,#60HMOV R0,#40HMOV @R0, AMOV 41H, R0XCH A, R0执行结果为:(A)=40H(R0)=60H(40H)=60H(41H)=40H (2)MOV DPTR,#2003HMOV A,#18HMOV 20H,#38HMOV R0,#20HXCH A,@R0执行结果为:(DPH)=20H(DPL)=03H(A)=38H(20H)=18H(R0)=20H(3)MOV 20H,#01HMOV A,20HINC ACPL AMOV DPTR,#2000HMOVX @DPTR, A执行结果为:(20H)=01H(A)=FDH(DPTR)=2000H(2000H)=FDH3-8 按要求写出相应的指令。
(1)把寄存器R6的内容送到累加器A中。
(2)把外部RAM 1000H单元的内容传送到内部RAM 30H单元中。
(3)清除内部RAM 3FH 单元的高4位。
(4)使累加器A的最低位置1。
(5)清除进位位。
(6)使ACC.4和ACC.5置1。
(7)把外部ROM 2000H单元中的内容送到内部RAM的20H单元中。
(8)把外部ROM 2000H单元中的内容送到外部RAM的3000H单元中。
(1)MOV A,R6(2)MOV DPTR,#1000HMOVX A,@DPTRMOV R0,#30HMOV @R0,A(3)ANL 3FH,#0FH(4)ORL A,#01H(5)CLR C(6)ORL A,#30H(7)CLR AMOV DPTR,#2000HMOVC A,@A+DPTRMOV 20H,A(8)CLR AMOV DPTR,#2000HMOVC A,@A+DPTRMOV DPTR,#3000HMOVX @DPTR,A3-10 编写程序段完成如下要求。
(1)将寄存器R0中的内容乘以10(积小于256)。
(2)将片内RAM 30H单元开始的15个字节的数据传送到片外RAM 3000H开始的单元中。
(3)将片外RAM 2000H开始的5个字节的数据传送到片内RAM 20H开始的单元中。
(4)有10个字节的二进制数存放在片内RAM以40H开始的单元内,编程找出其中的最大值并存于内部50H单元中。
(5)将片外RAM空间2000H~200AH中的数据的高4位变零,低4位不变,原址存放。
(6)将外部RAM 2040H单元的内容与3040H单元的内容互换。
(1)MOV B,#0AHMOV A,R0MUL ABMOV R0,A(2) ORG 0000HMOV R0,#30HMOV DPTR,#3000HMOV R7,#0FHLOOP: MOV A,@R0MOVX @DPRT,AINC R0INC DPTRDJNZ R7,LOOPSJMP $END(3) MOV DPTR,#2000HMOV R0,#20HMOV R7,#05HLOOP: MOVX A,@DPTRMOV @R0,AINC R0INC DPTRDJNZ R7,LOOPSJMP $END(4) ORG 0000HMOV 50H,40H ; 50H放最大值,且初始化最大值(默认第一个数)MOV R3,#09H;比较次数MOV R0,#41HSTART: MOV A,@R0CJNE A,50H,LOOPLOOP: JC LOOP1;如果A比50H的值小,则跳转到LOOP1MOV 50H,@R0;如果比50H的值大,则更新50H(最大值)的值LOOP1: INC R0DJNZ R3,STARTSJMP $END(5) MOV DPTR,#2000HMOV R1,#0BHLOOP: MOVX A,@DPTRANL A,#0FHMOVX @DPTR,AINC DPTRDJNZ R1,LOOPSJMP $(6) MOV DPTR,#2040HMOVX A,@DPTRMOV R0,#20HMOV @R0,AMOV DPTR,#3040HMOVX A,@DPTRXCH A ,@R0MOVX @DPTR AMOV A,@R0MOV DPTR,#2040HMOVX @DPTR,A3-15 设有一带符号的十六位数以补码形式存放在R2、R3寄存器中,试编制求其原码的程序。
ORG 0000HSTART: MOV A,R3JB ACC.7,NEXT;判读符号位,如果是正数则原码与补码一样,如果为负,求原码的方法是符号位不变,其余位取反加1MOV R3,AHERE: SJMP $NEXT: XRL A, #7FH;高八位,符号位不变,其余取反MOV R3, A;放回R3MOV A, R2;低八位XRL A, #0FFH;取反ADD A, #01H;加1MOV R2, A;放回R2MOV A,R3;看低八位是否有向高八位进位ADDC A,#00HMOV R3,ASJMP $END3-16 设有一不带符号的十六进制数组,存放在8031单片机片内RAM以BUFFER为首址的连续单元中,其长度为30个字节,要求统计小于10,等于10及大于10的数的个数,并把它们分别存放到片内RAM的LESS、EQUAL、BIG单元中,试编制实现上述要求的程序并画出相应的流程图。
ORG 0000HBUFFER DA TA 10HLESS DA TA 30HEQUAL DA TA 31HBIG DA TA 32HMOV R0,#BUFFERMOV R7,#1EHMOV LESS,#00HMOV EQUAL,#00HMOV BIG,#00HNEXT: CJNE @R0,#0AH, LOOP1;循环次数INC EQUALAJMP LOOP3LOOP1: JC LOOP2INC BIGAJMP LOOP3LOOP2: INC LESSLOOP3: INC R0DJNZ R7, NEXTSJMP $END3-17 在外部RAM 1000H单元开始的存储区域存放着10个用ASCII码表示的0~9之间的数字,请编程将它们转换成BCD码,然后存放在2000H~2004H单元(以压缩BCD码存放)。
方法一:ORG 0000HMOV R2,#05HMOV DPTR,#1000HMOV R0,#20HLOOP: MOVX A,@DPTRANL A,#0FHMOV R4,AINC DPTRMOVX A,@DPTRANL A,#0FHSWAP AADD A,R4MOV @R0,AINC R0INC DPTRDJNZ R2,LOOPMOV R5,#05HMOV R0,#20HMOV DPTR,#2000HLOOP1: MOV A,@R0MOVX @DPTR,AINC R0INC DPTRDJNZ R5,LOOP1SJMP $END方法二:ORG 0000HMOV R2, #05HMOV DPTR, #1000HMOV R1,#20HLOOP: MOVX A,@DPTRANL A, #0FHMOV R4, AINC DPTRMOVX A,@DPTRANL A, #0FHSWAP AADD A , R4MOV P2,#20HMOVX @R1,AINC DPTRINC R1DJNZ R2, LOOPSJMP $END3-18 设有50个无符号8位二进制数,存放在8031单片机内部RAM以BOFER为首址的连续单元中,试编制将其中最小数存放到内部RAM 的MIN单元的程序并画出相应的流程图。
BOFER DA TA 20HMIN DA TA 60HORG 0000HMOV R2,#31H;循环49次MOV R1,# BOFER+1MOV MIN,BOFER;把最小值放MIN,且初始化时把第一个数放入MINLOOP: MOV A, @R1CJNE A, MIN, LOOP1LOOP1: JNC LOOP2;@R1>MINMOV MIN,@R1 ;MIN >@R1,MIN要更新LOOP2: INC R1DJNZ R2, LOOPSJMP $END3-19 设有一字符串存放在8031单片机内部RAM以20H为首址的连续单元中,字符串以回车结束。
要求统计该字符串中字符B(‘B’=42H)的个数,并将其存入外部RAM的40H单元中。
试编写实现上述要求的程序并画出相应的流程图。
ORG 0000HMOV R0,#20HMOV R1,#00H;‘B’的个数初始化LOOP: MOV A, @R0CJNE A, #0DH,LOOP1;判断是否结束(回车键)MOV DPTR,#0040H;把结果放外部RAM中MOV A,R1MOVX @DPTR,ASJMP $LOOP1: CJNE A,#42H,NEXT;不为B则跳转INC R1;为B则使计数器加1NEXT: INC R0AJMP LOOPEND3-23 已知MDA和MDB单元内分别存有两个小于10的整数a和b,试用查表子程序实现c=a2+2ab+b2,并把和存于MDC和MDC+1单元中(MDC单元中放低字节,MDC+1单元中放高字节)。
ORG 0000HMDA DA TA 20HMDB DA TA 21HMDC DA TA 22HMOV A,MDAACALL SQRMOV R2,AMOV A,MDBACALL SQRADD A,R2MOV R2,A;a2+b2结果暂时放入R2MOV B,MDA;下面算2*a*bMOV A,MDBMUL ABRL AADD A,R2MOV MDC,ACLR AADDC A,#00HMOV MDC+1,ASJMP $SQR: ADD A,#01HMOVC A,@A+PCRETSQRTAB:DB 0 1 4 9 16 25 36 49 64 81 100END3-25 设有一长度为20H的字符串,存放在8031单片机片内RAM以10H为首地址的连续单元中,试编制将其中数字与字母分开并将它们分别送到以30H和50H为首地址的连续单元中的程序。
gORG 0000HMOV R2,#20H ;循环次数MOV R1,#10HMOV 60H,#30H ;数字存储首地址MOV 61H,#50H ;字母存储首地址LOOP: MOV A,@R1CJNE A,#40H,NEXTNEXT: JNC NEXT1 ;如果是字母则跳转到NEXT1MOV R0,60H ;是数字,把数字的存储地址给R0MOV @R0,AINC 60HSJMP LOOP1NEXT1: MOV R0,61HMOV @R0,A ;是字母,把字母的存储地址给R0INC 61HLOOP1: INC R1DJNZ R2,LOOPSJMP $END4-3 外端口有哪两种编址方法?各有什么特点?答:微型计算机对I/O端口进行编址的方式有两种:单独编址和统一编址。