汇编语言程序设计方法.docx

上传人:b****2 文档编号:3173932 上传时间:2023-05-05 格式:DOCX 页数:18 大小:96.30KB
下载 相关 举报
汇编语言程序设计方法.docx_第1页
第1页 / 共18页
汇编语言程序设计方法.docx_第2页
第2页 / 共18页
汇编语言程序设计方法.docx_第3页
第3页 / 共18页
汇编语言程序设计方法.docx_第4页
第4页 / 共18页
汇编语言程序设计方法.docx_第5页
第5页 / 共18页
汇编语言程序设计方法.docx_第6页
第6页 / 共18页
汇编语言程序设计方法.docx_第7页
第7页 / 共18页
汇编语言程序设计方法.docx_第8页
第8页 / 共18页
汇编语言程序设计方法.docx_第9页
第9页 / 共18页
汇编语言程序设计方法.docx_第10页
第10页 / 共18页
汇编语言程序设计方法.docx_第11页
第11页 / 共18页
汇编语言程序设计方法.docx_第12页
第12页 / 共18页
汇编语言程序设计方法.docx_第13页
第13页 / 共18页
汇编语言程序设计方法.docx_第14页
第14页 / 共18页
汇编语言程序设计方法.docx_第15页
第15页 / 共18页
汇编语言程序设计方法.docx_第16页
第16页 / 共18页
汇编语言程序设计方法.docx_第17页
第17页 / 共18页
汇编语言程序设计方法.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

汇编语言程序设计方法.docx

《汇编语言程序设计方法.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计方法.docx(18页珍藏版)》请在冰点文库上搜索。

汇编语言程序设计方法.docx

汇编语言程序设计方法

第四章汇编语言程序设计方法

第一节汇编语言程序设计

1、程序设计语言

1)、机器语言

直接用二进制数表示指令和数据的最原始的程序设计语言。

2)、汇编语言

用助计符来表示的面向机器的程序设计语言。

用汇编语言编制的程序须要用“人工汇编”或“机器汇编”将其翻译成机器语言,才能被机器认识。

3)、高级语言

高级语言是一种面向过程而独立于计算机硬件结构的通用计算机语言。

如FORTRAN、PASCAL、C语言等。

注意:

①机器语言直接面对机器,实时性好,但难以编出较复杂的程序,现基本上被汇编语言代替;

②汇编语言是目前单片机初学者采用的一种编程方法,它具有实时性强,对较复杂的程序也能编制。

③高级语言它面向过程易于编制复杂程序,具有通用性好,程序简单,但它要求占用较大的内存空间,实时性差,目前从事单片机的开发和研究工作须掌握这种方法。

2、汇编语言的规范

1)、汇编语言源程序的格式

标号:

操作码目的操作数,源操作数;注释

2)、汇编语言伪指令

①ORG----起始地址伪指令;

功能:

用来规定目标程序或数据的起始地址。

格式:

[标号:

]ORG16位地址

说明:

在一个程序中允许有多个ORG指令,以规定不同程序段的起始位置。

②END-----汇编结束伪指令;

功能:

用来告诉汇编程序,此源程序到此结束。

格式:

[标号:

]END

说明:

在一个程序中有且只有一个END指令。

例如:

ORG1000H

START:

MOVA,B

JNBACC.7,DONE

CPLA

DONE:

MOVB,A

END

③EQU----赋值伪指令;

格式:

字符名称EQU数或汇编符号

功能:

将右边值赋给左边用户定义的字符

说明:

a、由EQU赋的字符可以作数值、数据地址、代码地址。

b、由EQU伪指令所定义的符号必须先定义后使用。

例如:

SDGFGEQU58H;表示SDGFG=58H

④DB----定义字节伪指令;

格式:

[标号:

]DB8位(二进制)数据表。

功能:

用于告诉汇编程序从指定的地址单元开始,定义若干个字节存储单元的内容。

说明:

a、数据表可以是二进制数也可以是ASCⅡ编码,数据之间用逗号分开,ASCⅡ要加单引号,如C,要写成‘C’。

b、它只适应程序存储器。

例如:

ORG1000H

FIRST:

DB73H,20H,45H,67H,01H

MOVA,#55H

DB34H,67H,89H,70H

执行后的结果如图1所示

⑤、DW------定义值伪指令;

功能:

用来告诉汇编程序从指定的地址单元开始,定义

若干个16位数据(二进制)。

格式:

[标号:

]DW字常数或ASCⅡ字符

图1由DB建立的数据表

说明:

a、字常数可以是8位也可以是更多位。

b、尽管在存储数据的形式上与DB相同但使用不一样,DB后面只能跟8位的数据或ASCⅡ字符。

C、它只适应程序存储器。

d、单个DW、DB定义的数表个数不得超过80个,多于80个数据应用多个指令完成

例如:

ORG1000H

PIOI:

DW5678H,1234H,2379H

结果如图2所示。

⑥、TA-----数据地址赋值伪指令;

格式:

字符名称DATA表达式

功能:

它的功能是给标号段中的标号赋以数值。

说明:

a、本语句与EQU相似,但本语句可以先用后定义;

图2由DW建立的数据表

b、在程序中它常用来定义数据地址。

⑦、BIT-----位地址赋值伪指令;

格式:

字符名称BIT位地址

功能:

用于告诉汇编程序,把位地址赋予规定的字符名称,用于位处理程序中。

例如:

X0BITP1.0

3、汇编语言程序设计方法

1)、程序设计过程

①建立数学模型

②选择适当的算法

③编制程序流程图

④汇编语言程序设计

⑤汇编语言程序调试

2)、程序流程图

①程序流程图的作用

能直观形象地表示各部分的逻辑关系及程序结构,它是设计程序特别是复杂程序的重要工具。

②程序流程图的组成

●端点框

表示程序的开始或结束,用表示,可在内填上相应文字。

流程线

表示程序的组向,用方向键表示。

●处理框

表示一种处理功能;框内用文字说明。

用不表示。

●判断框

用表示,该框用于指示一个判定点,从这点产生分支,在框内就注明测试条件,而测试结果应注明在各分支流程线上。

●连接框

连接框用表示,它表示流程中止而并非流程结束。

通常用来辟免流程线交叉,在流程图中标识相同的连接框表示流程相连。

●子程序框

用表示,该框表示调用子程序。

在该框内填入相应的子程序名称或入口地址。

③程序流程图的设计

程序流程图的设计将在具体的程序设计方法中针对具体的例子加以介绍。

第二节顺序与循环程序设计方法

1、顺序程序设计

1)、顺序结构程序设计方法

建立数学模型画程序流程图编写汇编程序

2)、应用举例

例1:

设有16位二进制数存放在R0、R1中(R0存放高位),试编写实现16位二进制数“取反加1”的操作程序。

解法1:

程序流程如图3所示,程序如下:

ORG1000H

START:

MOVA,R1

CPLA

ADDA,#01H

MOVR1,A

MOVA,R0

图3程序流程图

CPLA

ADDCA,#00H

MOVR0,A

END

解法2:

通过将R0、R1分别送DPTR的高低字节,然后利用INCDPTR实现加1,取反后再用:

CPLA这样的指令实现。

例2:

设在8031单片机内部RAM的40H单元中存放8位二进制数,要求将其转换成相应BCD码并由高位的顺序存入内部RAM以60H为首址的3个连续单元中,试编写相应程序:

解:

本题的关键是如何将二进制数转换成BCD码。

由数学变换知:

8位二进制/100=BCD码的百位数

余数/10=BCD码的十位数

余数=BCD个位数

程序如下:

ORG1000H

BINBCD:

MOVR0,#60H

MOVA,40H

MOVB,#100

DIVAB;整数存于A中

MOV@R0,A

INCR0

MOVA,#10

XCHA,B

DIVAB

MOV@R0,A

INCR0

