第四章 汇编语言程序设计DOC.docx

上传人:b****1 文档编号:23292251 上传时间:2023-05-16 格式:DOCX 页数:5 大小:19.74KB
下载 相关 举报
第四章 汇编语言程序设计DOC.docx_第1页
第1页 / 共5页
第四章 汇编语言程序设计DOC.docx_第2页
第2页 / 共5页
第四章 汇编语言程序设计DOC.docx_第3页
第3页 / 共5页
第四章 汇编语言程序设计DOC.docx_第4页
第4页 / 共5页
第四章 汇编语言程序设计DOC.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

第四章 汇编语言程序设计DOC.docx

《第四章 汇编语言程序设计DOC.docx》由会员分享,可在线阅读,更多相关《第四章 汇编语言程序设计DOC.docx(5页珍藏版)》请在冰豆网上搜索。

第四章 汇编语言程序设计DOC.docx

第四章汇编语言程序设计DOC

第四章汇编语言程序设计(DOC)

      第四章汇编语言程序设计  本章的汇编语言程序设计的主要内容有:

汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。

    汇编语言程序设计概述  1、计算机的汇编语言  以助记符表示的指令,每一条指令就是汇编语言的一条语句。

  2、汇编语言的语句格式  MCS-51汇编语言的语句格式表示如下:

  []:

[];[]  标号:

指令的符号地址,有了标号,程序中的其它语句才能访问该语句。

  ①标号是1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。

  ②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。

  操作码:

规定语句执行的操作内容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。

  操作数:

给指令的操作提供数据或地址。

注释:

是对语句或程序段的解释说明。

  分界符:

用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。

  冒号用于标号之后  空格用于操作码和操作数之间  逗号用于操作数之间,分割两个以上的操作数分号用于注释之前。

        ORG3000H3000HE8HDELY:

MOVA,R0;这是延时子程序  单片机汇编语言程序的结构形式    顺序结构;分支结构;循环结构1、顺序结构程序设计顺序程序是最简单的程序结构,在顺序程序中既无分支、循环,也不调用子程序,程序执行时一条一条地按顺序执行指令。

    例:

三字节无符号数相加,被加数在内部RAM的50H、51H和52H单元中,加数在内部RAM的53H、54H和55H单元中,其中被加数单元和加数单元的高位地址存放的为最低位字节;要求把相加之和存放在50H、51H和52H单元中。

进位位存放在位寻址区的00H位中。

    ADDU:

MOVR0,#52H;被加数的低字节地址MOVR1,#55H;加数的低字节地址MOVA,@R0  ;取被加数的最低位数据ADDA,@R1  ;与加数的最低字节相加  MOV@R0,A  ;存低字节相加结果DECR0  ;地址减1DECR1  ;MOVA,@R0ADDCA,@R1  ;中间字节带进位相加MOV@R0,A  ;存中间字节相加结果DECR0  ;地址减1DECR1MOVA,@R0ADDCA,@R1  ;高位字节带进位相加MOV@R0,A  ;存高字节相加结果CLRA  ;进位送00H位保存。

(对A清零)ADDCA,#00H  ;MOV20H,A;进位位送入位地址00H  RET  2、分支结构程序设计  程序分支是通过转移指令实现的,为清除起见,把分支程序分为以下几种情况。

  单分支程序  单分支使用条件转移指令实现,即根据条件对程序的执行进行判断,满足条件则进行程序转移,否则程序顺序执行。

    多分支程序  ⑴使用多条CJNE指令,通过连续比较,实现多分支程序转移。

⑵使用查地址表方法实现多分支程序转移。

  ⑶使用查转移指令表的方法实现多分支程序转移。

⑷通过堆栈操作实现多分支程序转移。

  例:

有一温度控制系统,现场采集的温度值(Ta)放在累加器A中。

此外,在内部RAM54H单元存放控制温度下限值,在55H单元存放控制温度上限值。

若Ta>T55,则程序转向JW;若Ta  有关程序段如下:

  CJNEA,55H,LOOP1;  AJMPFHLOOP1:

JNCJW  CJNEA,54H,LOOP2  AJMPFHLOOP2:

JCSWFH:

RETJW:

  :

SW:

  :

  3、循环程序循环是为了重复执行一个程序段,MCS-51汇编语言中虽然没有专用的循环指令,但可以使用条件转移指令通过条件判断来控制循环是否结束。

  MCS-51汇编语言的伪指令  伪指令是程序员发给汇编程序的命令,也称为汇编命令或汇编程序控制指令。

ORG汇编起始地址命令命令格式:

[]ORG  其中[]是选择项,根据需要选用。

