第4章指令系统及程序设计_第1页
第4章指令系统及程序设计_第2页
第4章指令系统及程序设计_第3页
第4章指令系统及程序设计_第4页
第4章指令系统及程序设计_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、4.1 指令的格式与寻址方式第第4章章 指令系统与程序设计指令系统与程序设计 1)指令格式汇编语言源程序的一般形式为: : ; 一般来讲,汇编语言源程序由四部分组成,即标号、操作码、操作数和注释。 其中方括号表示在实际程序中是任选项,若不需要时,在某一指令中可以不包括此项。3)在MCS-51指令系统中,一共有7种寻址方式: 寄存器寻址 直接寻址 立即寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址 注意区分:注意区分: 指令功能:指令功能: 30H68H68H累加器A(30H)A R0A A+R2A A*BB A(R0)A3AH65H65H A3AH R0ROMDPTR0302H1EH1EH1

2、1HA(执行前执行前)02F1HA(执行后执行后)指令执行前,指令执行前,A=11H, DPTR=02F1H, 操作数地址操作数地址 = 02F1H + 11H = 0302H;指令执行后,将程序存贮器内容传送到指令执行后,将程序存贮器内容传送到A, 故指令执行故指令执行完毕后,完毕后,A=1EH; 其余都不变。其余都不变。例如:两字节相对转移指令例如:两字节相对转移指令: SJMP relROM2001H54H 80H2000H2002H2056Hrel54HPC=2002H 指令所在的地址指令所在的地址 = 2000H (源地址)(源地址)地址的相对偏移量地址的相对偏移量 rel = 54

3、H;转移地址(目的地址)转移地址(目的地址) = 2000H + 02H + 54H = 2056H;指令执行后,指令执行后,PC的值变为的值变为2056H,程序的执行发生转移。,程序的执行发生转移。转移转移相对寻址示意图相对寻址示意图 这条指令的机器码为:这条指令的机器码为:80H rel 占两个字节占两个字节4.2 指令系统 表4-1指令中的常用符号及含义符号含义A累加器ACCB寄存器BC进(借)位标志位,在位操作指令中作为位累加器使用direct直接地址,内部RAM的地址bit位地址,内部RAM中可寻址位和SFR中的寻址位#data8位常数(8位立即数)#data1616位常数(16位立

