MCS-51第四章 汇编语言及程序设计_第1页
MCS-51第四章 汇编语言及程序设计_第2页
MCS-51第四章 汇编语言及程序设计_第3页
MCS-51第四章 汇编语言及程序设计_第4页
MCS-51第四章 汇编语言及程序设计_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

第十四章51汇编语言及程序设计

伪指令不是真正的指令,在汇编时不产生机器代码。伪指令的功能主要是用来对汇编过程进行某种控制。采用机器汇编的方法时,源程序必须通过汇编程序的处理,才能转换为计算机识别和执行的机器语言。为此,在源程序中应有向汇编程序发出的指示信息,告诉汇编程序如何完成汇编工作。如用伪指令给程序分配一定的存储区、定义符号、指定暂存数据的RAM区等。§4.1伪指令一般用于确定汇编语言源程序或某数据块在内存存储的首地址ORG2000HSTART:MOVA,#10H┇END在一个源程序中,可以多次使用ORG规定不同程序段的起始地址,但定义的地址顺序应该是从小到大,不允许交叉、重叠。1.ORG(起始汇编)伪指令ORG2000H┇ORG2500H┇ORG3000H┇ORG2500H┇ORG2000H┇ORG3000H┇

END是汇编语言源程序的结束标志,常用于汇编语言源程序末尾,表示汇编结束。一个源程序只能有一个END命令,且置于程序的最后。在END以后所写的指令,汇编程序都不予处理。2.END(结束汇编)伪指令字符名EQU数据或汇编符

ORG2000HKAEQUR1M1EQU20HSTRTEQU2500H MOVR0,#M1MOVKA,A┇ACALLSTRT┇END3.EQU(赋值)伪指令

①“字符名”不是标号,故它与EQU之间不能用“:”隔开;②“字符名”必须先赋值后使用,只能赋值一次;K1EQU30HMOVA,K1+1③在有些MCS-51汇编程序中,EQU定义的“字符名”不能在表达式中运算。如下面语句就是错误的。字符名DATA表达式①表达式允许是一个数据或地址,也可以是包含被定义的“字符名”在内的表达式,但不能是汇编符号,如R0~R7等

②DATA伪指令可放在程序的任何位置,比EQU伪指令灵活

4.DATA(赋值)伪指令

ORG2000HMDATA20HDELAYXDATA08AFHMOVA,M┇LCALLDELAY┇END

③DATA伪指令一般用于定义程序中所用的8位或16位的数据或地址,但在有些汇编程序中,只允许DATA语句定义8位数据或地址,定义16位的数据或地址时,需使用XDATA语句

DB伪指令可用来为汇编语言源程序在内存的某区域中定义一个或一串字节。[标号:]DB项或项表ORG2000HTAB1:DB30H,8AH,7FH,73DB'5','A','BCD'5.DB(定义字节)伪指令(2000H)=30H(2001H)=8AH(2002H)=7FH(2003H)=49H;十进制数73以十六进制数存放(2004H)=35H;35H是数字5的ASCII码(2005H)=41H;41H是字母A的ASCII码(2006H)=42H;42H是字符串'BCD'中B的ASCII码(2007H)=43H;43H是字符串'BCD'中C的ASCII码(2008H)=44H;44H是字符串'BCD'中D的ASCII码

DW伪指令称为定义字伪指令,用于为源程序在内存某个区域定义一个字或一串字。其格式为:

[标号:]DW项或项表

ORG1500HTAB2:DW1234H,80H(1500H)=12H,(1501H)=34H,(1502H)=00H,(1503H)=80H6.DW(定义字)伪指令

DS伪指令称为定义存储空间伪指令。

[标号:]DS表达式

ORG1000HDS20HDB30H,8FH汇编后从1000H开始,预留32(20H)个字节的内存单元,然后从1020H开始,按照下一条DB指令赋值,即(1020H)=30H,(1021H)=8FH。7.DS(定义存储空间)伪指令

BIT伪指令称为位地址赋值伪指令,用于给以符号形式的位地址赋值。字符名BIT位地址ORG0500HK1BIT20HK2BIT30HYBITP1.0BG:MOVC,K1ANLC,K2MOVY,C┇END8.BIT(位地址赋值)伪指令§4.2汇编语言的程序设计

顺序结构分支结构循环结构查表结构子程序结构顺序结构程序是最简单的程序结构,也称为直线结构程序。这种程序中既无分支、循环,也不调用子程序,程序按顺序一条一条地执行指令。

