收藏 分销(赏)

第3章指令系统与汇编语言程序设计.ppt

上传人:s4****5z 文档编号:12536825 上传时间:2025-10-27 格式:PPT 页数:52 大小:3.39MB 下载积分:10 金币
下载 相关 举报
第3章指令系统与汇编语言程序设计.ppt_第1页
第1页 / 共52页
第3章指令系统与汇编语言程序设计.ppt_第2页
第2页 / 共52页


点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,3.1,寻址方式,3.2,指令系统,3.3,汇编语言程序的汇编与调试,3.4,汇编语言程序设计举例,3.5,计算机中的数据编码,第,3,章 指令系统与汇编语言程序设计,3.1,寻址方式,寻址方式是指在指令执行过程中,如何找到操作数有效地,址的方法。绝大多数指令执行时都需要使用操作数,而操作数,可以指一个直接参与指令运行的数据,也可以指一个寄存器,,还可以指一个存储器单元。,MCS-51,单片机指令系统提供了,7,种,不同的寻址方式。,一、寻址方式,见动画五,寻址方式。,立即寻址方式,直接寻址方式,寄存器寻址方式,寄存器间接寻址方式,相对寻址方式,变址寻址方式,位寻址方式,3.1,寻址方式,寻址方式,3.2,指令系统,数据传送指令,(,29,),算术运算指令,(,24,),指令系统,逻辑运算指令,(,24,),程序控制指令,(,22,),位操作指令,(,12,),描述指令的一些符号的意义:,符 号,意 义,R,n,(,n,=,0,7,),当前工作寄存器组,R0,R7,中的某一个寄存器,R,i,(,i,=,0,7,),作间接寻址的寄存器,“,”,是间接寻址标识符,direct,内部,RAM,的,8,位地址,可以是单元地址,(00H,7FH),或特殊功能寄存器地址,#,data,8,位立即数,其中,“,#,”,是立即数标识符,#,data16,16,位立即数,addr11,11,位目的地址,。,用于,ACALL,和,AJMP,指令中,转移范围为,2KB,addr16,16,位目的地址,。,用于,LCALL,和,LJMP,指令中,转移范围为,64KB,re,l,相对转移指令中的,8,位偏移地址,范围是,-128,+127,DPTR,数据指针,用作,16,位的地址寄存器,bit,内部,RAM,或特殊功能寄存器中的直接寻址位,rrr,在操作码中,表示,R0,R7,寄存器的编码,A,累加器,写作,“,A,”,时,是寄存器寻址,;,写作,“,ACC,”,时,是直接寻址,B,特殊功能寄存器,用于,MUL,和,DIV,指令中,/,位操作数的前缀,表示对该位操作数取反,(,存储单元地址,),表示某存储单元的内容,(,间址寄存器,),由寄存器间接寻址的单元中的内容,数据传送指令,实现计算机内不同存储区域之间的信息传,递。,MCS-51,指令系统中共有,29,条数据传送指令,不同存储单元之,间的数据传递如图所示。,3.2,指令系统,1.,内部,RAM,、特殊功能寄存器之间的数据传送,(,使用,“,MOV”,作为操作码助记符,共有,16,条,),2,累加器与外部,RAM,之间的数据传送,(,这类指令的操作码助记符为,“,MOVX”,对外部,RAM,单元只能使用间接寻址方式,即可以使用,DPTR,和,Ri,作间址寄存器。,),3,程序存储器中的数据传送到累加器,A,的指令,(,这类指令的数据传送是单向的,只能从程序存储器向累加器传送数据。指令助记符为,“,MOVC”,共两条指令。,),4,内部,RAM,单元与累加器,A,之间数据交换指令,(包括三种指令:,字节交换指令、半字节交换指令、累加器,A,的高,4,位与低,4,位交换指令。,),5,堆栈操作指令,(包括进栈、出栈指令),3.2,指令系统,例,1,分析下列指令的寻址方式以及指令执行后存储单元和寄存,器的内容。,MOV A,#20H,;,目的操作数采用寄存器寻址,,A=20H,MOV 32H,#23H,;,目的操作数采用直接寻址,,(32H)=23H,MOV R4,#2FH,;,目的操作数采用寄存器寻址,,R4=2FH,MOV R0,#5AH,;,目的操作数采用寄存器间接寻址,,(R0)=5AH,MOV DPTR,#203FH,;,目的操作数采用寄存器寻址,,DPTR=203FH,(1),立即数传送指令。,MOV A,#data ;Adata,MOV direct,#data ;(direct)data,MOV Rn,#data ;Rn data,MOV Ri,#data ;(Ri)data,MOV DPTR,#data16;DPH data,高,8,位,DPLdata,低,8,位,3.2,指令系统,例,2,分析指令的寻址方式和执行结果,MOV P2,,,R2,;,目的操作数采用直接寻址,源操作数为寄存器寻址;,P2=R2,,,该指令等价于,MOV 0A0H,,,R2,MOV 2FH,,,30H,;,两个操作数均采用直接寻址,,(2FH)=(30H),MOV 20H,,,R1,;,目的操作数为直接寻址,源操作数为寄存器间接寻址,执行,结果:,(20H)=(R1),(2),内部,RAM,单元之间的数据传送指令。,MOV direct1,,,direct2,;,(direct1)(direct2),MOV direct,,,Rn,;,(direct)Rn,MOV Rn,,,direct,;,Rn(direct),MOV direct,,,Ri,;,(direct)(Ri),MOV Ri,,,direct,;,(Ri)(direct),3.2,指令系统,例,3,分析下列指令的寻址方式和执行结果,MOV A,,,R5,;,两操作数均采用寄存器寻址,,A=R5,MOV A,,,0F0H,;,原操作数为直接寻址,,A=,(,0F0H,),MOV A,,,R1,;,源操作数为寄存器间接寻址,,A=,(,R1,),(3),与累加器有关的数据传送指令,MOV A,,,Rn,;,ARn,MOV Rn,,,A,;,RnA,MOV A,,,direct,;,A(direct),MOV direct,,,A,;,(direct)A,MOV A,,,Ri,;,A(Ri),MOV Ri,,,A,;,(Ri)A,3.2,指令系统,这类指令的操作码助记符为“,MOVX,”,对外部,RAM,单元只,能使用间接寻址方式,即可以使用,DPTR,和,Ri,作间址寄存器。,MOVX A,,,DPTR,;,A(DPTR),MOVX DPTR,,,A,;,(DPTR)A,MOVX A,,,Ri,;,A(Ri),MOVX Ri,,,A,;,(Ri)A,例,3.4,已知,DPTR=2000H,,片外,RAM(2000H)=05H,,,R1=0F0H,,片外,RAM(0F0H)=0A0H,。,MOVX A,,,DPTR,;指令执行后,,A=05H,MOVX R1,,,A,;指令执行后,片外,RAM(0F0H)=05H,3.2,指令系统,这类指令助记符为“,MOVC,”,共两条指令。,MOVC A,,,A+DPTR,;,A(A,DPTR),MOVC A,,,A+PC,;,A(A,PC),例,3.5,把累加器,A,中的十六进制数字,00H,0FH,转换成,ASCII,码。,INC A;,调整偏移量,(,数据表的首地址与,MOVC,指令间隔,1,个单元,),MOVC A,,,A+PC;,查表取数,RET;,子程序返回,DB 30H,31H,32H,33H,34H;,在程序存储器中顺序存放,DB 35H,36H,37H,38H,39H;0,F,的,ASCII,码,DB 41H,42H,43H,44H,45H,46H,如果累加器,A=0FH,,则执行,INC A,后,,A=10H,,程序存储器取出,MOVC,指令后,,PC=2001H,,则,A+PC=2011H,,于是执行,MOVC,指令后,A=(2011H)=46H,,即将累加器,A,中十六进制数字,F,转换成相应的,ASCII,码,46H,。,3.2,指令系统,(1),字节交换指令,XCH A,,,Rn ;A Rn,XCH A,,,direct ;A(direct),XCH A,,,Ri ;A(Ri),(2),半,字节交换指令,XCHD A,,,Ri,;,A(D3,D0)(Ri)(D3,D0),,,即累加器,A,的低,4,位与,Ri,间址的内部,RAM,单元的低,4,位交换。,(3),累加器,A,的高,4,位与低,4,位交换指令,SWAP A ;A(D3,D0)A(D7,D4),3.2,指令系统,(1),进栈指令,PUSH direct ;SPSP+1,,,(SP)(direct),(2),出栈指令,POP direct ;(direct)(SP),,,SPSP 1,例,3.8,已知,SP=3AH,,,DPTR=1234H,,则,PUSH DPL,;,SPSP+1=3BH,,,(3BH)=34H,POP DPH,;,SPSP+1=3CH,,,(3CH)=12H,执行指令后,,SP=3CH,,,(3CH)=12H,,,(3BH)=34H,3.2,指令系统,加减运算指令,算术运算指令,乘除法指令,十进制调整指令,3.2,指令系统,(1),加法指令,ADD(Addition),指令格式:,ADD A,source,指令功能:将累加器和源操作数相加,结果送累加器,A,源操作数不变。,源操作数有,4,种寻址方式,所以,ADD,指令有,4,种形式,:,ADD A,,,Rn,;,A+RnA,ADD A,,,direct,;,A+(direct)A,ADD A,,,Ri,;,A+(Ri)A,ADD A,,,#data,;,A+dataA,例如,A=0C0H,,,R1=0AFH,执行,ADD A,,,R1,指令。,11000000,+10101111,01101111,ADD,指令影响程序状态字,PSW,的,CY,、,AC,、,OV,位。,3.2,指令系统,(2),带进位加法指令,ADDC(Addition with Carry),指令格式与加法指令相同,指令功能是将累加器,A,、不同寻址方式的源操作数以及进位标志,CY,相加,运算结果送累加器,A,。带进位加法指令共,4,条,:,ADDC,A,,,Rn,;,A+Rn+CYA,ADDC A,,,direct,;,A+(direct)+CYA,ADDC A,,,Ri,;,A+(Ri)+CYA,ADDC A,,,#data,;,A+data+CYA,ADDC,指令对状态标志位的影响同,ADD,指令。,3.2,指令系统,(3),带借位减法指令,SUBB(Subtraction with Borrow),与加法指令相似,目的操作数为累加器,A,源操作数有,4,种寻址方式。所以带借位减法指令有,4,种形式,:,SUBB A,,,Rn,;,A-Rn-CYA,SUBB A,,,direct,;,A-(direct)-CYA,SUBB A,,,Ri,;,A-(Ri)-CYA,SUBB A,,,#data,;,A-data-CYA,例如,若,A=0C0H,,,R0=7AH,,,CY=1,,,执行指令:,SUBB A,R0,执行结果为:,A=45H,,,CY=0,,,AC=1,,,OV=1,。,若进行不减借位的减法运算,只需将借,(,进,),位标志,CY,清零,例如,CLR C,。带借位减法指令对状态标志位的影响与加法指令相同。,3.2,指令系统,(4),加,1,指令,INC(INCrement destination by one),指令格式,:,INC dest,执行操作是把,dest,的内容加,1,结果送回原单元。,加,1,指令共有以下,5,种形式,:,INC A ;A+1A,INC Rn ;Rn+1Rn,INC direct ;(direct)+1(direct),INC Ri ;(Ri)+1(Ri),INC DPTR ;DPTR+1DPTR,加,1,指令主要用于修改地址指针和计数次数,它对,CY,、,AC,、,OV,没有影响。,3.2,指令系统,(5),减,1,指令,DEC(Decrement),减,1,指令与加,1,指令格式相似,只有一个操作数,该指令共有,4,种形式:,DEC A,;,A-1A,DEC Rn,;,Rn1Rn,DEC direct,;,(direct)-1(direct),DEC Ri,;,(Ri)-1(Ri),这类指令不影响,CY,、,AC,、,OV,。,3.2,指令系统,(6),乘法指令,MUL,(7),除法指令,DIV,指令格式,:,DIV AB,指令功能是用,A,中,8,位无符号数除以,B,中,8,位无符号数,所得商,存入,A,中,余数存入,B,中,并将,CY,和,OV,置,0,。只有当除数,B=0,时,OV,置,1,,表示除法的结果无意义。,例如,A=0F4H,B=0AH,执行指令,DIV AB,执行结果为,A=18H,B=04H,OV=0,CY=0,3.2,指令系统,指令格式,:,MUL AB,指令功能,:,把累加器,A,和寄存器,B,中的无符号数相乘,所得,16,位乘积的低位字节存入,A,中,高位字节存入,B,中。,例如,A=1AH,B=20H,执行指令,MUL AB,执行结果为,A=40H,B=03H,OV=1,CY=0,乘法运算影响,PSW,的状态,进位标志位,CY,总是清,0,。,(8).,十进制调整指令,功能:把,A,中的数作为两个,BCD,数相加之和进行调整,得到,两位正确的,BCD,数。,形式:,DA A,例如,:,73-54=19,先执行,9AH-54H,,得到补熟,46H,,再执行,73H+46H=0B9H,最,后执行调整指令将,0B9H,加上,60H,得到,19H,,即得到正确的,BCD,数。,3.2,指令系统,逻辑与运算指令(,6,条),逻辑或运算指令(,6,条),逻辑运算指令,逻辑异或运算指令(,6,条),累加器清,0,和取反指令(,2,条),循环移位指令(,4,条),3.2,指令系统,这类指令的助记符为,ANL,ANL A,,,Rn ;A,Rn,A,ANL A,direct ;A,(direct),A,ANL A,Ri ;A,(Ri),A,ANL A,#data ;A,data,A,ANL direct,A ;(direct)A(direct),ANL direct,#data ;(direct)data(direct),例如:若,A=0A6H,,,R1=0A4H,,执行,ANL A,R1,后,A=0A4H,逻辑与运算常用作字节清零或位清零。,3.2,指令系统,这类指令的助记符为,ORL,ORL A,Rn ;ARnA,ORL A,direct ;A(direct)A,ORL A,Ri ;A(Ri)A,ORL A,#data ;AdataA,ORL direct,A ;(direct)A(direct),ORL direct,#data ;(direct)data(direct),例如 把累加器,A,的低,4,位传送到,P0,口的低,4,位,但,P0,口的高,4,位保持不变。,PUSH ACC;,累加器内容,ANL A,#0FH;,屏蔽,A,的高,4,位,ANL P0,#0F0H;,屏蔽,P0,口的低,4,位,ORL P0,A;,传送,A,的低,4,位,POP ACC;,恢复累加器内容,逻辑或运算可以实现对某个单元的某些位置,1,其余位不变。,3.2,指令系统,XRL A,Rn ;ARnA,XRL A,direct ;A(direct)A,XRL A,Ri ;A(Ri)A,XRL A,#data ;AdataA,XRL direct,A ;(direct)A(direct),XRL direct,#data ;(direct)data(direct),例如:若,A=7FH,,,R1=0A5H,,则执行指令,XRL A,,,R1,后,,A=0DAH,。,逻辑异或运算可以用来比较两个数据是否相等。当两个数据异,或结果为,0,则表示相等,否则表示不相等。,3.2,指令系统,累加器清,0,指令:,CLR A,;,0A,累加器按位取反指令:,CPL A,;,A,例如:若,A=55H,,则执行指令:,CPL A,;执行结果,A=0AAH,CLR A,;执行结果,A=00H,3.2,指令系统,(,1),循环右移指令,:,RR A,功能:将累加器,A,的内容逐位循环右移一位。如图所示:,例如,若,A=6AH=01101010B,,执行,RR A,指令后,,A=35H,。,(2),循环左移指令,:,RL A,功能:将累加器,A,的内容逐位左移一位,如图所示:,例如,若,A=0A3H=10100011B,,执行,RL A,指令后,,A=47B,。,3.2,指令系统,(3),带进位循环右移指令,:,RRC A,功能:将累加器,A,的内容和进位位一起逐位循环右移一位,如图所示:,例如,若,A=4BH=01001011B,CY=1,执行,RRL A,指令后,,A=0A5H,CY=1,。,(4),带进位循环左移指令,:,RLC A,功能:将累加器,A,的内容和进位位一起逐位循环左移一位,如图所示:,此两操作影响,CY,位。,3.2,指令系统,无条件转移指令,条件转移指令,程序控制指令,调用和返回指令,空操作指令,NOP,;,PC+1PC,操作:该指令不执行任何操作,常用于程序的等待或时间的延迟。,3.2,指令系统,相对转移指令,:,SJMP rel,绝对转移指令,:,AJMP addr11,无条件转移指令,长转移指令,:,LJMP addr16;addr16PC,间接转移指令,:,JMP A+DPTR;,A+DPTRPC,操作:,PC+2PC,addr11PC(D10,D0),例如,若转移指令首地址,2456H,即,PC=2456H,执行指令,AJMP 26AH,后,PC=226AH,程序转向,226AH,单元执行。,该指令把,16,位地址,addr16,装入程序计数器,PC,,转移范围可达,64 KB,。,LJMP,与,AJMP,指令都是直接寻址方式。,该指令采用基址变址寻址方式,转移地址由数据指针,DPTR,和累加器,A,的内容相加形成。,例如,设,A=A0H,,,DPTR=45A0H,执行指令,JMP A+DPTR,后,,PC=4640H,。,该指令,采用相对寻址方式,目的地址,=PC+rel,。,相对转移指令的操作数有两种形式,:,偏移量和目标地址。如,果是目标地址,则在程序汇编时由汇编程序自动计算并填入偏移,量。,向高地址方向转移,:,rel=,目标地址,-(,首地址,+2,)=,地址差,-2,向低地址方向转移,:,rel=(,目标地址,-(,首地址,+2,),补,例如,若转移指令的首地址为,0100H,,,地址标号,LOOP,所指单,元为,0120H,,则执行指令,SJMP LOOP,,偏移量为,:,rel=0120H-(0100H+2)=1EH,指令机器码为,801E,。,3.2,指令系统,累加器判零转移指令,比较转移指令,条件转移指令,减,1,不为,0,转移指令,位控制转移指令,JZ rel,;若,A=0,则,PC+2+relPC,,否则,PC+2PC,JNZ rel,;若,A0,则,PC+2+relPC,,否则,PC+2PC,例如,设,A=01H,执行指令,:,JZ TABLE1;,A=0,转向,TABLE1,A0,执行下一条指令,DEC A ;A-1A,JZ TABLE2,;A=0,转向,TABLE2,执行,CJNE A,,,direct,,,rel ;,A(direct),,则转移,CJNE A,,,#data,,,rel ;,Adata,,则转移,CJNE Rn,,,#data,,,rel ;,Rndata,,则转移,CJNE Ri,,,#data,,,rel ;,(Ri)data,,则转移,DJNZ Rn,rel ;,Rn-1Rn,若,Rn0,则,PC+2+relPC,,否则,PC+2PC,DJNZ direct,rel ;,(direct)-1(direct),若,(direct)0,则,PC+3+relPC,,否,PC+3PC,JC rel ;,若,CY=1,则,PC+2+relPC,否则,PC+2PC,JNC rel ;,若,CY=0,则,PC+2+relPC,否则,PC+2PC,JB bit,rel ;,若,(bit)=1,则,PC+3+relPC,否则,PC+3PC,JNB bit,rel ;,若,(bit)=0,则,PC+3+relPC,否则,PC+3PC,JBC bit,rel ;,若,(bit)=1,则,PC+3+relPC,且,(bit)=0,否则,PC+3PC,绝对调用指令,:ACALL addr11,调用和返回指令,长调用指令,:LCALL addr16,返回指令,操作过程,:,PCPC+2;,取出指令,SPSP+1,(SP)PC(D7,D0),SPSP+1,(SP)PC(D15,D8);,断点地址入栈,PC(D10,D0)addr11,PC(D15,D11),不变,;,进入子程序,例如,若,SP=60H,PC=2100H,子程序,sub1,首地址为,23A0H,。执行下面指令,:,2100H:ACALL sub1;,指令代码是,71A0H,执行过程,:,PC=PC+2=2102H,将,PC,压栈,即,(61H)=02H,(62H)=21H,SP=62H;,用指令提供的,11,位地址,01110100000B(3A0H),替换,PC,的低,11,位,形成目的地址,0010001110100000B,,即进入,sub1,子程序。,操作过程:,PCPC+3 ;,取出指令,SPSP+1,(SP)PC(D7,D0),SPSP+1,(SP)PC(D15,D8);,断点地址入栈,PCaddr16 ;,进入子程序,RET,;子程序返回指令,RETI,;中断返回指令,操作过程:,(SP)PC(D15,D8),SP-1SP,(SP)PC(D7,D0),SP-1SP,位传送指令,位操作指令 置位,/,复位指令,位逻辑运算指令,MOV C,,,bit,;,(bit)CY,MOV bit,,,C,;,CY(bit),例如,把,20H,位传送到,30H,位。,MOV 10H,C ;,暂存,CY,内容,MOV C,20H ;20H,位送,CY,MOV 30H,C ;CY,送,30H,位,MOV C,10H ;,恢复,CY,内容,CLR C ;0CY,CLR bit ;0(bit),SETB C ;1CY,SETB bit ;1(bit),例如,P0=01011010B,CY=0,执行指令,:,SETB C,SETB P0.0,CLR P0.3,执行结果为,:CY=1,P0=01010011B,ANL C,bit ;CY(bit)CY,ANL C,/bit ;CY (/bit)CY,ORL C,bit ;CY(bit)CY,ORL C,/bit ;CY (/bit)CY,CPL C ;(/CY)CY,CPL bit ;(/bit)(bit),例:设,D,、,E,、,F,代表位地址,计算,F=D E=(/D)E+D(/E),。,MOV C,E,ANL C,/D ;(/D)E CY,MOV F,C,MOV C,D,ANL C,/E ;D(/E)CY,ORL C,F ;D(/E)+(/D)E CY,MOV F,C ;D EF,3.3,汇编语言程序的汇编与调试,一、汇编语言程序的一般组成与设计方法,源程序、汇编程序和目标程序之间的关系为:,汇编语言源程序,汇编程序,目标程序,1,汇编语言的语句种类和格式,基本类型,格式,可执行指令语句,标号,:,操作数表,;,注释,例如:,ADD A,,,R1,伪指令语句,标号,参数表,;,注释,例如:,ORG 1000H,宏指令语句,用来代替汇编语言源程序中重复使用的程序的一种语句,3.3,汇编语言程序的汇编与调试,2,汇编语言程序设计,所谓汇编语言程序设计,就是使用汇编语言指令来编写计算机程序。一个高质量的汇编语言源程序,应该具备以下几点:,结构简明、清晰,便于理解。,便于阅读、修改和调试,具有较好的维护性。,具有较高的可靠性。,程序应该是高效率的。,用汇编语言进行程序设计的步骤可以概括如下,:,分析问题,确定算法。,根据算法,画出程序流程图。,合理地分配存储空间和寄存器。,编写程序。,上机调试程序。,3.3,汇编语言程序的汇编与调试,3,流程图,在下一节中会着重介绍流程图画法及意义。,基本图形框,符号,意义,起止框,表示程序的开始或结束,矩形框,表示计算或处理等基本操作,判断框,用来判断给出的条件是否成立,根据判断的结果决定程序的流向,流线,表示程序的流向,连接点,表示相关两框的连接处,圆圈内数字相同表示连接在一起,3.3,汇编语言程序的汇编与调试,二、伪指令,伪指令又称伪操作,是源程序发送给汇编程序的指令。下面介绍,MCS-51,汇编,程序中常用的伪指令。,常用伪指令,指令格式,功能,赋值伪指令,EQU,EQU,赋值后的符号可以作地址使用,也可以作立即数使用,定义字节伪指令,DB,DB,把表达式表中的字节数据存入从标号开始的连续存储单元中,定义字伪指令,DW,DW,把表达式表中的,16,位数据存入由标号开始的连续存储单元,低地址单元存放高字节,高地址单元存放低字节,存储区定义伪指令,DS,DS,通知汇编程序,从指定的地址开始,保留指定数目的字节单元作为存储区,供程序运行使用,位定义伪指令,BIT,BIT,给符号名赋以位地址,设置起始地址伪指令,ORG,ORG,指定目标程序或数据块在存储器中的起始地址,汇编结束伪指令,END,END,用于终止源程序的汇编工作,三、汇编与调试,汇 编,机器汇编,指先将汇编语言源程序输入计算机,再利用汇编程序将其翻译成二进制代码的目标文件,(.,OBJ,),的过程,手工汇编,指通过人工查找指令表,将每一条指令的机器代码查出,并分配存储空间,计算地址偏移量,得到目标文件的过程,调 试,编成目标程序文件,.OBJ,传送到单片机,编写汇编语言程序,建立源程序文件,.ASM,3.3,汇编语言程序的汇编与调试,一,.,汇编语言程序结构,见动画六,3.4,汇编语言程序设计举例,二,.,汇编语言程序举例,例,1,编程实现如图所示的逻辑功能。其中,20H,、,2FH,、,2AH,是位,地址。,分析:逻辑电路的功能是,P1.0=,程序如下:,MOV C,20H ;20H,位送,CY,ANL C,2FH ;CY,逻辑与,2FH,位,CPL C ;CY,取反,ORL C,2AH ;CY,逻辑或,2AH,位,MOV P1.0,C ;,结果送,P1.0,3.4,汇编语言程序设计举例,例,2,比较内部,RAM 30H,和,31H,单元中无符号数的大小,使得,30H,单元存放大数,31H,单元存放小数。,分析,:,先清进位位,然后两数作带借位减法,根据借位标志判断两 数大小。程序流程图如右图所示。,程序:,START,:,CLR C,MOV A,30H,SUBB A,31H,JNC DONE,;,若无借位,即,(30H)(31H),时转,DONE,MOV A,30H,XCH A,31H,;,有借位,即,(30H)(31H),交换,(30H),与,(31H),MOV 30H,A,DONE:SJMP DONE,例,3,编程统计累加器,A,中“,1,”,的个数。,分析,:,首先判断累加器,A,是否为,0,若,A=0,则程序结束,;,否则,先清,CY,再将,A,带进位循环左移一位,判断进位位,CY,是否为,1,为,1,则计数,不为,1,则继续循环,判断,A,是否为,0,重复这一过程,直至,A=0,。程序流程图如图所示。,程序:,MOV R1,#0,;,计数器,R1,清,0,PUSH ACC,;,保护,ACC,LOOP1:JZ DONE,;,若,A=0,程序结束,CLR C,;,进位位清,0,RLC A,;,累加器,A,带进位循环左移一位,JNC LOOP1 ;CY=0,则继续循环,INC R1 ;CY=1,则计数器,R1,加,1,SJMP LOOP1,DONE:POP ACC,;,恢复,ACC,SJMP,END,任务演示,任务,T3,:算术、逻辑运算模拟系统软件设计。,见动画十一,3.5,计算机中的数据编码,一、带符号数的编码表示,在计算机中,常常需要表示正数和负数,如何表,示数据的符号位?如何表示带符号数?,1,.,机器数的概念,为了表示带符号的数,可以把数的最高位作为符号位处,理,其余各位表示数值本身。一般,“1”,表示负号,“,0”,表示正号。,这种把符号数码化了的数称为机器数,而把原来符号未进,行数码化的数称为机器数的真值。,如:,+1001110,和,-1001110,是真值,,01001110,和,11001110,是机器数。,2.,补码,补码表示带符号数的规则如下:,(1),最高位表示符号,“,0”,表示正号,“,1”,表示负号;其余位,表示数值位。,(2),正数补码的数值位与二进制真值相同。,(3),负数补码的数值位是其二进制真值取反后加,1,。,例,1,用补码表示八位带符号数。,X=+1010,(,X,)补,=00001010,X=-1010,(,X,)补,=11110110,X=+0001100,(,X,)补,=00001100,X=-0001100,(,X,)补,=11110100,X=+1111111,(,X,)补,=01111111,X=-1111111,(,X,)补,=10000001,3.5,计算机中的数据编码,X=+1,(,X,)补,=00000001,X=-1,(,X,)补,=11111111,X=+0,(,X,)补,=00000000,X=-0,(,X,)补,=00000000,X=-10000000,(,X,)补,=28+,(,-10000000,),=10000000,3.5,计算机中的数据编码,补码可以直接参加运算,符号位与数值位一起参加运算。例,如:补码加法的公式是(,X,),补,+,(,Y,),补,=,(,X+Y,),补,。,例,2,已知(,X,),补,=00111010,,(,Y,),补,=10011101,,求,(,X+Y,),补,。,解:(,X,),补,:,0 0 1 1 1 0 1 0,(,Y,),补,:,1 0 0 1 1 1 0 1,(,X,),补,+,(,Y,),补,:,1 1 0 1 0 1 1 1,即(,X+Y,),补,=11010111,。,该例表示,58,与,99,两个十进制真值相加,等于,41,,它的,补码正好是,11010111,。,3.5,计算机中的数据编码,计算机中,由于机器码的位数是固定的,所以计算机中数的,表示范围有限。若两数运算的结果超出了给定的取值范围,则,发生运算溢出。,例,3,(,X,),补,=11000100,,(,Y,),补,10001000,,求,(,X+Y,),补,。,解:(,X,),补,:,1 1 0 0 0 1 0 0,(,Y,),补,:,1 0 0 0 1 0 0 0,(,X,),补,+,(,Y,),补,:,10 1 0 0 1 1 0 0,进位自动丢失,即(,X+Y,),补,=01001100,。,两个负数相加,结果为正数,这显然是错误的,出错的原,因是运算发生了溢出。,3.5,计算机中的数据编码,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服