MCS-51单片机汇编语言的伪指令_第1页
MCS-51单片机汇编语言的伪指令_第2页
MCS-51单片机汇编语言的伪指令_第3页
MCS-51单片机汇编语言的伪指令_第4页
MCS-51单片机汇编语言的伪指令_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

一、MCS-51单片机汇编语言的伪指令伪指令又称汇编程序控制译码指令,属说明性汇编指令。“伪”字体现在汇编时不产生机器指令代码,不影响程序的执行,仅产生供汇编时用的某些命令,在汇编时执行某些特殊操作。MCS-51单片机汇编语言程序设计中,常用的伪指令(七条):ORG—定位伪指令END—结束汇编伪指令EQU—赋值伪指令DB—定义字节指令DW—定义数据字指令DS—定义存储区指令BIT—位定义指令2-3汇编语言程序设计方法(一)

一、MCS-51单片机汇编语言的伪指令伪指令又称汇编程序控制11、起始地址伪指令ORG

ORGaddr16用于规定目标程序段或数据块的起始地址,设置在程序开始处。例:Org0000hljmpmainorg0100hmain:…….2、汇编结束伪指令END告诉汇编程序,对源程序的汇编到此结束。一个程序中只出现一次,在程序的最末尾。例:…………end3、赋值伪指令EQU 告诉汇编程序,将汇编语句操作数的值赋予本语句的标号。格式:标号名称EQU数值或汇编符号“标号名称”在源程序中可以作数值使用,也可以作数据地址、位地址使用。先定义后使用,放在程序开头。例:led_lampequp1.0counterequ100display_addrequ2000h

………….movr0,#countermovdptr,#display_addrmovc,led_lamp程序最末尾指令ljmpmain存放于0000H开始的单元1、起始地址伪指令ORGOR24.定义字节数据伪指令DB

格式:[标号:]DB字节数据表 功能:字节数据表可以是多个字节数据、字符串或表达式,它表示将字节数据表中的数据从左到右依次存放在指定地址单元。 例如:ORG1000H TAB:DB2BH,0A0H,‘A’,2*4; 表示从1000H单元开始的地方存放数据2BH,0A0H,41H(字母A的ASCII码),08H5.定义字数据伪指令DW 格式:[标号:]DW字数据表 功能:与DB类似,但DW定义的数据项为字,包括两个字节,存放时高位在前,低位在后。 例如:ORG1000H DATA:DW324AH,3CH; 表示从1000H单元开始的地方存放数据32H,4AH,00H;3CH(3CH以字的形式表示为003CH)6.定义空间伪指令DS 格式:[标号:]DS表达式 功能:从指定的地址开始,保留多少个存储单元作为备用的空间。如:ORG1000HBUF:DS50;TAB:DB22H;22H存放在1032H单元。表示从1000H开始的地方预留50个(1000H~1031H)存储字节空间。7.数据地址赋值伪指令XDATA

格式:符号名XDATA表达式

功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,可以先使用后定义,并且用于双字节数据定义。 例如:DELAYXDATA0356H

LCALLDELAY;执行指令后,程序转到0356H单元执行6.定义空间伪指令DS3常见的伪指令8.符号定义伪指令EQU或“=”

格式:符号名EQU表达式或符号名=表达式 功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,只能定义单字节数据,并且必须遵循先定义后使用的原则,因此该语句通常放在源程序的开头部分。

例如:

LEN=10

SUMEQU21H … MOVA,#LEN;执行指令后,累加器A中的值为0AH …常见的伪指令8.符号定义伪指令EQU或“=”4题意分析、熟悉并了解汇编语言指令的基本格式和主要特点、明确被控对象对软件的要求、设计出算法等。分配内存工作区及有关端口地址。画出程序流程图。编写较复杂的程序时,画出程序流程图是十分必要的。程序流程图也称为程序框图,是根据控制流程设计的,它可以使程序清晰,结构合理,便于调试。编制汇编源程序。仿真、调试和优化程序。固化程序。二、单片机汇编语言程序设计的基本步骤如下题意分析、熟悉并了解汇编语言指令的基本格式和主要特点、明5顺序程序:顺序程序是最简单、最基本的程序结构,其特点是按指令的排列顺序一条条地执行,直到全部指令执行完毕为止。分支程序:分支程序是通过转移指令对相应条件的判断实现改变程序的执行方向的设计方法。循环程序:在程序中需要反复的执行的程序段,为了避免在程序中多次的编写,可以通过利用条件转移或无条件转移指令来控制程序的执行。三:单片机汇编语言程序主要的几种程序设计方法:顺序程序:顺序程序是最简单、最基本的程序结构,其特点是按指令6一、顺序程序

