MCS-51汇编指令与编程技术

上传人:sx****84 文档编号:243039353 上传时间:2024-09-14 格式:PPT 页数:75 大小:193.50KB
返回 下载 相关 举报
MCS-51汇编指令与编程技术_第1页
第1页 / 共75页
MCS-51汇编指令与编程技术_第2页
第2页 / 共75页
MCS-51汇编指令与编程技术_第3页
第3页 / 共75页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,Page,*,点击此处结束放映,第3章 MCS-51汇编指令与编程技术,MCS-51指令系统格式,3.1,寻址方式,3.2,指令介绍,3.3,汇编语言程序设计,3.4,1,3.1 MCS-51指令系统格式及一般说明,3.1.1 指令分类,3.1.2 MCS-51系列指令格式,3.1.3 指令描述符号介绍,2,单片机应用程序实例,试编写程序,完成两个16位数的减法:7E56H2B4EH。其结果存入内部RAM的30H和31H单元,31H单元存差的高8位,30H单元存差的低8位。,CLR C,MOV A,#56H,SUBB A,#4EH,MOV 30H, A,MOV A, #7EH,SUBB A, #2BH,MOV 31H,A,3,51系列单片机指令集含有111条指令:,按指令的功能分类,可分为5大类:,数据传送类(29条);算术运算类(24条),逻辑运算及移位类(24);控制转移类(17条),位操作类(17条),按指令所占字节数分类:,单字节(49条);双字节(46条);3字节(16条),按指令执行时间分类:,单周期(64条);双周期(45条);4周期(2条),3.1.1 指令分类,4,标号:操作码 目的操作数,源操作数;注释,说明:,方括符 表示可选项;,标号代表指令所在地址,可用1-8个字母/数字,以字母开头,“:”表示标号的结尾;,操作码就是指令功能助记符,指令实体;,目的操作数,参与运算并存放运算结果;,源操作数,参与运算;,注释以“;”开头。,3.1.2 MCS-51系列指令格式,5,说明,指令应具有以下功能:,(1)操作码指明执行什么性质和类型的操作。例如,数的传送、加法、减法等。,(2)操作数指明操作的数本身或者是操作数所在的地址。,(3)指定操作结果存放的地址。,6,Rn 当前选中的寄存器区中的8个工作寄存器R0R7(n=07)。,Ri 当前选中的寄存器区中的2个工作寄存器R0、R1(i=0,1)。,direct 8位的内部数据存储器单元中的地址。,#data包含在指令中的8位常数。,#data16包含在指令中的16位常数。,addr1616位目的地址。,addr1111位目的地址。,3.1.3 指令描述符号介绍,7,rel,8位带符号的偏移字节,简称偏移量。,DPTR,数据指针,可用作16位地址寄存器。,bit,内部RAM或专用寄存器中的直接寻址位。,C,进位标志或进位位,或布尔处理机中的累加器。,间址寄存器或基址寄存器的前缀,如Ri。,/,位操作数的前缀,表示对该位操作数取反。,片内RAM的直接地址或寄存器。,(),由寻址的单元中的内容。,箭头左边的内容被箭头右边的内容所代替。,8,寻址方式:指令按地址获得操作数的方式,七种寻址方式,一条指令可能含多种寻址方式,寄存器寻址,立即寻址,寄存器间接寻址,直接寻址,变址寻址(基址寄存器+变址寄存器间接寻址),相对寻址,位寻址,3.2 寻 址 方 式,9,1立即寻址方式,操作数直接就出现在指令中,,立即操作数用前面加有#号的8位或16位数来表示。,例如:,MOVA,# 60H;A#60H,MOV DPTR,# 3400H ;DPTR#3400H,MOV30H,# 40H ;30H单元#40H,上述三条指令执行完后,累加器A中数据为立即数据60H,DPTR寄存器中数据为3400H,30H单元中数据为立即数40H。,注意:符号“#”表明其后跟的是立即数,立即数就是数字量本身。,10,指令中直接给出了操作数所在单元的地址或名称,例如:MOV R1,1FH ;(R1) (1FH),MOV 30H,4AH ;(30H)(4AH),在本单片机中规定:访问特殊功能寄存器SFR只能采用直接寻址方式。,例如:MOV A, SP ; (A) (SP),MOV A, 81H ; (A) (SP),MOV P1, #5AH ; (P1)(#5AH),MOV 90H,#5AH ; (P1)(#5AH),MOV B, 30H ; (B) (30H),2直接寻址方式,11,3寄存器寻址方式,以通用寄存器的内容为操作数的寻址方式。通用寄存器指A、B 、DPTR以及R0R7,。,例如:CLR A;A0,INC DPTR;DPTRDPTR+1,ADDR5,# 20H;R5#20H+R5,MOV A,B ; A (B),MOV 30H,R0 ;(30H)(R0),MOV A,R1 ; A (R1),12,4寄存器间接寻址方式,寄存器中的内容是一个地址,由该地址单元寻址到所需的操作数,例如: MOV R1,#30H ;R1 立即数30H,MOV R1,#0FH ;(R1)立即数0FH,MOV A,R1 ;A(30H)=#0FH,注意,:,“间接”表示某寄存器中的“内容”只是一个“单元地址”,这个地址单元中存放的数据才是要找的“操作数”。,13,也称为: 基址寄存器+变址寄存器,间接寻址,以16位的地址指针寄存器DPTR或 16位的PC寄存器为基址寄存器,以累加器 A 为变址寄存器,两者中的“内容”形成一个16位的“地址”,该“地址”所指的存储单元中的内容才是操作数。,设:A中已存有#A4H,DPTR中已存有#1234H,MOVC A,A+DPTR;(A)(A)+(DPTR),操作:将A4H+1234H=12D8H单元中的数放进累加器A,5变址寻址方式,14,6相对寻址方式,当前PC值加上指令中规定的偏移量 rel,构成实际的操作数地址,例如: SJMP rel,操作:跳转到的目的地址 = 当前16位PC值 + rel,15,注意,:,1)“当前PC值”指程序中下一条指令所在的首地址,是一个16位数;,2)符号“rel”表示“偏移量”,是一个带符号的单字节数,范围是:-128+127(80H7FH),在实际编程中,“rel” 通常用标号代替。,16,指令中直接给出了操作数所在的位地址。,位寻址其实是一种直接寻址方式,不过其地址是位地址。,例: CLR P1.0 ;(P1.0) 0,SETB ACC.7 ;(ACC.7) 1,CPL C ;( C ) NOT( C ),7位寻址方式,17,注意:,1)位地址里的数据只可能是一个 0 或 1,2)有的位地址十分明确,如 P1.0, ACC.7等,有的位地址则“不太明确”,如:,MOV A,17H ; (A)(17H),17H是字节地址,MOV ACC.0,17H ;(ACC.0)(17H),这里ACC.0是位地址,所以该指令中的17H,是22H单元的第7位,18,3.3 按功能分类指令介绍,3.3.1 数据传送类指令,3.3.2 算术运算指令,3.3.3 逻辑运算与循环类指令,3.3.4 程序转移类指令,3.3.5 调用子程序及返回指令,3.3.6 位操作指令,19,内部存储器间传送指令,MOV 类指令的操作方向总是后面的操作数指向前面的操作数!,例如:MOV A,30H ;(A),(30H),3.3.1 数据传送类指令,Acc 累加器,Direct,直接,寻址,Ri 间接寻址,Rn 寄存器,#data,立即数,20,访问外部数据RAM指令,MOVX类指令可在累加器与以DPTR或Ri所代表的外部 RAM 之间进行数据传送。,例如:,MOVX A, DPTR ;(A), (DPTR,),MOVX A, Ri ;(A),(Ri),MOVX DPTR, A ;,(DPTR,),(A),MOVX Ri, A ;(Ri),(A),21,读程序存储器指令,MOVC A,A+DPTR,MOVC A,A+PC,通常称为查表指令,寻址方式属:,“基址寄存器 + 变址寄存器间接寻址”,A+DPTR或A+PC指向程序存储器中的某单元。拟传送给累加器ACC 的数据就是程序中事先写进去的表格数据。这些表格数据往往用伪指令 DB,DW 等定义在程序中。,例如已知A=30H,DPTR=3000H,,程序存储器单元(3030H)=50H,执行MOVC A, A+DPTR后,A=50H。,22,数据交换指令,字节交换,XCH A,direct (字节互换),XCH A,Ri (字节互换) XCH A,Rn (字节互换),半字节交换,XCHD A,Ri,累加器 Acc的低4位与(Ri)的低4位互换,各自的高4位不变,SWAP A;累加器 Acc的低4位与自身的高4位互换,23,堆栈操作指令,PUSH压栈指令,POP 弹栈指令,堆栈区由特殊功能寄存器堆栈指针SP管理,堆栈区可以安排在 RAM区任意位置,一般不安排在工作寄存器区和可按位寻址的RAM区,而是放在RAM区的靠后的位置,堆栈总是指向栈顶,通常PUSH与POP两条指令成对使用,24,例如:设(A)=7BH; (35H)=11H;(SP)60H,PUSH ACC ;(61H), #7BH,PUSH 35H ;(62H), (35H),即:(62H) #11H,POP ACC ;(A), (62H),即:(A) #11H,POP 5AH ;(5AH), (61H),即:(5AH) #7BH,25,例如:将片内RAM 30H单元与40H单元中的内容互换。,方法1(直接地址传送法):,MOV 31H,30H,MOV30H,40H,MOV40H,31H,SJMP$,方法2(间接地址传送法):,MOVR0,#40H,MOVR1,#30H,MOVA,R0,MOVB,R1,MOVR1,A,MOVR0,B,SJMP$,26,方法4(堆栈传送法):,PUSH30H,PUSH40H,POP30H,POP40H,SJMP$,方法3(字节交换传送法):,MOVA,30H,XCHA,40H,MOV30H,A,SJMP$,27,加、减法指令,所有的加法(ADD)、带进位加法(ADDC)、带借位减法(SUBB)运算都是以 A为一个加数或被减数,最终结果也存进 A 。,加法(ADD)、带进位加法(ADDC) 以及带借位减法(SUBB)运算中,如果产生了进位或借位,将自动对PSW中的Cy标志位置“1” 。,带进位加法(ADDC):(A),(A)+(Cy)+(第二操作数),带借位减法(SUBB):(A),(A)-(Cy)-(第二操作数),3.3.2 算术运算指令,28,加1/减1、乘/除指令,加1/减1操作: (INC,DEC9条),INC, DEC与用加/减法指令做加1/减1 操作不同之处在于INC、DEC不影响标志位.,单字节乘/除运算: (MUL,DIV2条),两个单字节数的乘/除法运算只在A与B之间进行。,MUL AB: (A)与(B)相乘, 积为16位数, (A),积的,高8位; (B),积的,低8位,DIV AB: (A)除以(B),结果用2字节表示,(A),商的整数部分;(B),余数,29,十进制调整指令,十进制调整: DA A,用于两个BCD码之间的相加,这条指令只能跟在 ADD 或 ADDC 之后,若(A),30,9或(AC)=1则(A),30,(A),30,6; 若(A),74,9或(CY)=1则(A),74,(A),74,6;,例如:两个十进制数“65”,与“58”相加,根据常识,,显然其和应当为“123”。,MOV A,#65H,ADD A,#58H,DA A,结果,:(A)= 23H,(CY)= 1,30,试把存放在R1R2和R3R4中的两个16位数相加,结果存于R5R6中。,解:参考程序如下:,MOV A,R2 ;取第一个数的低8位,ADD A,R4;两数的低8位相加,MOV R6,A;保存和的低8位,MOV A,R1;取第一个数的高8位,ADDC A,R3;两数的高8位相加,并把低8位相加 时的进位位加进来,MOV R5,A ;把相加的高8位存入R5寄存器中,SJMP $,31,3.3.3 逻辑运算与循环类指令,逻辑与、或、异或指令,逻辑与(ANL),逻辑或(ORL),逻辑异或(XRL):,指 令 形 式,Byte,Tm,ANL(ORL,XRL) direct, A,2,1,ANL(ORL,XRL) direct,#data,3,2,ANL(ORL,XRL) A, #data,2,1,ANL(ORL,XRL) A, direct,2,1,ANL(ORL,XRL) A, Ri,1,1,ANL(ORL,XRL) A, Rn,1,1,32,已知累加器A中已存有数:9AH,逻辑与ANL用于,清0,或者,保留,某些位:,例如,: ANL A, #0FH; 则(A) = 0AH,逻辑或ORL用于,置1,或者,保留,某些位:,例如,: ORL A, #0FH; 则(A) = 9FH,逻辑异或XRL用于,取反,或者,保留,某些位:,例如,: XRL A, #0FH; 则(A) = 95H,(A),1001 1010,#0FH,0000 1111,A,1001 0101,33,清零、取反、循环指令,累加器清零/取反操作 (CLR,CPL2条),CLR A 对累加器清零,CPL A 对累加器按位取非,累加器移位操作:(RL,RLC,RR,RRC4条),RL A,左环移,RR A 右环移,累加器 A,累加器 A,累加器 A,Cy,RLC A 带进位位,左环移,累加器 A,Cy,RRC A 带进位位右,环移,34,3.3.4 程序转移类指令,无条件转移指令,LJMP addr16 长跳转指令,可在64K范围内跳转,AJMP addr11 绝对跳转指令,可在指令所在的2K范围内跳转,SJMP rel 相对跳转指令,可在当前PC-128与+127范围内跳转,JMP A+DPTR 间接长跳转指令,可在以DPTR为基址 + A为偏移量,之和所指向的64K程序范围内跳转,35,条件转移指令,JZ rel,JNZ rel ;根据Acc的内容是否为0决定是否跳转,DJNZ direct,rel,DJNZ Rn, rel ;将direct(或Rn)里的内容减 1,结果不等于0就跳转;等于0则不跳转继续往下走。,CJNE A, #data, rel,CJNE A, direct,rel,CJNE Ri,#data, rel,CJNE Rn, #data, rel,将A(或Ri,或Rn)与#data(或direct)相比较,其值不相等就跳转;相等则不跳转,继续往下走。,36,3.3.5 调用子程序及返回指令,LCALL addr16 子程序长调用指令,可在64K范围内调用子程序,ACALL addr11 子程序绝对调用指令,可在指令所在的2K范围内调用子程序,RET 子程序返回指令,子程序结束并返回调用的下一条指令,RETI 中断服务子程序返回指令,中断结束/返回被打断处的下一条指令,37,3.3.6 位操作指令,位传送、清零、置位、逻辑指令,位传送指令(2条):,MOV C, bit (C),(bit),MOV bit, C (bit),(C),注: bit表示位地址,位清零/置位指令(4条):,CLR bit(或C) (bit或 C),“0”,SETB bit(或C) (bit或 C),“1”,位逻辑与/或/非指令(6条):,ANL C,bit(或/bit),ORL C,bit(或/bit),CPL bit (或 C),注:“/bit”表示对bit位先取反然后再参加运算,38,位条件转移指令,JC rel ;(Cy)=“1”就跳转;否则不跳转,JNC rel ;(Cy),“1”就跳转;否则不跳转,JB bit,rel,(bit)=“1”就跳转;否则不跳转,JNB bit,rel,(bit),“1”就跳转;否则不跳转,JBC bit,rel,(bit)=“1”就先将其清零 再跳转;,否则,不动此位也不跳转。,39,3.4 汇编语言程序设计,3.4.1 汇编语言的构成,3.4.2 汇编语言编程举例,3.4.3 有关问题的讨论,40,3.4.1 汇编语言的构成,程序设计语言,按照语言的结构及其功能可以分为三种:,1机器语言:机器语言是用二进制代码0和1表示指令和数据的最原始的程序设计语言。,2汇编语言:在汇编语言中,指令用助记符表示,地址、操作数可用标号、符号地址及字符等形式来描述。,3高级语言:高级语言是接近于人的自然语言,面向过程而独立于机器的通用语言。,汇编语言:用助记符描述的指令的集合。,汇编程序:汇编语言编写的程序借助编译工具编译成为目标代码,计算机才能识别。这个编译工具称为汇编程序。,41,编制程序的步骤,(1)任务分析(硬件、软件系统分析)。,(2)确定算法和工作步骤。,(3)程序总体设计和流程图绘制。流程图符号的含义如下。,:开始、结束。,:工作任务。,:判断分支。,:程序流向。,:程序连接。,(4)分配内存,确定程序与数据区存放地址。,(5)编写源程序。,(6)调试、修改,最终确定程序。,42,汇编语言的规范,汇编语言的语句格式:,标号:操作码 目的操作数,源操作数;注释,汇编程序 ,软件,工具,工具软件:,将程序员用汇编语言编写的程序翻译成机器码,用汇编语言编写的程序在此被称为应用程序,(真)指令:告诉计算机如何操作以及做何种操作,伪指令:告诉汇编程序在翻译应用程序时有何具体约定。伪指令不进行具体的操作,那是真指令的事。 比如:从何处开始,何处结束,某些编程者自己规定的表述代表什么意思,指令中以 AF 开头的十六进制数前必须添一个 “0”。,43,伪指令,1、ORG addr16 ASM51程序中一定要写!,规定编译后的机器代码存放的起始位置。,2、END ASM51程序中一定要写!,表示翻译到此结束,其后的任何内容不予理睬。,3、$ “当前PC值”也叫位置计数器,代表正在执行的指令所在位置。,4、符号名称 EQU 表达式,将表达式的值赋予符号名称。程序中凡出现该符号名称就等同于该表达式。,44,5、符号名称 BIT 位地址,将位地址的值赋予符号名称。程序中凡出现该符号名称就代表该位地址。,6、DB 8位数据或8位数据组,将8位数据或8位数据组顺序存放在此后的存储单元中。占相应数量的存储空间。,7、DW 双字节数据或双字节数据组,将双字节数据或双字节数据组顺序存放在此后的存储单元中。占据相应存储空间。,45,3.4.2 汇编语言编程举例,顺序程序,顺序程序是一种最简单,最基本的程序。,特点:程序按编写的顺序依次往下执行每一条指令,直到最后一条。,【例4.1】 将30H单元内的两位BCD码拆开并转换成ASCII码,存入RAM两个单元中。程序流程如图4-1所示。参考程序如下:,ORG2000H,MOVA,30H;取值,ANLA,#0FH;取低4位,46,ADDA,#30H;转换成ASCII码,MOV32H,A;保存结果,MOVA,30H;取值,SWAPA ;高4位与低4位互换,ANLA,#0FH;取低4位(原来的高4位),ADDA,#30H;转换成ASCII码,MOV31H,A;保存结果,SJMP$,END,47,结束,取数据低4位,转换成ASCII码,存ASCII码,取数据高4位,转换成ASCII码,存ASCII码,开始,例3.4.1 拆字程序流程图,48,【例3.4.1】 设X、Y两个小于10的整数分别存于片内30H、31H单元,试求两数的平方和并将结果存于32H单元。,解:两数均小于10,故两数的平方和小于100,可利用乘法指令求平方。程序流程如图4-2所示。参考程序如下:,ORG2000H,MOVA,30H;取30H单元数据,MOVB,A;将X送入B寄存器,49,MULAB ;求X,2,,结果在累加器中,MOVR1,A ;将结果暂存于R1寄存器中,MOVA,31H ;取31H单元数据,MOVB,A ;将Y送入B寄存器,MULAB ;求Y,2,,结果在累加器中,ADDA,R1 ;求X,2,+ Y,2,MOV32H,A ;保存数据,SJMP$ ;暂停,END,50,结束,取数据X,求X,2,暂存X,2,取数据Y,求Y,2,求X,2,+Y,2,开始,保存平方和,例3.4.2程序流程图,51,分支程序,分支程序有三种基本形式,如图3.4.3所示。,分支程序的设计要点如下:,(1)先建立可供条件转移指令测试的条件。,(2)选用合适的条件转移指令。,(3)在转移的目的地址处设定标号。,52,条件满足?,A,Y,N,(a),条件满足?,A,B,N,Y,(b),(c),A0,A1,An,K=0 K=1 K=n,K=?,图3.4.3 分支程序结构流程图,53,【例3.4.3】 设X存在30H单元中,根据下式,X+2X0,Y =100X=0,求出Y值,将Y值存入31H单元。,XX0,解:根据数据的符号位判别该数的正负,若最高位为0,再判别该数是否为0。程序流程如图3.4.4所示。,参考程序如下:,54,MOVA,30H;取数,JBACC.7,NEG ;负数,转NEG,JZZER0 ;为零,转ZER0,ADDA,#02H;为正数,求X+2,AJMP SAVE ;转到SAVE,保存数据,ZER0:MOVA,# 64H;数据为零,Y=100,AJMP SAVE ;转到SAVE,保存数据,NEG: DEC A ;,CPLA ;求X,SAVE:MOV31H,A;保存数据,SJMP ;暂停,55,A为负数?,取数,A(30H),开始,结束,A=0?,Y,N,N,A,|X|,A64H,A,X+2,存数,(31H),A(3,0H),例3.4.3程序流程图,56,【例3.4.4】 根据R0的值转向7个分支程序。,R010,转向SUB0;,R020,转向SUB1;,R0=60,转向SUB6;,解:利用JMP A+DPTR 指令直接给PC赋值,使程序实现转移。程序流程如图4-5所示。,57,参考程序如下:,ORG 2000H,MOV DPTR,#TAB;转移指令表首地址,MOV A,R0;取数,MOV B,#10,DIVAB ;A10,商在A中,CLRC,RLC A ;A2A,JMP A+DPTR;PC A+DPTR,TAB: AJMPSUB0 ;转移指令表,AJMP SUB1,AJMPSUB2,AJMP SUB5,AJMPSUB6,58,K=?,转SUB0,转SUB1,转SUB6,K=0 K=1 K=6,开始,图3.4.5 多向分支程序流程图,59,循环程序,循环程序的结构(如图3.4.6所示),循环程序一般包括如下四个部分:,(1)初始化 (2)循环体,(3)循环控制 (4)结束,循环程序按结构形式,有单重循环与多重循环。,在多重循环中,只允许外重循环嵌套内重循环。,不允许循环相互交叉,也不允许从循环程序的外部跳入循环程序的内部(如图4-7所示),60,(a)当型循环结构,(b)直到型循环结构,循环结束?,循环体,Y,N,初始化,修改循环参数,结束部分,开始,结束,循环结束?,循环体,Y,初始化,修改循环参数,结束部分,开始,N,结束,图3.4.6 循环结构程序流程图,61,外循环,中循环,内循环,外循环,内循环,外循环,内循环,内循环,(a)嵌套正确,(b)嵌套正确,(c)交叉不正确,图4-7 多重循环示意图,62,【例3.4.5】有一数据块从片内RAM的30H单元开始存入,设数据块长度为10个单元。根据下式:,X+2X0,Y= 100 X=0 求出Y值,并将Y值放回原处。,X X0,解:设置一个计数器控制循环次数,每处理完一个数据,计数器减1。程序流程如例3.4.5图所示。,63,参考源程序如下:,ORG 2000H,MOVR0,#10,MOVR1,#30H,START:MOVA,R1;取数,JBACC.7,NEG;若为负数,转NEG,JZZER0 ;若为零,转ZER0,ADDA,#02H;若为正数,求X+2,AJMPSAVE;转到SAVE,保存数据,ZER0: MOVA,# 64H;数据为零,Y=100,64,AJMPSAVE ;转到SAVE,保存数据,NEG:DECA,CPLA ;求X,SAVE:MOVR1,A;保存数据,INCR1 ;地址指针指向下一个地址,DJNZR0,START ;数据未处理完,继续,SJMP;暂停,65,A=0?,Y,Y,N,N,Y,N,A为负数?,取数,A(R1),开始,结束,AX,A64H,AX+2,存数,(R1)A,(3,0H),设置地址指针R1、计数器R0初值,R1R1+1;R0R0-1,R0=0?,例3.4.5的程序流程图,66,子程序,所谓调用子程序,暂时中断主程序的执行,而转到子程序的入口地址去执行子程序。如图3.4.10所示。,调用子程序应注意:,(1)子程序占用的存储单元和寄存器。,(2)参数的传递。,(3)子程序经过调用后得到的数据来完成程序之间的参数传递。,(4)嵌套调用与递归调用。如图3.4.11所示。,67,RET,LCALL SUB,图3.4.10 子程序的调用与返回,68,LCALL A,RET,RET,LCALL B,图3.4.11 子程序的嵌套调用与返回,69,【例3.4.8】 将例3.4.5改为子程序结构。,解:数据块中的十个数都需要进行符号判断并作相应处理,可把一部分工作交给子程序完成,主程序只负责读取数据、调用判断处理子程序、保存数据、循环控制工作。源程序如下:,ORG0000H,MOVR0,#10,MOVR1,#30H,70,START:MOVA,R1;取数,ACALLDISPOSE;调用判断、处理子程序,SAVE: MOVR1,A;保存数据,INCR1;修改地址指针,指向下一地址,DJNZR0,START;数据未处理完,继续,SJMP ;暂停,ORG0200H,DISPOSE:JBACC.7,NEG;,若为负数,转,NEG,71,JZZER0 ;若为零,转ZER0,ADDA,#02H;若为正数,求X+2,AJMPBACK ;转到SAVE,保存数据,ZER0:MOVA,#64H;数据为零,Y=100,AJMP BACK;转到SAVE,保存数据,NEG: DEC A,CPLA ;求X,BACK:RET,72,查表程序,查表法是把事先计算出的结果或测得的数据按一定顺序组成表格,再利用查表程序查出所需结果。查表程序结构的特点是: 所需函数计算结果或测得数据按一定规律制成表格; 数据表一般放在程序区; 用查表指令实现查表。,数据表的格式大致分为两种:一种为有序表,即表中数据按一定顺序排列,例如按大小关系或按变量对应顺序等排列;另一种为无序表,即表中数据数任意的,无规则排列。,73,【例3.4.9】,已知09十个十六进制数,对应的ASCII为30H39H,编程实现09十个数转换成ASCII。设R0中存放十六进制数,查表结果存入R1中。,解: 将09的BCD码和ASCII相比较不难发现,09的BCD码与ASCII的差别在于ASCII比BCD码多30H。,ORG 2000H,MOV A, R0,MOV DPTR, #TAB,MOVC A, A+DPTR,MOV R1,A,TAB: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H ; 09的ASCII,74,3.4.3 有关问题的讨论,关于OV(PSW.2)的讨论,当执行有符号数的加法指令ADD或减法指令SUBB时,且D6位有向D7位的进位或借位,C6Y=1时,而D7位没有向CY位的进位或借位,C7Y=0时,则OV=1或C6Y=0,C7Y=1则OV=1,所以溢出的逻辑表达式为,OV=C6Y C7Y,75,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!