项,通常为16位绝对地址,但也可以使用标号或表达式表示。

  例如:

    ORG8000H  8000H74H  START:

MOVA,#00H8001H00H  END汇编终止命令命令格式:

[]END[]END是汇编语言源程序的结束标志。

  EQU(EQUate)赋值命令  命令格式:

  EQU例:

  DATA1EQU40H(用DATA1来表示40H单元,以后程序中出现DATA1就代表40H单元,但如何区分它是代表数据还是地址呢?

这主要看程序中的指令形式,如果是数据,则应加“#”即#DATA1,  否则为地址。

)  执行:

  MOVA,DATA1;DATA1为片内的40H单元执行:

MOVA,#DATA1;DATA1为数据40H    DB定义字节命令命令格式:

  []DB  例如:

存放七段数码管显示的十六进制数的字型码,可使用多条DB命令定义:

  ORG8100H  LED_TAB:

DBC0H,F9H,A4H,B0H  DB99H,92H,82H,F8H  DB80H,90H,88H,83H  DBC6H,A1H,86H,84H  (这些数据依次存放在8100H为起始地址的程序存储区中,它们是共阳极七段数码管的字型数据,把它们组成常数表格放在程序存储区)  DW定义数据字命令命令格式:

  []DW  (在本讲中我们介绍了汇编语言的格式,几种基本的程序结构格式,伪指令等,希望大家在课后的练习加以熟悉掌握。

)  MCS-51单片机汇编语言程序设计举例  1、主程序:

顺序执行的无限循环的程序,运行过程处于全封闭状态。

例如:

带显示及键盘输入的某单片机系统的主程序框图结构为:

    2、子程序:

完成某种特定功能的一个程序段,也称为一个程序模块。

    作为子程序,要有以下约定:

子程序功能:

程序入口:

程序出口:

程序影响:

    子程序功能:

  完成三字节无符号数的加法。

程序入口:

  50H、51H、52H为被加数,数据结构是50H为最高位  55H、54H、53H为加数,数据结构是53H为最高位程序出口:

  50H、51H、52H为和值。

数据结构是50H为最高位,位地址00H为进位位。

程序影响:

  R0、R1、R7、A    ADDU:

MOVR0,#52H;被加数的低字节地址MOVR1,#55H;加数的低字节地址MOVR7,#3  ;三字节加法,循环次数为三次

  

      CLRC  ;清进位位LOOP:

MOVA,@R0  ;取被加数ADDCA,@R1  ;与加数相加MOV@R0,A  ;存相加结果DECR0  ;地址减1DECR1  ;DJNZR7,LOOP;未完,继续MOV00H,C  ;存进位位RET    例:

已知有数据3A59F0H+F687B2H,请利用以上程序完成加法运算。

并将和值送往片外RAM的50H,51H,52H单元。

  ,具体如下)  MOV52H,#0F0H;送被加数  MOV51H,#59H  MOV50H,#3AH    MOV55H,#0B2H;送加数  MOV54H,#87H  MOV53H,#0F6H  LCALLADDU  ;调用多字节加法子程序MOVR0,#50  ;和值送往外部RAMMOVR7,#03H  LOOP:

MOVA,@R0MOVX@R0,AINCR0DJNZR7,LOOP:

:

  (假设我们需要把运算结果送外部RAM保存,又如何呢?

对照程序的后半段予以说明。

)  3、中断服务程序:

中断服务程序是为了完成中断请求而编制的程序。

    ㈠算术运算程序  双字节无符号数乘法子程序例:

要进行两个双字节无符号数乘法运算,被乘数和乘数分别存放于内部RAM的R2,R3单元和R6,R7单元中,相乘结果依次存放在R4、  R5、R6、R7单元中。

        R7*R3按照乘法规则,低8位放在寄存器A中,高8位放在寄存器B中,通过这两寄存器转存到R7和R5两个没有用过的寄存器中去,显然,R7就是终积的最低位的一个字节,R5是部分积的一部分;做完这个运算,我们来做R7*R2,结果仍然在A和B中,刚才我们已经有部分积在R5中,让R5和A相加,相加后的结果放到R4中,作为终积的一部分,并产生一个进位位,进位位和B相加,相加结果放到R5寄存器中,到这里,我们完成乘数低8位和被乘数的乘积运算结果,它们分别存放在R7、R4和R5中;下面我们来乘数的高8位与被乘数的16位相乘,这时,也是先R6*R3,乘积结果在A,B中,让R4和A相加,结果放到R6中,并产生进位位,R5和B相加,并考虑刚才的进位位,最后得到的结果放到R5中,并将进位位送F0,最后R6*R2,结果在B和A中,A与R5相加,结果继续放在R5中,进位送,最后是暂存的进位、B和辅助进位位相加结果存R4。