4、即数)间接寻址rel8位带符号偏移量,其值为-128+127。实际编程时通常使用标号,偏移量的计算由汇编程序自动计算得出Rn当前工作区(03区)的工作寄存器(n=0、1、7)Ri可作地址寄存器的工作寄存器R0和R1(i=0、1)(X)X存储单元的内容(X)由X寄存器寻址的存储单元的内容表示数据的传送方向表示位操作数取反表示逻辑“与”操作表示逻辑“或”操作表示逻辑“异或”操作 8位立即数可直接传送到内部数据位立即数可直接传送到内部数据RAM的各个位置(包括的各个位置(包括52系列的内部系列的内部RAM 80HFFH) 4.2.1 数据传送类指令数据传送类指令 该指令的功能是将直接地址所规定的内部

5、该指令的功能是将直接地址所规定的内部RAM单元内容单元内容传送到累加器传送到累加器A、寄存器、寄存器 、内部、内部RAM单元。单元。 (1) MCS-51中没有16位数的运算指令,如需则做两次8位运算; (2)算术运算指令包括: 加法运算(操作码助记符ADD) 带进位加法运算(操作码助记符 ADDC) 字节内容加1(指令操作码助记符INC); 带借位减法运算(操作码助记符 SUBB) 字节内容减 1(指令操作码助记符DEC); 其他运算指令(乘法运算操作码助记符 MUL、 除法运算操作助记符 DIV、10进制调整操作码助记符 DA) ( 3)除最后一组外,各组中的源操作数分别采取寄存器寻址、直

6、接寻址、寄存器间接寻址、以及立即数寻址,而目的操作数都是累加器A。1、 不带进位的加法指令ADD A,Rn ;例:ADD A,R7ADD A,Ri ;例:ADD A,R1ADD A,direct;例:ADD A,30HADD A,#data ;例:ADD A,#30H指令后面的值与A中的值相加,结果送到A中去;参加运算的都为两个8位二进制数,计算机作加法时,按如下规定进行: a. 操作数直接相加: 例如:A11010011,R111101000 ADD A,R1 ;执行完后,A10111011 若认为是无符号数相加,则A(187)10; 若认为是带符号数相加,则A(69)10; b. 将两操作

7、数当作无符号数直接相加后,得出Cy值, 如上例中, Cy 1 若为带符号数相加,则相加后的进位应丢弃,不与考虑。但PSW中的Cy 仍保存为1。 c. 确定相加后的溢出标志OV值,则将两操作数当作带符号数看, 按以下方法确定: 若两正数相加(符号位都为0),若和为负数(符号位为1),则溢出; 若两负数相加(符号位都为1),若和为正数(符号位为0),则溢出; 溢出 OV1,否则OV0 例如:A01001001 ADD A,#6BH ;执行后,A(10110100)2 OV1,且Cy 0 d. 加法指令还影响辅助进位标志AC和奇偶标志P 如上例中,第3位对第4位有进位,故AC1; 又由于A中1的个数

8、为偶数,故P0。 指令的操作,除指令中所规定的两操作数相加外,还需加上进位标志指令的操作,除指令中所规定的两操作数相加外,还需加上进位标志Cy (注意:(注意: 为指令执行之前保存在为指令执行之前保存在PSW中的,而不是执行中产生的中的,而不是执行中产生的Cy;而当而当PSW中的中的Cy值为值为0时,与时,与ADD指令执行结果一样)指令执行结果一样);用于多字节的二进制加法中用于多字节的二进制加法中2 、 带进位位的加法指令 ADDC A,Rn ;例:ADDC A,R7ADDC A,Ri ;例:ADDC A,R1ADDC A,direct;例:ADDC A,30HADDC A,#data ;例

9、:ADDC A,#30H3 、 带借位的减法指令SUBB A,Rn ; 例:SUBB A,R7SUBB A,Rn ;例:SUBB A,R1SUBB A,direct;例:SUBB A,30HSUBB A,#data ;例:SUBB A,#30H指令说明:将A中的值减去源操作数所指内容以及进位位CY中的值,没有不带借位的减法指令,如果需要做不带借位的减法指令(例如做第一次相减时),只要将CY 清零即可。(1) 要进行不带借位的减法时,必须先用指令将要进行不带借位的减法时,必须先用指令将Cy清零:清零: 即:即: CLR C ; ; Cy =0;(2) 作减法时,按以下规则进行:作减法时,按以下规

10、则进行: a . 对两操作数直接求差,并取得借位对两操作数直接求差,并取得借位Cy的值;的值; b. 判断是否溢出时,按有符号数处理:判断是否溢出时,按有符号数处理: 正数减正数或负数减负数都不可能溢出;正数减正数或负数减负数都不可能溢出; 正数减负数,差为负数(符号位为正数减负数,差为负数(符号位为1),则一定溢出,使),则一定溢出,使OV1; 负数减正数,差为正数(符号位为负数减正数,差为正数(符号位为0),则一定溢出,使),则一定溢出,使OV1。 c. 减法还影减法还影AC和和P例如:A52H,R0B4H,Cy 0 SUB A, R0 ;01010010 10110100 = 10011

11、110执行结果:执行结果:A=9EH, Cy 1,AC=1,OV=1,P=14、 乘法指令MUL AB;ABB A 指令说明:此指令的功能是将A 和B 中的两个8 位无符号数相乘,两数相乘结果一般比较大,因此最终结果用1 个16 位数来表达,其中高8 位放在B 中,低8 位放在A 中。在乘积大于FFFFH(65535)时,PSW 的0V 位置“1”(溢出),否则OV 为“0”,而CY 位总是为“0”。例:(A)=4EH,(B)=5DH;MUL AB ;乘积是 1C56H,所以在B 中放的是1CH,而A 中放的则是56H。5、 除法指令 DIV AB;(A/B) AB指令说明:此指令的功能是将A

12、 中的8 位无符号数除以B 中的8 位无符号数。除法一般会出现小数,但计算机中可没法直接表达小数,它用的是我们小学生用的商和余数的概念,如13/5,其商是2,余数是3。除完以后,商放在A 中,余数放在B 中。CY 位和OV 位都是“0”,如果在做除法前B 中的值是00H,也就是除数为0,那么0V=1。6、 只能对累加器A、工作寄存器、直接寻址或Ri间接寻址的字节单元内容实现加 1操作。其中,加1按无符号二进制进行;除INC A指令影响P标志外,其余都不影响各标志位。INC A;例:(假设A=20H) INC A(则A=21H)INC Rn ;例:(假设R7=20H)INC A(则R7=21H)

13、INC direct;例:(假设(30H)=20H)INC 30H(则(30H)=21H)INC Ri;例:(假设R0=20H,(20H)=30H) ; INC R0(则(20H)=31H)INC DPTR;例:(假设DPTR=20H) INC DPTR;(则DPTR=21H)7、 减1指令 指令格式 机器码格式 说明 DEC A 00010100 A(A) - 1DEC Rn 000llrrr Rn(Rn)-1 DEC Ri 0001011i (Ri)(Ri)-1 DEC direct 00010101,direct direct(direct)-1 只能对累加器只能对累加器A、工作寄存器、

14、直接寻址或、工作寄存器、直接寻址或Ri间接寻址的字间接寻址的字节单元内容实现减节单元内容实现减 1操作。与加操作。与加1操作一样,除操作一样,除INC A指令影响指令影响P标志外,其余都不影响各标志位。标志外,其余都不影响各标志位。9、 十进制加法调整指令十进制加法调整指令指令格式指令格式 DA A a. 若需实现若需实现数据为数据为BCD码形式的码形式的10进制加法运算进制加法运算,可用前述的,可用前述的加法指令加法指令并后跟并后跟10进制加法调整指令进制加法调整指令来完成。加法指令总是将两个来完成。加法指令总是将两个2位的位的BCD数当作数当作8 2进制数相加,并将结果存于累加器进制数相加

15、,并将结果存于累加器A中。显然中。显然A中不一定是正确的中不一定是正确的10进制数的和。进制数的和。但经过但经过“DA A”指令操作后,就把指令操作后,就把A中的内容调整为正确的中的内容调整为正确的 BCD和数。和数。 b. 十进制加法调整指令是按十进制加法调整指令是按10进制加法规则进行调整的:进制加法规则进行调整的:若累加器若累加器A的低的低4位数值大于位数值大于9(1001B),或半进位标志),或半进位标志 AC= 1,则将,则将A 的低的低4位内容加位内容加6(0110B)调整;)调整; 若累加器若累加器A的高的高4位数值大干位数值大干9,或进位标志,或进位标志Cy =l,则将,则将A

