1 / 35

① MOV A,#data ; A ← data ② MOV A,direct ; A ←(direct)

一、 内 RAM 数据传送指令. ⑴ 以累加器 A 为目的字节的传送指令(4条). ① MOV A,#data ; A ← data ② MOV A,direct ; A ←(direct) ③ MOV A,Rn ; A ← (Rn) ,n=0~7 ④ MOV A,@Ri ; A ← ((Ri)),i=0、1. 功能:将源操作数所指定的内容送入累加器 A 中。. 源操作数:立即寻址 直接寻址      寄存器寻址 寄存器间接寻址. 【例3-1】若( R0)=40H,(30H)=60H,(40H)=50H.

yonah
Télécharger la présentation

① MOV A,#data ; A ← data ② MOV A,direct ; A ←(direct)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 一、 内RAM数据传送指令 ⑴ 以累加器A为目的字节的传送指令(4条) ① MOV A,#data ; A←data ②MOV A,direct ; A ←(direct) ③ MOV A,Rn ; A ← (Rn) ,n=0~7 ④MOV A,@Ri ; A ← ((Ri)),i=0、1

  2. 功能:将源操作数所指定的内容送入累加器A中。功能:将源操作数所指定的内容送入累加器A中。 源操作数:立即寻址 直接寻址      寄存器寻址 寄存器间接寻址

  3. 【例3-1】若(R0)=40H,(30H)=60H,(40H)=50H ①MOV A,R0 ;将工作寄存器R0中的数据传送至A中 结果:(A)=40H ②MOV A,@R0 ;将以R0中内容为地址的存储单元中的数据送至A中 结果:(A) =50H

  4. ③MOV A,30H ;将直接地址30H存储单元中           的数据传送至A中, (A) =60H 结果:(A) =60H ④ MOV A,#30H ;将立即数#30H送入A中 (A)=30H 结果:(A)=30H

  5. ① MOV Rn,A ; Rn ←(A),n=0~7 ② MOV Rn,#data ; Rn ← data ,n=0~7 ③ MOV Rn,direct;Rn ←(direct),n=0~7 ⑵ 以工作寄存器Rn为目的字节的传送指令(3条)

  6. 功能:将源操作数所指定的内容送入当前工作寄存器组中的 某一个寄存器中。 源操作数:累加器A 立即寻址         直接寻址

  7. 例3-2:已知(A)=50H, (R1)=10H ,(R2)=20H , (R3)=30H , (30H)=4FH执行指令:  MOV R1, A    MOV R2 ,30H    MOV R3,#85H 试求: (R1)=? (R2)= ?(R3)=? 执行指令后(R1)= 50H (R2)= 4FH (R3)=85H

  8. ⑶ 以直接地址为目的字节的传送指令(5条) ① MOV direct,A ; direct← (A) ② MOV direct,#data ; direct← data ③ MOV direct1,direct2; direct1 ←(direct2) ④ MOV direct,Rn ; direct← (Rn),n=0~7 ⑤MOV direct,@Ri ; direct← ((Ri)),i=0、1

  9. 例3-3:已知(R0)=60H , (R1)=72H ,执行指令: MOV 40H , @R0 试求指令执行结果。 执行指令后(40H)=72H

  10. ⑷ 以寄存器间址为目的字节的传送指令(3条) ① MOV @Ri,A ; (Ri)← (A),i=0、1 ② MOV @Ri,direct; (Ri)←(direct),i=0、1 ③ MOV @Ri,#data ; (Ri) ← data,i=0、1 功能:将源操作数所指定的内容送入以R0或R1为地址指针的片内RAM单元中。

  11. 例3-4:已知 (R1)=30H , (A)=20H , 执行指令: MOV @R1 , A 则  (R1)=? (30H)=? 执行指令后(30H)=20H

  12. (5)以DPTR为目的操作数的数据传送指令 MOV DPTR ,#data16 功能:将外部RAM或ROM某单元地址作为立即数送到DPTR中,立即数的高8位送DPH,低8位送DPL。   注意:51唯一的16位传送指令。

  13. 例3-5:MOV DPTR,#1234H ;DPTR=1234H 该指令也可以用两条8位数据传送指令实现: MOV DPH,#12H ;DPH=12H MOV DPL,#34H ;DPL=34H,DPTR=1234H

  14. 上述五类传送指令中,需要注意几点: 1.传送指令无: MOV Rn , Rn MOV Rn , @ Ri MOV @Ri , Rn MOV @Ri , @Ri

  15. 2. 传送指令的字节数:   凡是指令中即不包含直接地址又不包含8位立即数的指令均为一字节指令;  若指令中包含一个直接地址或8位立即数,指令字节数为2; 若包含两个这样的操作数,则指令字节数为3。

  16. MOV A , Ri ;1 个字节 MOV A ,direct ;2个字节 MOV direct , #data ;3个字节 MOV DPTR , #data16 ;3个字节

  17. 3.正确区分各种寻址方式的含义 若(R0)=60H ,(60H)=50H ,式探讨以下指令的执行结果: MOV A , R0 MOV A , @R0 MOV A , 60H MOV A , #60H (A)=60H (A)=50H (A)=50H (A)=60H

  18. 4.所有传送指令均不影响标志位:CY AC OV,但累加器A将影响标志位P

  19. 二、 访问外部RAM的数据传送指令 ① MOVX @DPTR ,A ; (DPTR) ←(A),i=0、1 • MOVX A,@DPTR ; A←((DPTR)) 功能:将DPTR的值作为外部RAM或I/0口的单元地址与累加器A之间传递数据。 范围:可寻址范围达外RAM64KB全部空间

  20. ③ MOVX @Ri,A ;(Ri)←(A),i=0、1 ④ MOVX A , @Ri ;A ←((Ri)) 功能:将R0或R1所指定的外部RAM单元与累加器A之间传递数据。 范围:因此这两条指令寻址范围仅限于外RAM 256个单元中。 

  21. 例3-6:试编写程序,将片外RAM的1000H单元的内容送入片内0100H单元中。例3-6:试编写程序,将片外RAM的1000H单元的内容送入片内0100H单元中。 MOV DPTR ,#1000H MOVX A, @DPTR MOV DPTR,#0100H MOV @DPTR, A 注意:外RAM 之间不可以直接传递数据

  22. 三、程序存储器向累加器A传送数据 读ROM指令(2条) ① MOVC A,@A+DPTR ; A←((A)+(DPTR)) ② MOVC A,@A+PC ; A←((A)+(PC)) 注意:三个不同的存储空间用三种不同的指令传送: 内RAM(包括特殊功能寄存器): 用MOV指令传送; 外RAM: 用MOVX指令传送; ROM: 用MOVC指令传送。

  23. 【例3-7】 已知ROM中存有0~9的平方表0,1,4,9,…,首地址为2000H,试根据累加器A中的数值(0~9)查找对应的平方值,存入内RAM 30H。(设A=3) 方法一:若用DPTR作为基址寄存器,可编程如下: 1000H:MOV DPTR,#2000H ;置ROM平方表首地址 MOVC A,@A+DPTR ;(A)+(DPTR)=2003H(设A=3), ;A=(2003H)=09H MOV 30H,A   ;平方值存入内RAM30H中 ………… 2000H: DB 0,1,4,9,16,25,36,…,81

  24. 即:2000H:00H ;平方表:02=0   2001H:01H ; 12=1   2002H:04H ; 22=4   2003H:09H ; 32=9   2004H:10H ; 42=16,16=10H …………   2009H:51H ; 92=81,81=51H

  25. 方法二:用PC作为基址寄存器,在MOVC指令之前应先用一条加法指令进行地址调整,编程如下:方法二:用PC作为基址寄存器,在MOVC指令之前应先用一条加法指令进行地址调整,编程如下: MOV A,#00H ;待求平方的 值为0 ADD A,#data ;地址位置调整值 MOVC A , @A+PC 1FFDH:MOV 30H, A 1FFFH:RET 2000H: DB 0,1,4,9,16,25,36,…,81 Data 等于MOVC 与表格首地址之间指令所占的字节数。

  26. 【例3-8】 按下列要求传送数据:设ROM(2000H)=0ABH (1)ROM 2000H单元数据送内RAM 10H单元; (2)R0M 2000H单元数据送外RAM 80H单元; (3)ROM 2000H单元数据送外RAM 1000H单元; 解(1): MOV DPTR,#2000H ;置基址2000H,(DPTR)=2000H MOV A,#00H ;置变址0,(A)=00H MOVC A,@A+DPTR ;读ROM 2000H,(A)=ABH MOV 10H,A ;存内RAM 10H单元, (10H)=ABH

  27. 解(2): MOV DPTR,#1FFFH ;置基址1FFFH,(DPTR)=1FFFH MOV A,#01H ;置变址01H,(A)=01H MOVC A,@A+DPTR ;读ROM 2000H,(A)=ABH MOV R0,#80H ;置外RAN间址,(R0)=80H MOVX @R0,A ;写外RAM 80H,外RAM(80H)=ABH

  28. 解(3): MOV DPTR,#2000H ;置基址2000H, (DPTR)=2000H    MOV A,#00H ;置变址0,(A)=00H MOVC A,@A+DPTR ;读ROM 2000H, (A)=ABH             MOV DPTR,1O00H ;修改外RAN地址, (DPTR)=1000H MOVX @DPTR,A ;写外RAM 1000H,外RAM(1000H)=ABH

  29. 四、 堆栈操作指令(2条) 1.PUSH direct ; SP←(SP)+1,(SP)←(direct) 首先让sp的内容加1,使他指向栈顶空单元,然后将直接地址direct单元的内容送入栈顶空单元。 2. POP direct ; direct←((SP)),SP←(SP)-1 首先让sp所指的单元的内容送入直接地址direct单元,然后让sp的内容减1,成为新的栈顶单元。 注意:POP ACC 正确   POP A 错误

  30. 例PUSH 30H;(30H)=2BH,具体操作是: • 先将堆栈指针SP的内容(0FH)加1,指向堆栈顶的一个空单元,此时SP=10H; • ② 然后将指令指定的直接寻址单元30H中的数据(2BH)送到该空单元中。

  31. 例 POP 40H ;(40H)=4CH,具体操作是: ①先将SP所指单元0FH(栈顶地址)中的数据(4CH)弹出,送到指定的内RAM单元40H,(40H)=4CH② 然后(SP)-1→SP,SP=0EH,SP仍指向栈顶地址。

  32. 五、 交换指令(5条) 1. 字节交换指令 (1) XCH A,Rn ; (A)←→(Rn),n=0~7 (2) XCH A,@Ri ; (A)←→((Ri)),i=0、1 (3)XCH A,direct ; (A) ←→(direct) 功能:完成累加器A 与内部RAM 的整字节交换

  33. 例:(A)=16H (R1)=20H (20H) =10H XCH A , R1 ; (A)=20H ,(R1)=16H XCH A , @R1 ; (A)=10H , (RI)=20H ,(20H)=16H XCH A, 20H; (A)=10H, (20H)=16H

  34. 2. 半字节交换指令 XCHD A,@Ri ; (A)3~0←→((Ri))3~0 高4位不变。i=0、1 功能:将累加器A的低四位和Ri间址寻址单元的低四位进行交换,高四位保持不变。 例:(A)=16H (R1)=20H (20H) =30H XCHD A,@Ri (A)=10H ; (R1)=20H ; (20H) =36H

  35. 3.累加器高低四位互换 SWAP A ; (A)7~4←→(A)3~0 例:(A)=16H SWAP A; (A)=61H

More Related