CPUMOV AL [BX] MOV AX [SI] 操作数在 片内RAM中 操作数在 片外RAM中 操作数在 片外RAM中2009 2009--99--33 10 10 3.2.5Base-Register-plus-Index-Register-Indirect Addressing 8086/8088CPUMOV AL [BX+SI] MOV AX [BP+DI] 操作数在程 序存储器中 2009 2009--99--33 11 11 E0 程序存储区2040H 93 20E0H 47 2041H DPH20 DPL 00 ALU 如:MOVC A,@A+DPTR 设DPTR=2000H,A=E0H 20E0H 47 指令代码 2009 2009--99--33 12 12 E0 程序存储区ALU 如:MOVC A,@A+PC 设A=E0H 2121H 45 2040H 83 2121H 45 2041H 2120H47 当前PC 指令代码 2009 2009--99--33 13 13 3.2.6 Relative Addressing 改变PC 2009 2009--99--33 14 14 程序存储区 ALU 如:JC 23 1025H 1000H 40 1025H 45 1001H 23 1024H47 1002H 30 23H 1002H 指令代码 当前PC 2009 2009--99--33 15 15 Bit Addressing 操作数在片内 RAM位地址区或 SFR某些位中 2009 2009--99--33 16 16 2009 2009--99--33 17 17 20092009--99--33 18 18 2009 2009--99--33 19 19 MOV 20H,A MOV 20H,R1 MOV 20H,30H MOV 20H,@R1 MOV 0A0H,#34H MOV P2,#34H 2009 2009--99--33 20 20 3.3.4 以间接地址为目的操作数的指令(3条) 20092009--99--33 21 21 20092009--99--33 22 22 MOVX A,@Ri MOVX @Ri,A MOVX A,@DPTR MOVX @DPTR,A 说明: 1.在51中,与外部存储器RAM打交道的只可以是A累加器。所有 需要送入外部RAM的数据必需要通过A送去,而所有要读入的外部 RAM中的数据也必需通过A读入。 在此我们可以看出内外部RAM的区别了,内部RAM间可以直接进 行数据的传递,而外部则不行。 比如,要将外部RAM中某一单元(设为0100H单元的数据)送入 另一个单元(设为0200H单元),也必须先将0100H单元中的内容读 入A,然后再送到0200H单元中去。 2009 2009--99--33 23 23 演示举例 2009 2009--99--33 24 24 3.3.7 MOVCA,@A+DPTR MOVC A,@A+PC 本组指令是将ROM中的数送入A中。本组指令也被称为查表指令, 常用此指令来查一个已做好在ROM中的表格 说明:查找到的结果被放在A中,因此,本条指令执行前后,A 中的值不一定相同。 例:有一个数在R0中,要求用查表的方法确定它的平方值(此 数的取值范围是0-5) MOV DPTR,#100H MOV A,R0 MOVC A,@A+DPTR ORG0100H DB 0,1,4,9,16,25 R0 100H+2102H 102H 20092009--99--33 25 25 3.3.8 SPSP+1,(SP)(direct) (direct) (SP),SPSP-1 第一条为压入指令,就是将direct中的内容送入堆栈中, 第二条为弹出指令,就是将堆栈中的内容送回到direct中。 则执行第一条PUSH ACC指令是这样的:将SP中的值加1,即变 为60H,然后将A中的值送到60H单元中,因此执行完本条指令后, 内存60H单元的值就是100,同样,执行PUSH B时,是将SP+1,即变 为61H,然后将B中的值送入到61H单元中,即执行完本条指令后, 61H单元中的值变为20。 2009 2009--99--33 26 26 ARn A(direct) A(Ri) A.3~A.0(Ri).3~(Ri).0 A.3~A.0A.7~A.4 R6=29H ;A=29H,R6=34H ;A=92H ;A=34H,R6=92H ;A=36H,(R0)=54H (设原来R0 ;指向的单元的内容为56H) 2009 2009--99--33 27 27 (40H)= 课堂练习1.设:内部RAM中,(40H)=50H,(41H)=60H, (50H)=30H, (51H)=70H,执行下列片段后: MOVR0,40H MOV A,@R0 INC R0 MOV @R0,A MOVR0,#40H MOV A,@R0 INC @R0 MOV A,@R0 2009 2009--99--33 28 28 MOV 23H,#30H MOV 12H,#34H MOV R0,#23H MOV R7,12H MOV R1,#12H MOV A,@R0 MOV 34H,@R1 MOV 45H,34H MOV DPTR,#6712H MOV 12H,DPH MOV R0,DPL MOV A,@R0 ;(23H)=30H ;(12H)=34H ;R0=23H ;R7=34H ;R1=12H ;A=30H ;(34H)=34H ;(45H)=34H ;DPTR=6712H ;(12H)= 内部RAM2009 2009--99--33 29 29 3.利用传送类指令并用多种方法将内部RAM中50H单元的内容与40H单元的内容互换。 2009 2009--99--33 30 30 2009 2009--99--33 31 31 3.4.1 加法指令 A+dataA A+(direct A+RnAA+(Ri)A 1.不带进位位的加法指令 2009 2009--99--33 32 32 实验 验证 一下 本例 2009 2009--99--33 33 33 2.带进位位的加法指令 20092009--99--33 34 34 00010000 0110 0111 0011 0000 1010 0000 0100 0001 0000 0111 2009 2009--99--33 35 35 设:1067H存在R1R0中, 30A0H存在R3R2中,计算 R1R0+R3R2,结果存在R5R4中。 MOV A,R0 ADD A,R2 ;R0+R2 A和CY MOV R4,A MOV A,R1 ADDC A,R3 ;R1+R3+CY A和CY MOV R5,A 2009 2009--99--33 36 36 00010000 0110 0111 0011 0000 0010 0000 0100 0000 1000 0111 实验 验证 一下 本例 设:1067H存在R1R0中, 3020H 存在R3R2中,计算R1R0+R3R2, 结果存在R5R4中。 2009 2009--99--33 37 37 R0=34H;(21H)=33H ;(34H)=23H DPTR=1235H2009 2009--99--33 38 38 十进制调整指令2009 2009--99--33 39 39 3.4. 减法指令 带借位的减法指令2009 2009--99--33 40 40 减1指令2009 2009--99--33 41 41 3.4.3 乘法指令 2009 2009--99--33 42 42 3.4.4 除法指令 CY= OV= 20092009--99--33 43 43 CLR 20092009--99--33 44 44 3.5 逻辑运算类指令( LogicOperations 2009 2009--99--33 45 45 ORL ORLdirect (direct)ORL direct #data (direct) data (direct) 71H 56H 01110001 71H 01010110 56H 01110111 77H LogicInstruction 2009 2009--99--33 46 46 实验验证一下本例2009 2009--99--33 47 47 3.5.2 逻辑与指令 ANL ANLdirect (direct)ANL direct #data (direct) data (direct) LogicInstruction 2009 2009--99--33 48 48 实验验证一下本例 2009 2009--99--33 49 49 3.5.3 逻辑异或指令 XRL XRLdirect (direct)XRL direct #data (direct) data (direct) eXclusive-oRLogic Instruction 2009 2009--99--33 50 50 实验验证一下本例2009 2009--99--33 51 51 3.5.4 取反指令 2009 2009--99--33 52 52 3.5.5 循环移位指令 RL A.7A.0 A.7 A.0 A.7 A.0 CY CY A.7 A.0 Rotate Logic instruction 2009 2009--99--33 53 53 20092009--99--33 54 54 2009 2009--99--33 55 55 3.6 控制转移类指令 控制转移类指令(( 20092009--99--33 56 56 ((44条) 20092009--99--33 57 57 20092009--99--33 58 58 20092009--99--33 59 59 TAB+2: TAB+4: TAB+6: 2009 2009--99--33 60 60 ((88条) 位移量的地址去2009 2009--99--33 61 61 20092009--99--33 62 62 ((44条) 20092009--99--33 63 63 2009 2009--99--33 64 64 举例: 举例: MOV A,R0 CJNE A,#10H,L1 MOV R1,#0 ;如R0=10H,则不转移R1=00H; AJMP L3 L1:JC L2 ;如CY=1即R010H,则转移 AJMP L3 L2:MOV R1,#0FFH L3:SJMP L3 因此最终结果是:本程序执行前, 如果R0=10H,则R1=00H; 如果R0>10H,则R1=0AAH; 如果R0