16、的高的高 4位加位加 6调整。调整。 c. 十进制加法调整指令只影响进位标志十进制加法调整指令只影响进位标志Cy: 当当A 的最高位因调整而产生进位时的最高位因调整而产生进位时Cy置置1,反之则保留,反之则保留Cy在调整前的在调整前的状态。经过上述处理后,若状态。经过上述处理后,若Cy= 1,则表示,则表示10进制加法产生了进制加法产生了10进制进位。进制进位。(表表示相加后的和已大于或等于示相加后的和已大于或等于100) 例:设累加器例:设累加器A中置有两位中置有两位BCD数数01010110(即(即10进制数进制数56),),R2中为中为01110101(即(即10进制数进制数75)可用下

17、列两条指令实现)可用下列两条指令实现10进制加法运进制加法运算:算: ADD A,R2 DA A 分析:分析: 执行第一条指令,把执行第一条指令,把A和和R2的内容按的内容按8位位2进制数相加,结果进制数相加,结果A= 01010110+ 01110101 = 11001011,且标志,且标志AC0, Cy 0。 第二条指令将按上述原则执行操作,因第二条指令将按上述原则执行操作,因A 的高、低的高、低4位的数值均大位的数值均大于于9,故,故A须加须加66(即(即01100110)调整。结果)调整。结果A=1100101101100110= 00110001,且,且Cy =1,即和为,即和为BC