顺序程序是最简单的程序结构,在顺序程序中没有任何的转移指令,以下是一个典型的例子。例1:字节(双字)加法。将内部RAM30H开始的4个单元中存放的4字节十六进制数和内部RAM40H单元开始的4个单元中存放的4字节十六进制数相加,结果存放到40H开始的单元中。(如0a0ab234fh存放在片内RAM30h开始的4个单元如图所示)30H31H33H32H加数

1存放处4FH23HABHA0H一、顺序程序顺序程序是最简单的程序7题意分析示意图(1)题意分析。题目的要求如图所示。30H31H33H32H加数

1存放处4FH23HABHA0H43H42H41H40H7BH56H80HE8H加数

2存放处43H42H41H40HCAH79H2BH89H相加结果存放处+A0AB234FE880567B892B79CA1题意分析示意图(1)题意分析。30H318ORG 0000H MOV A,30H ADD A,40H MOV 40H,A ;最低字节加法并送结果 MOV A,31H ADDC A,41H MOV 41H,A ;第二字节加法并送结果(2)汇编语言源程序。按照双字节加法的思路,实现4字节加法的源程序如下:ORG 0000H(2)汇编语言源9MOV A,32H ADDCA,42H MOV 42H,A ;第三字节加法并送结果 MOV A,33H ADDC A,43H MOV 43H,A ;第四字节加法并送结果,进位位在CY中SJMP$ ENDMOV A,32H10分支程序分支程序可以分为:单分支双分支多分支分支程序分支程序可以分为:11单分支单分支程序的基本结构:条件成立?程序段下条指令NY单分支单分支程序的基本结构:条件成立?程序段下条指令NY12双分支双分支程序的基本结构:程序段1条件成立?程序段2NY双分支双分支程序的基本结构:程序段1条件成立?程序段2NY13多分支多分支程序的基本结构:程序段2条件N=?程序段N-10N程序段1程序段N1N-1……多分支多分支程序的基本结构:程序段2条件N=?程序段N-1014例:如图所示,设计一段程序实现功能:如果(A)中1的个数为奇数,所有的二极管发光;如果全0,则只让VD0-VD3发光;否则全灭。单分支程序举例例:如图所示,设计一段程序实现功能:如果(A)中1的个数为奇15开始位P=1?(A)=0?P1FFHP100HP10FH结束YYNNORG0000H

JBP,JISH

JZ QUAN

MOVP2,#00HSJMP TOendJISHU:MOVP2,#0FFHSJMPTOendQUAN:MOVP2,#0FHTOend:SJMP$END流程图:源程序:判断奇偶标志位的值判断(A)的值是否为0(A)有偶数个1,二极管灭(A)有奇数个1,二极管全亮(A)为0,VD0-VD3亮注意:在MCS-51单片机中,实现单分支常用的指令有:JZ、JNZ、DJNZ、CJNE、JC、JNC、JB、JNB、JBC等。虚线框代表一个单分支开始位P=1?(A)=0?P1FFHP100HP10F16双分支程序设计例:内部RAM的40H单元和50H单元各存放了一个8位无符号数,请比较这两个数的大小,比较结果用发光二极管显示(LED为低有效):若(40H)≥(50H),则P1.0管脚连接的LED1发光;若(40H)<(50H),则P1.1管脚连接的LED2发光。双分支程序设计17

题意分析:本例是典型的分支程序,根据两个无符号数的比较结果(判断条件),分别点亮相应的发光二极管。比较两个无符号数常用的方法是将两个数相减,然后判断有否借位CY。若CY=0,无借位,则X≥Y;若CY=1,有借位,则X<Y。程序的流程图如下图所示。题意分析:18两数比较流程图X-YX≥Y,LED1点亮CY=1?X<Y,

YNLED2点亮开始结束两数比较流程图X-YX≥Y,LED1点亮CY=1?19源程序如下:XDATA40H;数据地址赋值伪指令DATAYDATA50HORG 0000HMOV A,X ;(X)→A