【例】拆字程序。将30H单元内的两位BCD码拆开并转换成ASCII码,将转换后的ASCII码放在31H和32H单元,并让低位ASCII码放在32H单元。1.顺序结构程序设计

ORG 2000HMOV A,30H ANLA,#0FH ADD A,#30H MOV 32H,A MOV A,30H SWAPA ANL A,#0FH ADD A,#30H MOV 31H,ASJMP$END例.将60H单元中的8位无符号数转换成三位BCD码,并存放在BAI(百位)、SHI(十位)和GE(个位)三个单元中。ORG2000HBAIWDATA40HSHIWDATA 41HGEWDATA 42HMOV A,60H MOVB,#100 DIV AB MOVBAIW,A

MOVA,B MOVB,#10 DIVABMOVSHIW,A MOVGEW,B SJMP$END例.将两个三字节无符号数相加,其中一个加数在内部RAM的32H、31H和30H单元;另一个加数在内部RAM的35H、34H和33H单元,要求相加后的和存入32H、31H和30H单元,进位存入位寻址区的20H单元中。ORG2000HMOV R0,#30H MOV R1,#33H MOV A,@R0 ADD A,@R1 MOV @R0,A INC R0 INC R1MOV A,@R0 ADDCA,@R1MOV @R0,A INC R0 INC R1MOV A,@R0 ADDCA, @R1 MOV @R0,A MOV 20H,C END例.16位数求补。已知16位二进制数在R1、R0中,将此16位二进制数求补,求补结果存入内部RAM31H、30H单元。ORG2000HMOVA,R0 CPLA ADDA, #01HMOV30H,A MOVA,R1 CPL A ADDCA,#00H MOV31H,A END分支结构程序的特点就是程序中含有转移指令分支程序的设计要点如下:(1)先建立可供条件转移指令测试的条件;(2)选用合适的条件转移指令;(3)在转移的目的地址处设定标号。在MCS-51指令系统中,通过条件判断,实现单分支程序转移的指令有JZ,JNZ,CJNE和DJNZ等。此外还有以位状态作为条件进行程序分支的指令,如JC,JNC,JB,JNB和JBC等。使用这些指令可以完成以0、1、正、负,以及相等、不相等作为各种条件判断依据的程序转移。2.分支结构程序设计例求单字节有符号二进制数的补码

ORG2000HJNBACC.7,NEGMOVC,ACC.7MOV00H,CCPLAADDA,#1MOVC,00HMOVACC.7,CNEG:SJMP$END例.已知VAR单元中有一自变量X,请按如下条件编出求函数值Z并将它存入FUN单元的程序。

ORG2000HVARDATA40HFUNDATA41HSTART:MOVA,VAR JZSAVE JNBACC.7,ZHENMOVA,#0FFHSJMP SAVEZHEN:MOVA,#01HSAVE:MOVFUN,ASJMP $END

ORG2000HVARDATA40HFUNDATA41HSTART:MOVA,VAR CJNE A,#0,NEQ SJMPSAVE NEQ:JNBACC.7,ZHEN;

MOVA,#0FFH SJMP SAVEZHEN:MOVA,#01HSAVE:MOVFUN,ASJMP $END

ORG2000HVARDATA40HFUNDATA41HSTART:MOVA,VAR JZSAVE MOVR1,#0FFH JBACC.7,NEGMOVR1,#01H SJMP SAVENEG:MOVA,R1SAVE:MOVFUN,A SJMP $END例.两个带符号数分别存于ONE和TWO单元,试编程比较大小,并将大的数存入MAX单元。若X-Y为正,则

OV=0,X>YOV=1,X<Y若X-Y为负,则

OV=0,X<YOV=1,X>YORG2000HONEDATA30HTWODATA31HMAXDATA32HCLRC MOVA,ONESUBBA,TWOJZXMAX JBACC.7,NEGJBOV,YMAXSJMPXMAX NEG:JBOV,XMAX YMAX:MOVA,TWO SJMPSAVEXMAX:MOVA,ONE SAVE:MOVMAX,A SJMP$END3.循环结构程序设计(1)循环初始化:

循环初始化程序段一般位于循环程序的开头,位于循环体外,用于设置循环过程工作单元的初始值。例如,设置循环次数计数器、地址指针初值等(2)循环处理:循环处理程序段位于循环体内,是需要重复执行的程序段部分。(4)循环结束:循环结束程序段用于处理循环程序的最终结果以及恢复各工作单元的初始值。在循环次数已知的情况下,用计数方法控制循环的终止。循环次数未知的情况下,可根据某种条件判断决定是否终止循环。(3)循环控制:循环控制程序段也位于循环体内,用于判断循环条件是否满足,不满足则转去执行循环处理程序部分,否则,退出循环。一般采用DJNZ指令来自动修改控制变量并结束循环。例.将内部数据存储器30H~7FH单元中的内容送到外部数据存储器以1000H开始的连续单元中去。LOOP:MOVA,@R0MOVX@DPTR,A INCR0 INCDPTRDJNZR7,LOOPSJMP$

ENDORG2000HTAB1EQU1000HMOVR0,#30HMOVDPTR,#TAB1 MOVR7,#50H例.已知内部RAM的ADDR1单元开始有一无符号数据块,块长在LEN单元,请编出求数据块中各数累加和并存数外部RAM的SUM1单元的程序。LOOP:ADDA,@R1 INCR1CHECK:DJNZR2,LOOP MOVX@DPTR,A SJMP$ ENDORG2000HADDR1EQU30HLENEQU20HSUM1EQU2000HMOVDPTR,#SUM1CLRA MOVR2,LEN MOVR1,#ADDR1 INCR2 SJMPCHECK

NEXT:ADDA,@R1 INCR1 DJNZR2,NEXT MOVX@DPTR,A SJMP$ ENDORG2000HADDR1EQU30HLENEQU20HSUM1EQU2000HMOVDPTR,#SUM1CLRA MOVR2,LEN MOVR1,#ADDR1NEXT1:JCNEXT MOVMAX,A NEXT:INCR1 DJNZLEN,LOOPSJMP$ END例.已知内部RAMADDR1为起始地址的数据块内部数据是无符号数,块长在LEN单元内,请编程求出数据块中的最大值并存入MAX单元。ORG2000HADDR1DATA50HLENDATA30HMAXDATA32HMOVMAX,#00H MOVR1,#ADDR1LOOP:MOVA,@R1 CJNEA,MAX,NEXT14.查表结构程序设计所谓查表就是根据存放在ROM中的数据表格的项数来查找和它对应的表中值。即:把事先计算或实验数据按一定顺序编成表格,存于ROM中,然后根据输入参数值,从表中取出结果。例.求函数Y=X!(X=0,…,7)的值。设自变量存放在ADDR1单元,表头的地址为TAB1,表中每个数据占两个字节,Y值为双字节,存放在寄存器R2R3中,R3存放Y值低字节,请编出查表程序。ORG2000HADDR1EQU20HSTART:MOVA,ADDR1 ADDA,ADDR1 MOVR3,A ADDA,#07H MOVCA,@A+PC XCHA,R3 ADDA,#04H MOVCA,@A+PC MOVR2,ASJMP$TAB1:DB01,00,01,00,02,00,06,00DB24H,00,20H,01,20H,07,40H,50HEND例.已知R0低四位有一个十六进制数(0~F中的一个),请编出能把它转换成相应ASCII码并送入R0的程序。ORG2000HMOVA,R0 ANLA,#0FH CJNEA,#10,NEXT1 NEXT1:JNCNEXT2 ADDA,#30H SJMPSAVE NEXT2:ADDA,#37H SAVE:MOVR0,A SJMP$ ENDORG2000H MOVA,R0 ANLA,#0FH ADDA,#90H DAA ADDCA,#40H DAA MOVR0,A SJMP$ ENDORG2000H MOVA,R0 ANLA,#0FH ADDA,#03H MOVCA,@A+PC MOVR0,A SJMP$ TAB: DB‘0’,’1’,’2’,’3’,’4’ DB‘5’,’6’,’7’,’8’,’9’ DB‘A’,’B’,’C’,’D’,’E’,’F’END5.子程序结构程序设计子程序在结构上应具有通用性、独立性和可调用性①子程序的第一条指令地址称为子程序的始地址或入口地址。该指令前必须有标号,标号应以子程序任务定名。例如求和子程序常以ADD1为标号。②主程序调用子程序是通过安排在主程序中的调用指令实现的,在子程序末尾放置RET子程序返回指令。③子程序调用和返回指令能自动保护和恢复断点地址,但对需要保护的工作寄存器、特殊寄存器和内存单元中的内容,就必须在子程序开始和末尾(RET指令前)安排保护和恢复的指令。⑤子程序参数可以分为入口参数和出口参数两类:入口参数是指子程序需要的原

温馨提示

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

评论

0/150

提交评论