最后得到相乘的结果。

经过乘、加,乘、加的四个循环过程得到最后的结果。

)子程序功能:

双字节无符号数相乘  程序入口:

R2、R3为被乘数,R6、R7为乘数,程序出口:

R4、R5,R6、R7为乘积程序影响:

A、B、F0DBMUL:

MOVA,R3  MOVB,R7  MULAB  ;R3*R7  XCHA,R7;原R7内容送A,R7←R3R7L,(在R7中得到乘积得最低字节)  MOVR5,B  ;R5←R3R7H  MOVB,R2  MULAB  ;R2*R7(得第二次部分积)  ADDA,R5  ;R2R7L+R2R7H  MOVR4,A  ;R4←和  CLRA  ADDCA,B  ;R2R7H+(R2R7L+R5时产生的进位)  MOVR5,A  ;R5←和  MOVA,R6  ;  MOVB,R3  MULAB  ;R3*R6(得到第三次部分积)  ADDA,R4  ;R3R6L+R4  XCHA,R6  ;A←R6,R6←R3R6L+R4(在R6中得到乘积的次低字节)  XCHA,B  ;A←R3R6H,B←R6  ADDCA,R5;R3R6H+R5+(R3R6L+R4时产生的进位)  MOVR5,A;R5←和  MOVF0,C  ;F0←进位  MOVA,R2  MULAB  ;R2*R6(得第四次部分积)  ADDA,R5  ;R2R6L+(R3R6H+R5时产生的进位)  MOVR5,A  ;在R5中得到终积的次高字节  CLRA  MOV,C;累加器最高位←进位  MOVC,F0  ADDCA,B  ;R2R6H+F0+  MOVR4,A  ;在R4中得到终积的最高字节  RET  (具体讲解对照乘法运算规则和具体图例,简要说明该段程序的意思,编制程序的过程是对单片机指令系统的熟悉过程,也是对过去学习过的相关知识的复习过程,是一种综合能力的体现,希望同学们尽快熟悉单片机程序的设计过程。

)  第四章MCS-51汇编语言程序设计――汇编语言程序设计举例  ㈡数值转换程序  1.十六进制数转换为ASCII码    ASCII码与十六进制数据之间的关系:

ASCII码字符:

00H~7FH  (ASCII码字符共128个,我们要进行数值转换,就是要找出十六进制的数据到ASCII码之间的关系,)  ASCII码与十六进制数据之间的关系:

0~9→30H~39H  A~F→41H~46H  (我们要进行十六进制数到ASCII码的转换,如果计算机处理的数据是0~9时,对应的ASCII码为30H~39H,是A~F时,找到的是41H~46H。

也就是说,如果计算机要把0送给打印机打印的时候,这时,你不能送0,而是30H,这样一种转换实际上有很多种方式,)转换方法:

⑴计算法:

  0~9→+30H→→ASCII:

30H~39H  A~F→+30H+07H→→ASCII:

41H~46H  ⑵查表法:

建立ASCII代码表存入程序存储器中,通过程序将与转换码相对应的ASCII码从表格中找出。

  例:

在内部RAM的hex单元中存有两位十六进制数,试将其转换为ASCII码,并存放于asc和asc+1两单元中。

  D7D6D5D4  D3  D2D1D01100001  0  D2  Hex0011001  0  32H  asc0100010  0  44H  Asc+1  (假设我们把要转换的十六进制数为D2,按照要求将十六进制的2转换为ASCII码的32H,并放到asc单元,十六进制的D转换为ASCII码的44H存放于44H单元。

下面看程序编制过程,我们用子程序来完成)子程序功能:

完成堆栈区中SP所指单元中的低4位数据转换为ASCII码。

  入口:

待转换数据放入堆栈区中的首地址单元。

  出口:

转换后的数据放入堆栈区中的首地址单元子程序HASC:

DECSPDECSPPOPACCANLA,#0FHADDA,#7MOVCA,@A+PCPUSHACCINCSPINCSPRET  ASCTAB:

DB”0,1,2,3,4,5,6,7”DB”8,9,A,B,C,D,E,F”或建立的ASCII表:

30H,31H,32H,33H,34H,35H,36H,37H38H,39H,41H,42H,43H,44H,45H,46H  (首先,用两条堆栈减1指令,于我们的程序是子程序,供主程序或调用程序调用,在调用我们这个子程序时,要将断点处的地址压入堆栈,故作此操作)

  

  

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1