XCHA,B

MOV@R0,A

END

思考题:

对于任意一个16进制表示的数,如AB9EF087,存放在以20H为首址的单元中,如何将其转化成BCD码?

2、循环程序设计方法

1)、循环结构程序的组成

①初始化部分:

它是用来设置循环初始化状态,如设置地址指针、循环计数器初值等。

②循环处理部分:

它是重复执行的数据处理程序。

③循环控制部分:

它通过检测循环次数或循环结束条件从而控制程序循环继续与否。

④结束部分:

它是对结果分析处理和存放结果。

2)、循环程序设计方法

(1)单循环程序设计方法

①循环次数是已知的循环程序设计

先分析要解决的问题,建立解决问题的数学模型,然后编写出对应的程序,按已知条件设置程序循环次数。

②循环次数未知的循环程序设计

先分析要解决的问题,建立解决问题的数学模型,确定待测定循环的参数,在编程过程中,选取合适的判别语句控制程序的循环。

(2)多循环程序设计方法

多循环程序设计除必须满足单循环程序设计的规则外,尚须符合循环不允许交叉的规定。

3)、应用举例

单循环程序设计举例:

例1:

已知80C51单片机使用6MHZ晶振,要求设计一个软件延时程序,延时时间为10ms。

分析:

晶振为6MHZ的单片机一个机器周期为2us,

如果采用循环方法,控制程序循环次数,就可以实现定时功能。

如图4为程序流程。

如程序如下:

周期数ORG2000H

1MOVR0,#0AH;毫秒数

1DL2:

MOVR1,#MT

1DL1:

NOP

1NOP

2DJNZR1,DL1

图4程序流程图

2DJNZR0,DL2

END

定时值的确定:

(1+1+2)×2us×MT=1000us

MT=7DH

例2:

用P1口作为数据读入口,为了读取稳定的值,要求连续读8次,然后取平均值。

分析:

设R0、R1作为连续8次累加的16位工作寄存器,且R0存放高位,R1存放低位,在二进制数的运算中,×2=二进制数左移一位,÷2=二进制数右移一位。

因此本例中÷8=将数向右移3次。

程序流程如图5,程序如下:

程序:

ORG2000H

MOVR0,#00H

M0VR1,#00H

MOVR2。

#08H

LP2:

MOVP1,#0FFH

MOVA,P1

ADDA,R1

JNCLP1

INCR0

LP1:

MOVR1,A

DJNZR2,LP2

MOVR2,#03H图5程序流程图

CLRC

LP3:

MOVA,R0

RRCA

MOVR0,A

MOVA,R1

RRCA

MOVR1,A

DJNZR2,LP3

LP:

SJMPLP

END

注意:

二进制数乘法、除法的计算方法

例3:

从22H单元开始有一无符号数据块,其长度放在20H单元中,求出数据快中最大值,并将其放在21H单元。

分析:

采用比较法,先设A=00H,然后依次取数与A中的值比较,若所比较的数比A大则用所取数替代A中的数。

程序流程如图6,程序如下:

程序:

ORG2000H

CLRA

MOVR2,20H

MOVR1,#22H

LP:

CLRC

SUBBA,@R1

JNCNEXT

MOVA,@R1

SJMPNEXT1

NEXT:

ADDA,@R1

NEXT1:

INCR1

DJNZR2,LP

MOV21H,A

LP1:

SJMPLP1图6程序流程图

END

第三节分支程序设计方法

1、分支结构的理论基础

①计算机具有逻辑判断能力,这是计算机实现分支程序的理论基础;

②条件转移指令和比较指令是计算机实现分支程序的具体体现;

2、分支程序设计过程

①建立数学模型

②选择确定分支条件

③设计程序流程和用适当的语句设计程序

3、分支程序设计方法

1)、无条件转移程序设计

这种程序转移方向是设计者事先安排的,它所使用的转移语句是无条件转移语句。

例如:

在系统诊断程序中,设置,当发生故障时,系统将无条件停机。

