传送指令算术指令.ppt

上传人:牧羊曲112 文档编号:5921050 上传时间:2023-09-04 格式:PPT 页数:38 大小:929.50KB
返回 下载 相关 举报
传送指令算术指令.ppt_第1页
第1页 / 共38页
传送指令算术指令.ppt_第2页
第2页 / 共38页
传送指令算术指令.ppt_第3页
第3页 / 共38页
传送指令算术指令.ppt_第4页
第4页 / 共38页
传送指令算术指令.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《传送指令算术指令.ppt》由会员分享,可在线阅读,更多相关《传送指令算术指令.ppt(38页珍藏版)》请在三一办公上搜索。

1、指令格式如下:标号:操作码 目的操作数,源操作数;注释,标号加在指令之前,标号必须以字母开始,后跟18个字母或数字,并以“:”结尾。注意:不能用指令助记符、伪指令或寄存器名来作标号。标号代表指令第一个字节所存放的存储单元的地址。,是用英文缩写的指令功能助记符。,寻址方式,立即数寻址,直接寻址,寄存器寻址,寄存器间接寻址,变址寻址,相对寻址,(1)MOV指令实现数在片内RAM单元之间、寄存器之间、寄存器与RAM单元之间的传送。MOV,;目的操作数单元源操作数(或单元)访问片内RAM的一般传送指令表如表3-1所示:(课本51页),MOV A,R1;将工作寄存器R1中的值送入A,R1中的值保持不变。

2、MOV A,30H;将30H单元中的值送入A,30H单元中的值保持不变。MOV A,R1;如执行命令前R1中的值为30H,则是将30H单元中的值 送入A中。MOV A,#34H;将立即数34H送入A中,执行完本条指令后,A中的值是 34H。,以累加器为目的操作数指令为例:,例:分析程序的执行结果。设(30H)=50H,试分析执行下面程序后各有关单元的内容。,程序执行结果是(A)30H,(R0)60H,(R1)30H,(60H)50H,(40H)50H,(30H)50H内容未变。,MOV 60H,30H;立即数30H送60H单元,(60H)30H MOV R0,60H;立即数60H送入R0,(R

3、0)60H MOV A,R0;60H单元内容送入A,(A)=30H MOV R1,A;A中的内容送入R1,(R1)30H MOV 40H,R1;30H中的内容送40H单元,(40H)50H MOV 60H,30H;30H单元的内容送入60H,(60H)50H,例:设内部RAM(30H)=40H,(40H)=10H,(10H)=00H,(P1)=0CAH,分析以下程序执行后各单元及寄存器、P2口的内容。,执行上述指令后的结果为:(R0)=30H,(R1)=(A)=40H,(B)=10H,(40H)=(P1)=(P2)=0CAH,(10H)=20H。,MOV R0,#30H;(R0)30HMOV

4、A,R0;(A)40HMOV R1,A;(R1)=40HMOV B,R1;(B)=10HMOV R1,P1;(40H)0CAHMOV P2,P1;(P2)=(P1)0CAHMOV 10H,#20H;(10H)=20H,指令助记符 操作功能注释 MOVX A,DPTR;(A)(DPTR)MOVX A,Ri;(A)(Ri),i=0或1 MOVX DPTR,A;(DPTR)(A)MOVX Ri,A;(Ri)(A),i=0或1,(2)累加器与外部数据存储器数据传送指令,对片外扩展的数据存储器RAM或I/O口进行数据传送,必须采用寄存器间接寻址的方法,通过累加器A来完成。这类指令共有以下条单字节指令,指

5、令操作码助记符都为MOVX。,例:若外部数据空间存储单元地址是 2097H,访问该单元,将其内容读入 A。(P52页),方法 1:MOV DPTR,#2097H MOVX A,DPTR,方法 2:MOV P2,#20H;将高 8 位地址 P 2 MOV R0,#97H;低 8 位地址 R 0 MOVX A,R0;指定的外部 RAM 内容 A,例:设外部RAM(1203H)=1FH,分析以下指令执行后的结果。MOV DPTR,#1203H;(DPTR)1203HMOVX A,DPTR;(A)(DPTR)MOV 30H,A;(30H)(A)MOV A,#0FH;(A)0FHMOVX DPTR,A;