18、D码的码的131。 4.5.1 单操作数指令 4.5.2 双操作数逻辑运算指令 (1)逻辑与运算(2)逻辑或运算1 无条件转移指令无条件转移指令l l 长转移指令(长转移指令(三字节指令)三字节指令)LJMPaddr16 ;PC addr16运用该指令可转移到运用该指令可转移到64K程序存贮器的任何位置;程序存贮器的任何位置;l l 绝对转移指令(双字节指令)绝对转移指令(双字节指令)AJMPaddr11 ;PC100 addr11 为为11位的操作数,执行时,首先是位的操作数,执行时,首先是PC的内容加的内容加2,然后将此地址,然后将此地址装入装入PC的低的低11位。位。PC的高的高5位不变

19、。指令的机器码为:位不变。指令的机器码为:a10a9a800001,a7a6a5a4a3a2a1a0 11位地址的范围为位地址的范围为0000000000011111111111,即可转移的范围,即可转移的范围是是2KB。转移可向前转移,也可向后转移。如图。转移可向前转移,也可向后转移。如图4.8所示。所示。l l 短(相对)转移指令:无条件相对转移指令短(相对)转移指令:无条件相对转移指令 SJMPrel;PC PC + 2 + rel 若若relFEH,则目的地址会和源地址相同。,则目的地址会和源地址相同。 一般在程序的最末端加上这样的一条指令,则序就不会再向下执行了:一般在程序的最末端加

20、上这样的一条指令,则序就不会再向下执行了: HERE: SJMP HERE或或 SJMP $l 变址方式的转移指令(一字节指令)变址方式的转移指令(一字节指令) JMPA+DPTR;PC A + DPTR 执行时,将数据指针(执行时,将数据指针(DPTR)与累加器)与累加器A的的8位无符号数相加。其位无符号数相加。其结果结果直接装入PC。不同寻址方式的差别不同寻址方式的差别 跳转范围不同:直接寻址和间接寻址跳转范围不同:直接寻址和间接寻址 64K 绝对寻址绝对寻址 2K 相对寻址相对寻址 256 指令机器码的长度不同:直接寻址指令机器码的长度不同:直接寻址 3字节字节 绝对寻址和相对寻址绝对寻

21、址和相对寻址 2字节字节 间接寻址间接寻址 1字节字节 变址寻址需预先对数据指针和累加器赋值,才能实现有效的跳转。通常,变址寻址需预先对数据指针和累加器赋值,才能实现有效的跳转。通常,用来实现多分支的选择转移用来实现多分支的选择转移2 条件转移指令条件转移指令 累加器判零条件转移指令 汇编格式 机器码格式 转移条件 转移时 JZ rel 01100000,rel (A)0 PCPC+2+rel JNZ rel 01100000,rel (A)0 PCPC+2+rel 8051机中没有零状态标记,这两条指令本身不做任何运算,是直接测试累加器的内容是否为零,以判断转移的条件是否满足。如,前面的指令

22、能使累加器的内容为零,就可利用这条指令。例 将外部RAM的一个数据块传送到内部RAM,两者的首地址分别为DATA1 和DATA2,遇到传送的数据为0时停止传送。 MOV R0, #DATA1 MOV R1, #DATA2LOOP: MOVX A, R0HERE: JZ HERE MOV R1, A INC R0 INC R1 SJMP LOOP比较条件转移指令(三字节指令)汇编格式 机器码格式 转移条件 转移时CJNE A,#data,rel 10110100,data,rel (A)- data 0 PCPC+3+relCJNE A,direct,rel 10110101,direct,re

