预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共43页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第4章80C51单片机汇编语言程序设计4.1单片机程序设计语言概述4.1.2单片机使用的高级语言伪指令(课本4.5节讲述)伪指令(课本4.5节讲述)(6)DW--定义字伪指令:格式:格式:[标号:]DW16位数据或数据表功能:在程序存储器中从指定的地址单元开始定义一个或多个字数据。ORG1000H(此语句可省略,由编译器根据程序大小自己分配更好)例,TAB:DW345DH,0DEFFH,’AA’,’CB’(7)BIT--位地址符号指令格式:字符名BIT位地址功能:用来将右边位地址值赋给左边的字符名例,ABCBITP1.1QQBITP3.2(8)DS定义存储空间伪指令格式:[标号:]DS表达式功能:用来从指定的地址单元开始留出一定量的字节空间作为备用空间。预留字节单元个数由表达式决定。例,ORG1000HDB32H,7AHDS02HDW1234H,58H4.2汇编语言程序的基本结构形式例、3字节无符号数相加:被加数在片内RAM50H(高字节)、51H和52H(低字节);加数在片内RAM的53H(高字节)、54H和55H(低字节);和存放在50H、51H和52H(低字节)单元中,进位存放在位寻址区的20H位中。分支结构也称为选择结构。为分支需要,程序设计时应给程序段的起始地址赋予一个地址标号,以供选择分支使用。分支结构又可分为单分支结构和多分支结构。1.单分支程序结构单分支程序结构即二中选一,是通过条件判断实现的。一般都使用条件转移指令对程序的执行结果进行判断(1)单分支结构举例假定在外部RAM中有ST1、ST2和ST3共3个连续单元,其中ST1和ST2单元中存放着两个无符号二进制数,要求找出其中的大数并存入ST3单元中。ORG0000HLJMPSTARTORG0030HSTART:CLRC;进位位清0MOVDPTR,#ST1;设置数据指针MOVXA,@DPTR;取第1个数MOVR2,A;第1个数存于R2INCDPTR;数据指针加1MOVXA,@DPTR;取第2个数SUBBA,R2;两数比较JNCBIG1;若第2个数大,则转向BIG1XCHA,R2;若第1个数大,则整字节交换BIG0:INCDPTRMOVX@DPTR,A;存大数RETBIG1:MOVXA,@DPTRSJMPBIG0END(2)多重单分支结构举例CJNEA,55H,LOOP1;若Ta≠T55,则转向LOOP1AJMPFH;若Ta=T55,则返回LOOP1:JNCJW;若(CY)=0,表明Ta>T55,转降温处理程序CJNEA,54H,LOOP2;若Ta≠T54,则转向LOOP2AJMPFH;若Ta=T54,则返回LOOP2:JCSW;若(CY)=1,表明Ta<T54,转升温处理程序FH:RET;若T55≥Ta≥T54,则返回主程序2.多分支程序结构多分支程序结构流程中具有两个以上条件可供选择。可供使用的是变址寻址转移指令“JMP@A+DPTR”,但使用该指令实现多分支转移时,需要有数据表格配合。多分支程序结构(1)通过数据表实现程序多分支(不讲)(2)通过转移指令表实现程序多分支(不讲)(3)其他实现程序多分支的方法(不讲)4.2.3循环程序结构4.380C51单片机汇编语言程序设计举例ORG0000HAJMPSUBORG0030HSUB:MOVR0,#40H;MOVR1,#50HMOVR5,#10CLRCSUB1:MOVA,@R0SUBBA,@R1MOV@R0,AINCR0INCR1DJNZR5,SUB1RETEND(2)两个不带符号的多字节数相减2.乘法运算由于乘法指令“MULAB”是对单字节的,即单字节数的乘法运算使用一条指令就可以完成;但对多字节数的乘法运算,则必须通过程序实现。举例:假定要进行两个双字节无符号数乘法运算,被乘数和乘数分别存放于内部RAM的R2、R3单元和R6、R7单元中(其中R2和R6分别为高位字节),相乘的结果(积)依次存放在R4、R5、R6、R7单元中。因为乘数和被乘数各为2字节,因此,须进行4次乘法运算,得到4次部分乘积。部分积高字节用H标志,部分积低字节用L标志。此外,还要处理部分积相加产生的进位。为了进一步了解程序,可以把乘法运算的实现过程用示意方法表示出来,如下图所示。两个双字节无符号数乘法示意图DBMUL:MOVA,R3MOVB,R7MULAB;R3×R7(得第1次部分积)XCHA,R7;原R7内容送A,R7←R3R7L(在R7中得到乘积的第4字节)MOVR5,B;R5←R3R7HMOVB,R2MULAB;R2×R7(得第2次部分积)ADDA,R5;R2R7L+R3R7HMOVR4,A;R4←和CLRAADDCA,B;R2R7H+(R2R7L+R5时产生的进位)MOVR5,A;R5←和MOVA,R6MOVB,R3MULAB;R