6、(DPTR)(A),执行结果为:(DPTR)=1203H,(30H)=1FH,(1203H)=(A)=0FH。,例:把片内6AH单元中的数取出,传送到外部数据存储单元3000H单元中去。,MOVX DPTR,A,MOV A,6AH,MOV DPTR,#3000H,(3)程序存储器内容送累加器,MOVC(Move Code):读取程序存储器数据表格的数据传送;,第一条指令的基址寄存器为DPTR,因此其寻址范围为整个程序存储器的64K空间,表格可以放在程序存储器的任何位置。,指令助记符 操作功能注释 机器码(H)MOVC A,A+DPTR;(A)(A)+(DPTR)93MOVC A,A+PC;(P

7、C)(PC)+1,(A)(A)+(PC)83,第二条指令的基址寄存器为PC,该指令中访问程序存储器的地址为(A)十(PC),其中(PC)为程序计数器的当前内容,即查表指令的地址加1。因此,当基址寄存器为PC时,查表范围实际为查表指令后256个字节的地址空间。,例:在程序存储器中,数据表格为:7010H:02H7011H:04H7012H:06H7013H:08H执行程序:1004H:MOV A,#10H;A 10H1006H:MOV DPTR,#7000H;DPTR(7000H)1009H:MOVC A,A+DPTR(10H+7000H),结果:A=02H,例:有一个数在A中,要求用查表的方法

8、确定它的平方值(此数的取值范围是06),ORG 0000HMOV A,#02HMOV DPTR,#TABLEMOVC A,A+DPTRSTOP:SJMP STOP ORG 0030HTABLE:DB 0,1,4,9,16,25,36 END,指令助记符 操作功能注释 MOVC A,A+DPTR;(A)(A)+(DPTR)MOVC A,A+PC;(PC)(PC)+1,(A)(A)+(PC),注意:第二条指令编程时还需要进行偏移量的计算,即MOVC A,A+PC指令所在地址与表格存放首地址间的距离量计算,并需要一条加法指令ADD进行地址调整。,偏移量表首地址(MOVC指令所在地址1),例:在外部R

9、OM中,从2000H单元开始依次存放09的平方值,要求根据累加器A中的值(09)编程来实现查找所对应的平方值。,方法1:,MOV DPTR,#2000H,MOV A,#09H,MOVC A,A+DPTR,方法2:,设MOVC指令所在地址(PC)1FF0H,则偏移量2000H(1FF0H+1)=0FH,MOV A,#09H,ADD A,#0FH,MOVC A,A+PC,P141页 动态显示程序设计,(4)堆栈操作指令,堆栈操作有进栈和出栈,即压入和弹出数据,常用于保存或恢复现场。,SP(SP)1,direct(SP),PUSH direct;,POP direct;,(SP)(direct),S

10、P(SP)+1,PUSH指令的功能是首先将堆栈指针SP加1,然后把直接地址指出的内容传送到堆栈指针SP寻址的内部RAM单元中。,POP指令的功能是把堆栈指针SP寻址的内部RAM单元内容送入直接地址指出的字节单元中,堆栈指针SP减1。,例:已知片内RAM 50H单元中存放数值为1AH,设堆栈指针为30H,把此数值压入堆栈,然后再弹出到40H单元。,由此可见40H单元内装入数值1AH,SP为30H。,例题:见课本54页(例34、例35、例36),例3-4 设(SP)=60H,(ACC)=30H,(B)=70H,执行下述指令:PUSH ACC PUSHB,例3-5设(SP)=62H,(62H)=70

11、H,(61H)=30H,执行下述指令:POP DPH POP DPL,结果:(61H)=30H,(62H)=70H,(SP)=62H,结果:(DPTR)=7030H,(SP)=60H,MOV R0,SPMOV A,R0ORL A,#38HMOV R0,APOP PSW,例36,(5)字节交换指令:将累加器A的内容和源操作数内容互换。(XCHExchange),例如:设(A)80H,(R7)08H,执行指令XCH A,R7,则结果为(A)08H,(R7)80H。,2、算术运算类指令,(1)加法指令(ADDAddition),加法的执行结果将影响程序状态标志寄存器PSW的进位位C、溢出位OV、辅助