23、l (A)-(direct)0 PCPC+3+relCJNE Rn,#data,rel 10111rrr,data,rel (Rn)- data 0 PCPC+3+relCJNE Ri,#data,rel 1011011i,data,rel (Ri)- data0 PCPC+3+rel a) 这组指令的功能是比较前面两个操作数的大小,若它们的值不相等则转移。若相等则不转移,程序继续执行。此时,若操作目的数小于源操作数,则置CY=“1”;否则置CY=“0”,不影响任一操作数的内容。 b) 由于rel的范围为128+127,故指令的相对转移范围为PC125PC+130; 指令在执行过程中的比较,实

24、际上就是进行减法操作。这也就是Cy形成的原因,但不保存减法 的差,而只是将结果反映在标志位以及是否转移。 c) 对于比较的两无符号数,则可据比较条件转移指令产生的Cy来判别大小:当Cy0时,AB;当Cy1时,AB; 负.正AB;若Cy1时,AB;若Cy1时,AB;减1条件转移指令 (将减1功能和条件转移结合在一起的指令)DJNZ Rn,rel ;Rn Rn -1,若Rn 0,则PCPC+2+rel;否则,继续执行.DJNZ direct,rel;(direct)(direct) -1,若(direct) 0,则PCPC+3+rel;否则,继续执行. 利用该组指令可指定任何一个工作寄存器或一内部

25、RAM单元为计数器,构成循环程序。 以上介绍的各种条件转移指令,都是相对转移指令,转移的范围只能是256个字节,若要对大范围内实现条件转移,则可将条件转移指令和长转移指令结合起来。例如:据A和#80的比较结果来转移到标号NEXT1,而转移的距离超过了256个字节,则可这样来实现: CJNE A,#80,NEXT . . . SJMP NEXT2NEXT: LJMP NEXT13 3 子程序调用与返回指令子程序调用与返回指令 在程序设计中,有时因操作要求,需反复执行某段程序,故可在程序设计中,采用子程序,减少重复指令所占的内存空间,并使程序的结构清楚。 在程序调用的过程中,也是要中断原有的指令执

26、行顺序,转移到子程序的入口地址去执行子程序。和转移指令的不同在于,子程序执行完毕后,要返回到原有程序中断的位置,继续往下执行,因此,子程序调用指令还必须将程序中断的位置在堆栈中保存起来。因为堆栈的存取方式适合于子程序嵌套时断点的保存。主程序断点1断点2子程序1子程序2返回返回断点1地址低8位断点1地址高8位断点2地址低8位断点2地址高8位SP 如右图所示,为一个两层嵌套的子程序调用,及调用时堆栈中断点地址的存放情况。子程序调用指令要完成两个功能: (1)将断点地址堆入堆栈保护。 断点地址是子程序调用指令的下一条指令的地址,取决于调用指令的字节数;若PC为子程序调用指令所在的地址,那么断点地址就

27、是PC2或PC3。 (2)将所调用子程序的入口地址送到程序计数器PC,以便实现子程序调用。 1)调用子程序指令)调用子程序指令ACALL addr11 ;PC PC+2,SPSP+1,(SP)PC70 ;SP SP+1,(SP) PC158,PC100addr11LCALL addr16 ;PCPC+3,SPSP+1,(SP)PC710 ;SPSP+1,(SP)PC158, PCaddr16l LCALL指令称为长调用指令,为三字节指令,可在64KB范围内调用子程序。指令执行后,将断点堆入堆栈,并调用addr16所规定的子程序。l ACALL指令称为绝对调用指令,为双字节指令。执行时,首先是P

28、C的内容加2,然后将此地址装入PC的低11位,而PC的高5位不变。指令的机器码为: a10a9a800001,a7a6a5a4a3a2a1a0 由于PC的高5位不变,所以所调用的子程序的地址必须在该指令后第一个字节为起始的2K范围内。 若将64kB的内存空间以2kB为一页,则共可分为32页,在一般情况下,ACALL指令和所调用的子程序都在一个页面下,而当出现有如下所示的情况时,就不是在一个页面了:例如: ACALL指令的地址为:0000 0111 1111 1110 (07FEH) 执行以后的PC为:(PC+2) 0000 1000 0000 0000 (0800H) 则用ACALL指令调用的

29、子程序就只能在0800H0FFFH内,而不是0000H07FFH2) 返回指令返回指令RET ;子程序返回 ;PC158 (SP),SPSP-1 ;PC70 (SP),SPSP-1RETI ;中断服务子程序返回;PC158(SP),SPSP-1 ;PC70 (SP),SPSP-1 功能:从堆栈中取出断点,送给程序计数器PC,使程序从断点处继续执行。堆栈指针SP的值将减2; 用法:RET写在子程序的末尾,而RETI应用在中断服务子程序的最后。4 空操作指令空操作指令 NOP ;PC PC+1 这是一条单字节控制指令。执行时,不作任何操作(即空操作),仅将这是一条单字节控制指令。执行时,不作任何操

30、作(即空操作),仅将程序计数器程序计数器PC的内容加的内容加1,使,使CPU指向下一条指令继续执行程序。这条指令指向下一条指令继续执行程序。这条指令常用来产生一个机器周期的时间延迟。常用来产生一个机器周期的时间延迟。 布尔变量即开关变量,是以位为单位来进行运算和操作的。51机内部有一个布尔处理器,实际上是一个一位微处理器,有自己的累加器(借用进位标志Cy,在指令中用C来表示),自己的位存贮器(即位寻址区中的各位),也有完成位操作的运算器。并对位地址空间具有丰富的位操作指令。 这组指令的功能是将由源操作数指出的布尔变量传送到目的操作数指定的位中去。其中一个操作数必须是位累加器C,另一个可以是任何

31、可寻址位,不影响其它寄存器和标志。1、 位传送指令 例:将30H位的内容传送到20H位注意:两个可寻址的位之间没有直接传送的指令,必须以Cy为中介进行;并且在传送过程时,注意要保存原有的Cy值。 MOV 10H, C MOV C, 30H MOV 20H, C MOV C, 10H 2、 位清零 指令CLR C 11000011 C“0”CLR bit 11000010,bit (bit )“0”3、 位置1 指令SETB C 11010011 C“1”SETB bit 11010010 ,bit (bit )“1”以上两组指令将操作数指明的位进行清“0”、置“1”等操作,不影响其它标志4、

32、位(逻辑)运算指令位(逻辑)运算指令5、 位的条件转移指令 4.3 MCS-51的伪指令的伪指令 伪指令不是在程序运行期间由计算机来执行的,它是在汇编程序对源程序汇编期间由汇编程序处理的操作,它们可以完成如数据定义、分配存储区、指示程序结束等功能。(1) ORG(起始汇编)伪指令 ORG伪指令称为起始汇编伪指令,常用于汇编语言源程序或数据块开头,用来指示汇编程序对源程序开始进行汇编。其格式为:标号: ORG 16位地址或者标号(2) END(结束汇编)伪指令 END伪指令称为结束汇编伪指令,常用于汇编语言源程序末尾,用来指示源程序到此全部结束。其格式为: 标号: END(3) EQU(赋值)伪

33、指令 EQU称为赋值(Equate)伪指令,用于给它左边的“字符名称”赋值。EQU伪指令格式为: 字符名称 EQU 数据或者汇编符(4)DATA(数据地址赋值)伪指令DATA伪指令称为数据地址赋值伪指令,也用来给它左侧的“字符名称”赋值。它的格式为: 字符名称 DATA 表达式 (5)DB伪指令 DB(Define Byte)伪指令称为定义字节伪指令,可用来为汇编程序在内存的某个区域中定义一个或者一串字节,格式为:标号: DB 表达式或字符串其功能是将表达式或字符串以字节形式存放在以本语句标号为首址的存储单元中。 (6)DW伪指令 DW(Define Word)伪指令称为定义字伪指令,用来为汇

34、编程序在内存的某个区域中定义一个或者一串字,格式为 标号: DW 表达式或字符串(7)DS伪指令 DS(Define Storage)伪指令称为定义存储空间伪指令,格式为: 标号: DS 表达式 DS语句可以指示汇编程序从它的标号地址(或实际物理地址)开始预留一定数量的内存单元,以备源程序执行过程中使用。(8)BIT伪指令BIT(位地址赋值)伪指令称为位地址赋值伪指令,用于给以符号形式的位地址赋值,格式为: 字符名称 BIT 位地址该语句的功能是把BIT右边的位地址赋给它左边的“字符名称”。 4.4 汇编语言程序设计步骤与结构汇编语言程序设计步骤与结构 4.4.1 程序设计步骤程序设计步骤 程

35、序是为解决某个问题由指令或语句构成的有序集合。使用某种计算机语言或指令系统编写解决某一问题的程序的过程称为程序设计。汇编语言程序设计是用计算机的指令系统的指令助记符和伪指令编写解决某一问题的程序的过程。 汇编语言程序设计的过程要经历建立模型、确定算法、编制流程、分配内存、编写程序和上机调试等几个步骤。4.4.2 程序流程图程序流程图(1)起始框和终止框:表示程序段的开始和终止。(2)执行框:表示某一段程序或某一模块框内标有程序或模块应实现的功能。它只能有一个入口和一个出口。(3)判断框:表示分支判断,用菱形框表示,框内写有判断的条件,它有一个入口,两个出口分别表示条件成立或不成立时的出口。(4

36、)流程线:它是一些带箭头的线段,表示程序进行的顺序。4.4.3 程序的基本结构程序的基本结构程序的基本结构有三种:顺序、分支(选择)和循环(重复)。4.5顺序结构程序 顺序程序是一种最简单,最基本的程序。 程序按编写的顺序依次往下执行每一条指令,直到最后一条。 任何复杂的程序,都含有较大成份的顺序结构程序。例:将内部RAM 中20H 单元、30H 单元和40H单元的无符号数相加,存入R0(高位)和R1(低位)中。源代码如下:ORG 1000H ;起始伪指令,用于定义程序的存放起始地址MOV A,20H ;将20H单元的数送到累加器A中ADD A,30H ;将A中的数和30H单元的数相加MOV

37、R1,A ;暂存低位和于R1寄存器CLR A ;A清零,为下一条指令做准备ADDC A,#00H ;将进位(即前面加法结果的高位)加到了累加器AMOV R0,A ;暂存高位和MOV A,40H ;将最后一个加数送到A中ADD A,R1 ;与前面暂存的结果相加MOV R1,A ;按要求存放低位结果CLR A ;为高位加法做准备ADDC A,R0 ;与前面暂存的高位以及最近一次加法的进位累加起来MOV R0,A ;按要求存放高位结果END;结束伪指令4.6 分支结构程序的设计 1. 分支程序可根据要求无条件或条件地改变程序执行流向。分支程序可根据要求无条件或条件地改变程序执行流向。编写分支程序主要

38、在于正确使用转移指令。分支程序有:编写分支程序主要在于正确使用转移指令。分支程序有:单分支结构、双分支结构、多分支结构;单分支结构、双分支结构、多分支结构; 2. 分支程序的设计要点如下:分支程序的设计要点如下:(1)先建立可供条件转移指令测试的条件。)先建立可供条件转移指令测试的条件。 (2)选用合适的条件转移指令。)选用合适的条件转移指令。(3)在转移的目的地址处设定标号。)在转移的目的地址处设定标号。A. 单分支结构 单分支结构是最简单的一种分支结构,一般只要使用条件转移指令一次即可实现。即根据条件对程序的执行进行判断,满足条件则进行程序转移,否则程序顺序执行。例:假设有两个数在内部 RAM 单元的40H 和41H 中,现在要求找出其中较大的一个数,并将较大的数存入40H 中,而将较小的一个数存入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论