2)、条件转移程序设计方法

它是根据执行程序对标志位或累加器或对内部RAM某位的影响结果,决定程序的走向、形成各种分支。

在编写程序时要注意两点:

①选择适合的语句和安排可供判别的条件

②正确选定所用的转移条件和转移目标地址

例如:

警情从单片机的P1.0输入,当系统检测到有警情发生时,立即调用拨号子程序,试编制实现上述过程的程序。

分析:

设拨号程序为TAB,主程序为NAME,则程序如下、程序流程如图所示

程序:

ORG1000H

NAME:

SETBP1.0

JNBNAME

LJMPTAB

TAB:

………

………

END

3)、散转程序设计方法

采用散转指令实现散转

散转指令为:

JMP@A+DPTR图7程序流程图

实现方法:

✧将要转移的地址在程序存储器中按照某种规律编一个表,以便使用散转指令

✧在转移地址处用AJMP或LJMP等指令转到相应的处理程序

举例说明:

根据R7的内容,转向各个操作程序;

R7=0转入OPR0

R7=1转入OPR1

…………………………

R7=N转入OPRN

解;程序流程如图8,程序如下:

JUMP1:

MOVDPTR,#JPTAB1

MOVA,R7

ADDA,R7

JNCNOAD

INCDPH

NOAD:

JMP@A+DPTR

JPTAB1:

AJMPOPR0

AJMPOPR1

……………

AJMPOPRN

END图8程序流程图

第四节查表程序设计

1、查表指令

在80C51单片机汇编语言中有两条查表指令:

MOVCA,@A+DPTR;

MOVCA,@A+PC

由于PC是不断改变的值,通常在查表指令中使用MOVCA,@A+DPTR指令。

2、变量的查表程序设计

1)、单字节查表法

在程序存储器表格中,每个存储单元是一个数据。

例如:

设计一个将十六进制转换成ASCⅡ码的子程序,设十六进制数存放在R0中的低4位,要求将转换后的ASCⅡ码送回R0中。

分析:

0~9的ASCⅡ为30H—39H;AH—FH的ASCⅡ为41H—46H;表格设在程序存储器某一地址为首址的连续单元中存放30H---46H;查表使用:

MOVCA,@A+DPTR。

程序:

ORG2000H

MOVA,R0

ANLA,#0FH

MOVA,#02H

MOVCA,@A+DPTR

MOVR0,A

DB30H,31H,32H

……

END

第五节 子程序设计

1、定义

在程序中反复用到的一段操作,将这一段程序独立编制供主程序调用,这这一段程序称为子程序。

2、子程序设计方法

1)、子程序的设计步骤

①确定子程序的名称,即其入口处的标号

②确定子程序的入口参数及出口参数

③确定所使用的寄存器和存储器单元

④确定子程序的算法、编写源程序

2)、子程序及其调用程序的设计

子程序是满足某一功能的须要而设计的,因此子程序的设计方法与程序的设计方法基本相同,不同的地方是要在程序的开始部分明确子程序入口地址,即子程序名;在出口用RET返回指令。

程序的设计中可以采用寄存器、寄存器间址、堆栈等作为主程序与子程序的数据传送方式。

3、子程序嵌套

子程序与主程序以及子程序与子程序之间的嵌套关系可用下图10表示:

 

 

图10子程序嵌套示意图

4、举例说明

用程序实现C=a2+b2。

设a、b均为小于10。

A存31H单元中,b存32H单元中,把结果C存入33H中单元。

分析:

依题意可以将某数的平方作为一个子程序,计算C=a2+b2只要两次调用子程序即可,程序如下:

ORG2000H

START:

MOVSP,#3FH;设堆栈针

MOVA,31H;取a值

LCALLSQR;计算a2

MOVR1,A

MOVA,32H;取b值

LCALLSQR

ADDA,R1

MOV33H,A

SJMP¥

子程序:

ORG2400H

SQR:

INCA

MOVCA,@A+PC

RET

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2