12、进位位AC和奇偶校验位P。例:P57页例3-8,助记符,机器码,ADD A,Rn;00101rrrADD A,direct;00100101 直接地址ADD A,Ri;0010011i ADD A,#data;00100100 立即数,例3-8 设(A)=85H,(R0)=20H,(20H)=0AFH,执行指令:ADD A,R0 10000101+10101111(1)00110100结果:(A)=34H,CY=1,AC=1,OV=1,P=1,(2)带进位的加法指令(Add with Carry),例:P57页例3-9,注意:带进位加法指令主要用于多字节的加法运算。,例3-9 设(A)=85H

13、,(20H)=0FFH,CY=1,执行指令:ADDC A,20H 10000101 11111111+1(1)10000101 结果:和(A)=85H,CY=1,AC=1,OV=0,P=1,例:试编写1234H1FE7H的程序,将和的高8位,存入41H单元,低8位存入40H单元。,解:两个16位数相加可分两步进行,第一步先对低8位相加。第二步再对高8位相加。考虑到第一步相加时可能产生进位,因而第二步必须用带进位加法指令。,MOV A,#34HADD A,#0E7HMOV 40H,AMOV A,#12HADDC A,#1FHMOV 41H,A,(3)增量指令INC(Increment),INC

14、A;00000100INC Rn;00001rrr INC direct;00000101INC Ri;0000011iINC DPTR;10100011这组增量指令的功能是把所指出的变量加1,若原来为0FFH,将溢出为00H,不影响任何标志。例题:课本58页例3-10,直接地址,助记符,机器码,例3-10 设(A)=0FFH,(R3)=0FH,(30H)=0F0H,(R0)=40H,(40H)=00H,执行指令:INC A;(A)+1 A INC R3;(R3)+1 R3 INC 30H;(30H)+1 30H INC R0;(R0)+1(R0)结果:(A)=00H,(R3)=10H,(30

15、H)=0F1H,(40H)=01H,PSW状态不改变。,(4)十进制调整指令DA(Decimal Adjust),DA A,这条指令是在进行BCD码加法运算时,跟在ADD和ADDC指令之后,用于对BCD码的加法运算结果自动进行修正,使其仍为BCD码表达形式。,该指令的执行过程如图3-2所示。(P59页),例:累加器A中BCD数是5,立即数为8,执行加法指令“ADD A,#8”,在CPU中是按二进制加法进行的,其结果如下,0000100000001101,00000101,所得值为非法BCD码,但若将其结果加6调整后,就得到正确的结果,操作如下:,+,00001101,00010011,得BCD

16、码13,结果正确。,+,00000110,参考程序如下:MOV A,#65H ADD A,#58H DA A,例:编程实现BCD码6558相加,(5)带进位减法指令SUBB(Subtract with Borrow),思考题:怎样进行不带借位位的减法操作?,需先清借位位,即置CY=0 CLR C,注意:带进位减法指令主要用于多字节的减法运算。,例:试编写341FH-12E7H的程序,将结果的高8位,存入41H单元,低8位存入40H单元。,MOV A,#1FHCLR CSUBB A,#0E7HMOV 40H,AMOV A,#34HSUBB A,#12HMOV 41H,A,(6)减1指令(DECD

17、ecrement),例:课本59 例3-12,减1指令的功能是将指定单元的内容减1,结果再放回到该单元中去。这类指令不影响标志位。,例3-12 设(A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH,执行指令:DEC A;(A)-1 ADEC R7;(R7)-1 R7 DEC 30H;(30H)-1 30HDEC R1;(R1)-1(R1)结果:(A)=0EH,(R7)=18H,(30H)=0FFH,(40H)=0FEH,P=1 不影响其它标志。,(7)乘法指令(MULMultiplication),助记符 机器码 MUL AB 10100100;AB BA,该指令的功能是累加器A中8位无符号整数除以B寄存器中8位无符号整数,商存于A中,余数存于B中。标志位Cy和OV清0(当除数为0时OV置1),DIV AB;AB 的商A,余数B,如果积大于255(FFH),则溢出标志位OV置1,否则清0。进位标志位Cy总是清0。,(8)除法指令(DIVDivision),例:试编写计算17H68H的程序,将乘积的高8位存入31H单元,低8位存入30H单元,MOV A,#17HMOV B,#68HMUL AB;AB BAMOV 30H,AMOV 31H,B,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号