指令系统及程序设计

更新时间:2023-09-17 19:27:01 阅读量: 幼儿教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1、用数据传送指令完成如下功能: (1)工作寄存器R2的内容送给R3; MOV A,R2 MOV R3,A;

两个工作寄存器之间不能直接进行数据传送

(2)内部RAM20H单元的内容送给内部RAM30H单元; MOV 30H,20H;

两个直接地址之间可以直接进行数据传送

(3)内部RAM20H单元的内容送给外部RAM20H单元; MOV R1,#20H MOV A,@R1 MOVX @R1,A;

内部RAM中的数据必须要先送到累加器A再由A送出到外部RAM去 (4)外部RAM20H单元的内容送给外部RAM2000H单元; MOV RI,#20H MOV DPTR,#2000H MOVX A,@R1 MOVX @DPTR,A;

两个外部RAM单元也不能直接进行数据传递,必须要先将外部RAM一个单元数据送给A再由A到另一个外部RAM单元中去 (5)ROM30H单元的内容送给内部RAM30H单元; MOV DPTR,#0030H MOV A,#00H MOVC A,@A+DPTR MOV 30H,A

要先将ROM指定单元数据送给A再由A到内部RAM指定单元中

(6)ROM3000H单元的内容送给外部RAM2000H单元;

MOV DPTR,#3000H MOV A,#00H MOVC A,@A+DPTR MOV DPTR,#2000H MOVX @DPTR,A

要先将ROM指定单元数据送给A再由A到外部RAM指定单元中去 小结: 1、

注意数据传送类指令有三种:MOV(内部数据传送)、MOVC(从程序存储器中取数)、MOVX(累加器A与外部数据存储器间进行数据传递),要注意区分三种指令,不要混淆; 2、

外部数据存储器(外部RAM)只能用寄存器间接寻址方式访问,且只能与累加器A进行数据传送; 3、

外部数据存储器(外部RAM)使用寄存器间接寻址的地址指针选取原则:地址在8位以内(00H-FFH)可以使用R0、R1,也可以使用DPTR;地址超过8位,只能使用DPTR; 4、

内部数据存储器(内部RAM)低128B可以用直接寻址方式也可以寄存器间接寻址方式访问;内部数据存储器高128B(仅52子系列有)只能用寄存器间接寻址方式访问,地址指针选取R0或R1; 5、

程序存储器(ROM)是只读的,从ROM中读取数据用MOVC指令,对应变址寻址方式,要预先在A和DPTR(MOVC A,@A+DPTR)或A(MOVC A,@A+PC)中设好相应的值;

2、外部RAM20H单元的内容和外部RAM21H单元的内容相乘,结果低八位送外部RAM22H单元,高八位送外部RAM23H单元 MOV R1,#20H MOVX A,@R1 MOV B,A INC R1 MOVX A,@R1 MUL AB INC R1

MOVX @R1,A INC R1 MOV A,B MOVX @R1,A

外部数据存储器(外部RAM)只能用寄存器间接寻址方式访问,且只能与累加器A进行数据传送;如MOVX B,@DPTR是非法指令。

3、完成两个三字节二进制数的加法:第一个数存在内部RAM的30H、31H、32H(32H为最低字节)单元,第二个数存在内部RAM的40H、41H、42H(42H为最低字节)单元,结果存入内部RAM的 30H、31H、32H(32H为最低字节)单元。 ORG 0000H SJMP MAIN ORG 0030H MAIN: CLR C MOV R2,#3 LOOP: MOV R0,#32H MOV R1,#42H MOV A,R0 ADDC A,R1 MOV R0,A DEC R0 DEC R1 DJNZ R2,LOOP SJMP $

注意三字节数加法,高字节做加法时要考虑到低字节所产生的进位,所以用ADDC指令。

4、用逻辑运算指令完成如下功能:

(1)内部RAM20H单元数的低三位清零,其余位保持不变;

ANL 20H,#0F8H;

(2)内部RAM20H单元数的高两位置1 ,其余位保持不变;

ORL 20H,#0C0H

(3)内部RAM20H单元数的高两位取反,其余位保持不变; XRL 20H,#0C0H

(4)内部RAM20H单元数的所有位取反;

XRL 20H,#0FFH 说明:

1、逻辑与通常用来将累加器A或内部RAM某单元的某几位清0; 2、逻辑或通常用来将累加器A或内部RAM某单元的某几位置1; 3、逻辑异或通常用来将累加器A或内部RAM某单元的某几位取反; 4、注意根据要求选取的立即数

5. MOV R0,#30H ; (R0)=30H MOV A,@R0 ; (A)=(30H)=64H MOV DPTR,#1000H ; (DPTR)=1000H MOVX @DPTR,A ; (1000H)=(A)=64H MOV A,50H ; (A)=(50H)=04H

MOV DPTR,#TAB ; (DPTR)=(TAB)=2000H

MOVC A,@A+DPTR ; (A)=((A)+(DPTR))=(2004H)=00H MOV P1,A ; (P1)=(A)=00H

6.(SP)=6AH (R0)=35H, (R1)=45H,(6AH)=(34H),(69H)=(33H),(68H)=(32H),(67H)=(31H),(66H)=(30H) (40H)=(30H),(41H)=(31H),(42H)=(32H),(43H)=(33H),(44H)=(34H) 本程序段的功能为:把40H之后5个字节单元的内容存入堆栈,而把30H之后的5个字节单元的内容送到40H之后的5个字节单元里

7、试编写一个程序,其功能为将内部RAM中30H~32H的内容左移一位

7. ORG 0000H SJMP MAIN

ORG 1000H MAIN: MOV R7,#3 MOV R0,#30H MOV A,32H MOV C,ACC.7 LOOP: MOV A,@R0 RLC A MOV @R0,A INC R0 DJNZ R7,LOOP SJMP $

8、试编程将连续存放在外部RAM中1000H开始的100个单元的内容送到2000H开始的地址单元中?

ORG 0000H

LJMP MAIN ORG 0030H MAIN: MOV SP,#6FH MOV R7,#100 MOV DPL,#00H LOOP: MOV DPH,#10H MOVX A,@DPTR MOV DPH,#20H MOVX @DPTR,A INC DPL DJNZ R7,LOOP SJMP $ 说明:

1、此题目的外部RAM两个区域地址都超过了8位,所以不能使用R0或R1作为地址指针,只能使用DPTR

本文来源:https://www.bwwdw.com/article/juwh.html

Top