CLR C ;CY=0 SUBB A,Y ;带借位减法,A-(Y)-CY→A源程序如下:20

JCL1 ;CY=1,转移到

L1 CLR P1.0 ;CY=0,(40H)≥(50H),点亮P1.0连接的LED1SJMPFIN;直接跳转到结束等待L1:CLRP1.1 ;(40H)<(50H),点亮P1.1接的LED2FIN:SJMP$ END

JCL1 21多分支程序举例例:在某单片机系统中,按下一按键,键值(代表哪个键被按下)存放在内部RAM的40H单元内。设计一段程序实现功能:如果(40H)=00H,调用子程序SUB1;如果(40H)=01H,调用子程序SUB2;如果(40H)=02H,调用子程序SUB3;如果(40H)=03H,调用子程序SUB4;如果(40H)=04H,调用子程序SUB5。多分支程序举例例:在某单片机系统中,按下一按键,键值(代表哪22流程图……..(40H)=?调SUB1调SUB2调SUB3调SUB4调SUB5=00H=02H=03H=04H=01H流程图……..(40H)=?调SUB1调SUB2调SUB3调23程序清单……MOV40H,A

MOVDPTR,#TABRLAADDA,40HJMPA+DPTR……

TAB:LCALLSUB1LCALLSUB2LCALLSUB3LCALLSUB4LCALLSUB5设定表格首地址40H×3传送给A

查表转移转移地址表

程序清单……设定表24循环程序循环程序是一种很重要的程序结构。结构流程图一般如下图所示:循环次数够否?循环初始化置循环次数循环体下一条指令NY循环程序循环程序是一种很重要的程序结构。结构流程图一般如下图25例1:设计一段程序实现功能:统计(A)中1的个数,把结果存入30H单元中。循环程序举例解题思路:要统计1的个数,可以利用RLC指令把A带上Cy循环左移,如果移入Cy的是1,就让(30H)加1,重复8次,可以统计出结果。30H00HR208H(循环次数)RLCACy=0?30H(30H)+1(R2)-1=0?下一条指令NYYN……MOV30H,#00HMOVR2,#08HLOOP:RLCAJNCNEXT

INC30HNEXT:DJNZR2,LOOP……30H赋初始值,置循环次数

移位,判断Cy是否为1,为1则30H自加1

判断是否结束

例1:设计一段程序实现功能:统计(A)中1的个数,把结果存入26例:将内部RAM单元中20H单元到2FH单元的数传到外部RAM中的2000H到200FH单元中.R2←10H,R0←20HDPTR←2000HNA←R0DPTR←AR0←(R0)+1DPTR←(DPTR)+1(R2)-1=0?ENDY流程图:例:将内部RAM单元中20H单元到2FH单元的数传到外部RA27源程序:

ORG0000H

MOVR0,#20H

MOVDPTR,#2000H

MOVR2,#10H

LOOP:MOVA,R0

MOVXDPTR,A

INCR0

INCDPTR

DJNZR2,LOOP

SJMP$

END设置进行数据传送的内部和外部RAM的首地址利用ACC进行数据传送设定循环次数RAM地址加“1”循环次数判定源程序:

ORG0000H

28一、MCS-51单片机汇编语言的伪指令伪指令又称汇编程序控制译码指令,属说明性汇编指令。“伪”字体现在汇编时不产生机器指令代码,不影响程序的执行,仅产生供汇编时用的某些命令,在汇编时执行某些特殊操作。MCS-51单片机汇编语言程序设计中,常用的伪指令(七条):ORG—定位伪指令END—结束汇编伪指令EQU—赋值伪指令DB—定义字节指令DW—定义数据字指令DS—定义存储区指令BIT—位定义指令2-3汇编语言程序设计方法(一)

一、MCS-51单片机汇编语言的伪指令伪指令又称汇编程序控制291、起始地址伪指令ORG

ORGaddr16用于规定目标程序段或数据块的起始地址,设置在程序开始处。例:Org0000hljmpmainorg0100hmain:…….2、汇编结束伪指令END告诉汇编程序,对源程序的汇编到此结束。一个程序中只出现一次,在程序的最末尾。例:…………end3、赋值伪指令EQU 告诉汇编程序,将汇编语句操作数的值赋予本语句的标号。格式:标号名称EQU数值或汇编符号“标号名称”在源程序中可以作数值使用,也可以作数据地址、位地址使用。先定义后使用,放在程序开头。例:led_lampequp1.0counterequ100display_addrequ2000h

………….movr0,#countermovdptr,#display_addrmovc,led_lamp程序最末尾指令ljmpmain存放于0000H开始的单元1、起始地址伪指令ORGOR304.定义字节数据伪指令DB

格式:[标号:]DB字节数据表 功能:字节数据表可以是多个字节数据、字符串或表达式,它表示将字节数据表中的数据从左到右依次存放在指定地址单元。 例如:ORG1000H TAB:DB2BH,0A0H,‘A’,2*4; 表示从1000H单元开始的地方存放数据2BH,0A0H,41H(字母A的ASCII码),08H5.定义字数据伪指令DW 格式:[标号:]DW字数据表 功能:与DB类似,但DW定义的数据项为字,包括两个字节,存放时高位在前,低位在后。 例如:ORG1000H DATA:DW324AH,3CH; 表示从1000H单元开始的地方存放数据32H,4AH,00H;3CH(3CH以字的形式表示为003CH)6.定义空间伪指令DS 格式:[标号:]DS表达式 功能:从指定的地址开始,保留多少个存储单元作为备用的空间。如:ORG1000HBUF:DS50;TAB:DB22H;22H存放在1032H单元。表示从1000H开始的地方预留50个(1000H~1031H)存储字节空间。7.数据地址赋值伪指令XDATA

格式:符号名XDATA表达式

功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,可以先使用后定义,并且用于双字节数据定义。 例如:DELAYXDATA0356H

LCALLDELAY;执行指令后,程序转到0356H单元执行6.定义空间伪指令DS31常见的伪指令8.符号定义伪指令EQU或“=”

格式:符号名EQU表达式或符号名=表达式 功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,只能定义单字节数据,并且必须遵循先定义后使用的原则,因此该语句通常放在源程序的开头部分。

例如:

LEN=10

SUMEQU21H … MOVA,#LEN;执行指令后,累加器A中的值为0AH …常见的伪指令8.符号定义伪指令EQU或“=”32题意分析、熟悉并了解汇编语言指令的基本格式和主要特点、明确被控对象对软件的要求、设计出算法等。分配内存工作区及有关端口地址。画出程序流程图。编写较复杂的程序时,画出程序流程图是十分必要的。程序流程图也称为程序框图,是根据控制流程设计的,它可以使程序清晰,结构合理,便于调试。编制汇编源程序。仿真、调试和优化程序。固化程序。二、单片机汇编语言程序设计的基本步骤如下题意分析、熟悉并了解汇编语言指令的基本格式和主要特点、明33顺序程序:顺序程序是最简单、最基本的程序结构,其特点是按指令的排列顺序一条条地执行,直到全部指令执行完毕为止。分支程序:分支程序是通过转移指令对相应条件的判断实现改变程序的执行方向的设计方法。循环程序:在程序中需要反复的执行的程序段,为了避免在程序中多次的编写,可以通过利用条件转移或无条件转移指令来控制程序的执行。三:单片机汇编语言程序主要的几种程序设计方法:顺序程序:顺序程序是最简单、最基本的程序结构,其特点是按指令34一、顺序程序

顺序程序是最简单的程序结构,在顺序程序中没有任何的转移指令,以下是一个典型的例子。例1:字节(双字)加法。将内部RAM30H开始的4个单元中存放的4字节十六进制数和内部RAM40H单元开始的4个单元中存放的4字节十六进制数相加,结果存放到40H开始的单元中。(如0a0ab234fh存放在片内RAM30h开始的4个单元如图所示)30H31H33H32H加数

1存放处4FH23HABHA0H一、顺序程序顺序程序是最简单的程序35题意分析示意图(1)题意分析。题目的要求如图所示。30H31H33H32H加数

1存放处4FH23HABHA0H43H42H41H40H7BH56H80HE8H加数

2存放处43H42H41H40HCAH79H2BH89H相加结果存放处+A0AB234FE880567B892B79CA1题意分析示意图(1)题意分析。30H3136ORG 0000H MOV A,30H ADD A,40H MOV 40H,A ;最低字节加法并送结果 MOV A,31H ADDC A,41H MOV 41H,A ;第二字节加法并送结果(2)汇编语言源程序。按照双字节加法的思路,实现4字节加法的源程序如下:ORG 0000H(2)汇编语言源37MOV A,32H ADDCA,42H MOV 42H,A ;第三字节加法并送结果 MOV A,33H ADDC A,43H MOV 43H,A ;第四字节加法并送结果,进位位在CY中SJMP$ ENDMOV A,32H38分支程序分支程序可以分为:单分支双分支多分支分支程序分支程序可以分为:39单分支单分支程序的基本结构:条件成立?程序段下条指令NY单分支单分支程序的基本结构:条件成立?程序段下条指令NY40双分支双分支程序的基本结构:程序段1条件成立?程序段2NY双分支双分支程序的基本结构:程序段1条件成立?程序段2NY41多分支多分支程序的基本结构:程序段2条件N=?程序段N-10N程序段1程序段N1N-1……多分支多分支程序的基本结构:程序段2条件N=?程序段N-1042例:如图所示,设计一段程序实现功能:如果(A)中1的个数为奇数,所有的二极管发光;如果全0,则只让VD0-VD3发光;否则全灭。单分支程序举例例:如图所示,设计一段程序实现功能:如果(A)中1的个数为奇43开始位P=1?(A)=0?P1FFHP100HP10FH结束YYNNORG0000H

JBP,JISH

JZ QUAN

MOVP2,#00HSJMP TOendJISHU:MOVP2,#0FFHSJMPTOendQUAN:MOVP2,#0FHTOend:SJMP$END流程图:源程序:判断奇偶标志位的值判断(A)的值是否为0(A)有偶数个1,二极管灭(A)有奇数个1,二极管全亮(A)为0,VD0-VD3亮注意:在MCS-51单片机中,实现单分支常用的指令有:JZ、JNZ、DJNZ、CJNE、JC、JNC、JB、JNB、JBC等。虚线框代表一个单分支开始位P=1?(A)=0?P1FFHP100HP10F44双分支程序设计例:内部RAM的40H单元和50H单元各存放了一个8位无符号数,请比较这两个数的大小,比较结果用发光二极管显示(LED为低有效):若(40H)≥(50H),则P1.0管脚连接的LED1发光;若(40H)<(50H),则P1.1管脚连接的LED2发光。双分支程序设计45

题意分析:本例是典型的分支程序,根据两个无符号数的比较结果(判断条件),分别点亮相应的发光二极管。比较两个无符号数常用的方法是将两个数相减,然后判断有否借位CY。若CY=0,无借位,则X≥Y;若CY=1,有借位,则X<Y。程序的流程图如下图所示。题意分析:46两数比较流程图X-YX≥Y,LED1点亮CY=1?X<Y,

YNLED2点亮开始结束两数比较流程图X-YX≥Y,LED1点亮CY=1?47源程序如下:XDATA40H;数据地址赋值伪指令DATAYDATA50HORG 0000HMOV A,X ;(X)→A

CLR C ;CY=0 SUBB A,Y ;带借位减法,A-(Y)-CY→A源程序如下:48

JCL1 ;CY=1,转移到

L1 CLR P1.0 ;CY=0,(40H)≥(50H),点亮P1.0连接的LED1SJMPFIN;直接跳转到结束等待L1:CLRP1.1 ;(40H)<(50H),点亮P1.1接的LED2FIN:SJMP$ END

JCL1 49多分支程序举例例:在某单片机系统中,按下一按键,键值(代表哪个键被按下)存放在内部RAM的40H单元内。设计一段程序实现功能:如果(40H)=00H,调用子程序SUB1;如果(40H)=01H,调用子程序SUB2;如果(40H)=02H,调用子程序SUB3;如果(40H)=03H,调用子程序SUB4;如果(40H)=04H,调用子程序SUB5。多分支程序举例例:在某单片机系统中,按下一按键,键值(代表哪50流程图……..(40H)=?调SUB1调SUB2调SUB3调SUB4调SUB5=00H=02H=03H=04H=01H流程图……..(40H)=?调SUB1调SUB2调SUB3调51程序清单……MOV40H,A

MOVDPTR,#TABRLAADDA,40HJMPA+DPTR

温馨提示

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

最新文档

评论

0/150

提交评论