END
(18) 将Acc.3位送Acc.0位。 答: MOV C, ACC.3 MOV ACC.0, C END
(19) 用MCS-51位指令,实现P1.3?P1.2?P1.1?P1.0的逻辑运算。
答: MOV C, P1.3 ANL C, /P1.2 MOV 20H.0, C ;暂存 MOV C, P1.1 ORL C, P1.0 CPL C ORL C, 20H.0 END
3-6 假设4位BCD码压缩存放在R3、R2中,试编写BCD减1的程序段,并在仿真机上验证。 答: ;相当于WXYZ+10000-1=WXYZ+9999 CLR C; MOV A, R2 ADD A, #99 DA A MOV R2, A MOV A, R3 ADDC A, #99 DA A MOV R3, A END
3-7 利用双DPTR功能,将存放在程序存储区内的数表(共计16字节,首地址为DATATAB)传送到以4000H为首地址的外部RAM中。 答: AUXR1 EQU 0A2H MOV DPTR, #DATATAB INC AUXR1 MOV DPTR, #4000H MOV R7, #16 ;16 个字节 MOV A, #0 ;最开始的位置
LOOP: MOV R6, A ;暂存A的值
MOVC A, @A+DPTR ;注意用MOVC,同时职能用A做变址寄存器 INC DPTR MOVX @DPTR, A ;注意使用MOVX指令 MOV A, R6
INC DPTR
I INC A ;A的值增1,指向下一个字节 DJNZ R7, LOOP DATATAB: DB 01H,02H, 03H,04H, 01H,02H,03H,04H
END
3-8 将存放在R3、R2中的三位压缩BCD码转换为二进制形式。 答: 三位BCD码<999 MAIN:
MOV A, R2 ANL A, #0F0H SWAP A MOV B, #10 MUL AB
MOV B, A //存放十位 MOV A, R2 ANL A, #0FH
ADD A, B //加个位 MOV R2, A //暂存 //
MOV A, R3 ANL A, #0FH MOV B, #100 MUL AB // ADD A, R2 // MOV R2, A //
MOV A, B // ADDC A, #0 MOV R3, A
3-9 将存放在R2中不超过十进制99的二进制数转换为压缩BCD码,结果存放在R2中。
答: MOV A, R2
MOV B, #10 DIV AB SWAP A ORL A,B MOV R2,A
3-10 在32位除16位的多位除法运算中,如果已知除数在8000H~FFFFH之间,为缩短运算时间,是否需要扩展被除数?请写出相应的程序段。
答:不需要,因为32位二进制(FFFFFFFFH)表示的最大十进制数为4294967295,除以80000H~FFFFH之间的数,其结果<=1FFFFH(注:“1”存放在进位位),所以用32位已经
足够存放商和余数。
程序如下: ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV 42H, #0FFH MOV 43H, #0FFH MOV 44H, #0FFH MOV 45H, #0FFH ; MOV 46H, #80H MOV 47H, #00H // //MOV 40H, #0 //MOV 41H, #0 MOV R7, #16 LOOP1: ;整体左移1位 CLR C MOV R1, #4 ;移动4个字节 MOV R0, #45H ;从最低位开始移 LOOP2: MOV A, @R0 RLC A MOV @R0, A DEC R0 DJNZ R1, LOOP2 MOV F0, C ;暂存移出的最高位 // CLR C MOV A, 43H SUBB A, 47H MOV R3, A // MOV A, 42H SUBB A, 46H MOV R2, A // ANL C, /F0 ;进位标志cy为0及F0为1均属于没有借位的情况 ;没有借位,商置1,用差替换 JC NEXT MOV 43H, R3
MOV 42H, R2 ORL 45H, #01H NEXT: ;有借位,在保留被减数,商的最后一位清零(移位时已将0移入商的最后一位) DJNZ R7, LOOP1 NOP
////////////////////////////////////////////////////////// END
3-11 假设程序头中含有如下变量定义伪指令
TXDBUF DATA #40H (注意:原题错误,应该去掉“#”号,下同) BDATA DATA #28H
(1) 请指出“MOV R0,#TXDBUF”指令和“MOV R0,TXDBUF”指令源操作数的寻址方式。
答:“MOV R0,#TXDBUF”指令(立即寻址);“MOV R0,TXDBUF”指令(直接寻址) (2) 执行如下程序段后,内部RAM 40H~4FH单元的内容是什么?28H单元的内容又是什么?
MOV BDATA,#10H MOV R0,#TXDBUF CLR A LOOP: MOV @R0,A INC A INC R0 DJNZ BDATA,LOOP END
答:内部RAM 40H~4FH单元的内容是:0~F,28H单元的内容是0 3-12 指出复位后工作寄存器组R7~R0的物理地址。如果希望快速保护工作寄存器组,请写出将2区作为当前工作寄存器区的程序段。
答:(1) 07H~00H. (2) SETB RS1 CLR RS0
3-13 简述顺序程序结构与分时操作程序结构的异同,以及这两种程序设计的注意事项。 答:略
习题四参考答案
4-1 增强型MCS-51有几个中断优先级?试通过修改IP、IPH寄存器内容,使串行口的中断优先级最高,定时器T1的中断优先级最低。
答:(1)4 ;
(2)MOV IPH ,#00010000B, MOV IP ,#00010000B
4-2 MCS-51外中断有几种触发方式?一般情况下,采用哪种触发方式较好? 答:两种,边沿触发
4-3 CPU响应中断请求后,不能自动清除哪些中断请求标志?
相关推荐: