MCS-51单片机汇编伪指令的用法解析
MCS-51单片机-伪指令
伪指令并不是真正的指令,也不产生相应的机器 码,它们只是在计算机将汇编语言转换为机器码时, 指导汇编过程,告诉汇编程序如何汇编。下面介绍一 些MCS-51汇编程序常用的伪指令。 (1)汇编起始伪指令ORG 格式:[标号:] ORG 16位地址 功能:规定程序块或数据块存放的起始地址。如: ORG 8000H START: MOV A ,#30H …… 该指令规定第一条指令从地址8000H单元开始存 放,即标号START的值为8000H。
(5)定义字命令 DW 格式:[标号:] DW 16位二进制数表 例如, ORG 1000H TAB: DW 1234H , 0ABH , 10 汇编后: (1000H)=12H (1001H ) = 34H (1002H ) = 00H ( 1003H ) = ABH (1004H ) =00H (1005H) =0AH DB、DW伪指令都只对程序存储器起作用,不能 用来对数据存储器的内容进行赋值或进行其它初始化 的工作。
(2)汇编结束伪指令END 格式:[标号:] END [表达式] 功能:结束汇编。 例如: ORG 2000H START: MOV A ,# 00H …… END START 表示标号START开始的程序段结束。 (3)等值指令EQU MOV A,TEST
(4)定义字节指令DB 格式:[标号:] DB 8位二进制数表 DB命令是从指定的地址单元开始,定义若干个8 位内存单元的内容。例如, ORG 1000H TAB; DB 23H,73, “6”, “B” TABl: DB 110B 以上伪指令经汇编以后,将对从1000H开始的若 干内存单元赋值: (1000H)=23H (1001H)=49H (1002H)=36H (1003H)=42H (1004H)=06H 其中36H和42H分别是字符6和B的ASCII码,其 余的十进制数(73)和二进制数(110B)也都换算为 十六进制数了。
5-MCS-51单片机讲义(宏汇编伪指令)
第五章 MCS-51宏汇编伪指令伪指令是对汇编起某种控制作用的特殊命令,但自身并不产生机器码,不属于指令系统,而仅仅为汇编服务的一些指令,因此称为伪指令。
其格式与通常的操作指令一样,并可加在汇编程序的任何地方,但它们并不产生机器指令。
许多伪指令要求带参数,这在定义伪指令时由“表达式”域指出,任何数值与表达式均可以作为参数。
不同汇编程序允许的伪指令并不相同,以下所述的伪指令适用于Intel公司的MASM51系统,但一些基本的伪指令在大部份汇编程序中都能使用,当使用其它的汇编程序版本时,只要注意一下它们之间的区别就可以了。
MASM51中常用的伪指令共分为五大类:1. 程序计数与结束伪指令:ORG、END;2. 符号定义伪指令:EQU、SET、DATA、BYTE、WORD、BIT、ALTNAME、DB、DW、DS;3. 附加文件伪指令:INCLUDE;4. 程序清单格式化伪指令:TITLE、PAGE;5. 一般控制伪指令:LIST、NOLIST、NOCODE。
下面简要介绍一下各条伪指令的功能:5.1 ORG功能:程序计数伪指令,用于设置由表达式决定的初始地址,ORG也称为起始伪指令。
表达式缺省为0。
格式:ORG 16位地址例如:ORG 0100HSTART:MOV A,#05HADD A,#08HMOV 20H,AORG 0100H表示该伪指令下面第一条指令的起始地址是0100H,即“MOV A,#05H”指令的首字节地址为0100H,或标号START代表的地址为0100H。
5.2 END功能:是汇编语言源程序的结束标志。
在END以后所写的指令,汇编程序不再处理。
一个源程序只有一个END指令,放在所有指令的最后。
源程序中若没有END语句,汇编将报出错。
5.3 EQU功能:将一个数值或寄存器名赋给一个指定的符号名。
格式:符号名 EQU 表达式或符号名EQU 寄存器名符号名=表达式例如:DELY EQU 3344HDELY1 EQU 30HPP EQU R0ORG 0000HJMP MAINORG 0050HMAIN:MOV DPTR,#DELY ;(DPTR)=3344HMOV A,#DELY ;(A)=44HMOV A,#DELY1 (A)=30HMOV PP,#10 ;(PP)=10MOV A,PP ;(A)=10NOPEND5.4 SET功能:SET指令的功能与EQU指令类似,不同的是,用SET指令定义过的符号名可被重新定义。
51汇编伪指令详解
51汇编伪指令伪指令是对汇编起某种控制作用的特殊命令,其格式与通常的操作指令一样,并可加在汇编程序的任何地方,但它们并不产生机器指令。
许多伪指令要求带参数,这在定义伪指令时由“表达式”域指出,任何数值与表达式匀可以作为参数。
不同汇编程序允许的伪指令并不相同,以下所述的伪指令仅适用于MASM51系统,但一些基本的伪指令在大部份汇编程序中都能使用,当使用其它的汇编程序版本时,只要注意一下它们之间的区别就可以了。
MASM51中可用的伪指令有:ORG 设置程序起始地址END 标志源代码结束EQU 定义常数SET 定义整型数DATA 给字节类型符号定值BYTE 给字节类型符号定值WROD 给字类型符号定值BIT 给位地址取名ALTNAME 用自定义名取代保留字DB 给一块连续的存储区装载字节型数据DW 给一块连续的存储区装载字型数据DS 预留一个连续的存储区或装入指定字节。
INCLUDE 将一个源文件插入程序中TITLE 列表文件中加入标题行NOLIST 汇编时不产生列表文件NOCODE 条件汇编时,条件为假的不产生清单一、ORG伪指令ORG用于为在它之后的程序设置地址值,它有一个参数,其格式为:ORG 表达式表达式可以是一个具体的数值,也可以包含变量名,如果包含变量名,则必须保证,当第一次遇到这条伪指令时,其中的变量必须已有定义(已有具体的数值),否则,无定义的值将由0替换,这将会造成错误。
在列表文件中,由ORG定义的指令地址会被打印出来。
ORG指令有什么用途呢?指令被翻译成机器码后,将被存入系统的ROM中,一般情况下,机器码总是一个接一个地放在存储器中,但有一些代码,其位置有特殊要求,典型的是五个中断入口,它们必须被放在0003H,000BH,0013H,001BH和0023H的位置,否则就会出错,如果我们编程时不作特殊处理,让机器代码一个接一个地生成,不能保证这些代码正好处于这些规定的位置,执行就会出错,这时就要用到ORG伪指令了。
【转】51单片机汇编伪指令
【转】51单片机汇编伪指令51单片机汇编伪指令0、ALTNAME功能: 这一伪指令用来自定义名字,以替换源程序中原来的保留字,替换的保留字均可等效地用于子程序中。
格式: ALTNAME 保留字自定义名注意: 自定义名与保留字之间首字符必须相同。
1、BIT功能:指令用于将一个位地址赋给指定的符号名。
指令格式:符号名BIT 位地址经BIT 指令定义过的位符号名不能更改。
例如:X_ON BIT 60H ;定义一个绝对位地址X_OFF BIT 24h.2 ;定义一个绝对位地址BIT---定义位命令格式:字符名称 BIT 位地址功能用于给字符名称定义位地址。
SPK BIT P3.7 经定义后,允许在指令中用SPK代替P3.7。
2、BSEG功能:绝对选择指令指令BSEG选择绝对位寻址数据段指令格式如下:BSEG [AT 绝对地址表达式]3、CODE功能:用于将程序存储器ROM 地址赋给指定的符号名。
指令格式:符号名 CODE 表达式例如:RESET CODE 00H4、CSEG功能:绝对选择指令CSEG选择绝对代码段;指令格式如下:CSEG [AT 绝对地址表达式]5、DATA(BYTE)功能:指令用于将一个内部RAM 的地址赋给指定的符号名指令格式:符号名 DATA 表达式数值表达式的值应在0~255 之间,表达式必须是一个简单再定位表达式。
例如:REGBUF DATA (BYTE) 40HPORT0 DATA(BYTE) 80HDATA与BYTE的区别:DATA与BYTE是相类似的伪指令。
当程序运行到DATA伪指令定义的符号名时,该符号名将被显示;而由BYTE定义的符号名不被显示。
6、DB功能:DB伪指令用于定义一个连续的存储区,给该存储区的存储单元赋值。
该伪指令的参数即为存储单元的值,在表达式中对变元个数没有限制,只要此条伪指令能容纳在源程序的一行内,其格式为:标号: DB 表达式只要表达式不是字符串,每一表达式值都被赋给一个字节。
51汇编伪指令详解word资料17页
51汇编伪指令伪指令是对汇编起某种控制作用的特殊命令,其格式与通常的操作指令一样,并可加在汇编程序的任何地方,但它们并不产生机器指令。
许多伪指令要求带参数,这在定义伪指令时由“表达式”域指出,任何数值与表达式匀可以作为参数。
不同汇编程序允许的伪指令并不相同,以下所述的伪指令仅适用于MASM51系统,但一些基本的伪指令在大部份汇编程序中都能使用,当使用其它的汇编程序版本时,只要注意一下它们之间的区别就可以了。
MASM51中可用的伪指令有:ORG 设置程序起始地址END 标志源代码结束EQU 定义常数SET 定义整型数DATA 给字节类型符号定值BYTE 给字节类型符号定值WROD 给字类型符号定值BIT 给位地址取名ALTNAME 用自定义名取代保留字DB 给一块连续的存储区装载字节型数据DW 给一块连续的存储区装载字型数据DS 预留一个连续的存储区或装入指定字节。
INCLUDE 将一个源文件插入程序中TITLE 列表文件中加入标题行NOLIST 汇编时不产生列表文件NOCODE 条件汇编时,条件为假的不产生清单一、ORG伪指令ORG用于为在它之后的程序设置地址值,它有一个参数,其格式为:ORG 表达式表达式可以是一个具体的数值,也可以包含变量名,如果包含变量名,则必须保证,当第一次遇到这条伪指令时,其中的变量必须已有定义(已有具体的数值),否则,无定义的值将由0替换,这将会造成错误。
在列表文件中,由ORG定义的指令地址会被打印出来。
ORG指令有什么用途呢?指令被翻译成机器码后,将被存入系统的ROM中,一般情况下,机器码总是一个接一个地放在存储器中,但有一些代码,其位置有特殊要求,典型的是五个中断入口,它们必须被放在0003H,000BH,0013H,001BH和0023H的位置,否则就会出错,如果我们编程时不作特殊处理,让机器代码一个接一个地生成,不能保证这些代码正好处于这些规定的位置,执行就会出错,这时就要用到ORG伪指令了。
第3章_MCS-51单片机指令系统及汇编语言程序设计2
3. 汇编语言的语句格式是什么?使用标号有什么限制?注释段起什么作用? 答案: MCS-51汇编语言的语句格式应符合下列结构: 【标号:】 操作码 【操作数】【;注释】 标号位于语句的开始,由以字母开头的字母和数字组成,它代表该语句的地址。 标号与操作码之间要用“:”隔开,标号与“:”之间不能有空格,“:”与操 作码之间可以有空格。 注释在语句的最后,以“;”开始,是说明性的文字,与语句的具体功能无关。 4. MCS-51汇编语言有哪几条常用伪指令?各起什么作用? 答案: ORG:汇编程序起始地址,用来说明其后程序段在存储器中存放的起始地址; EQU:赋值指令,用来给变量标号赋予一个确定的数值; DB:定义数据字节,指令按字节数的形式把数据存放在存储单元中; DW:定义数据字,按字(双字节)的形式把数据存放在存储单元中; DS:定义存储区,从指定的地址单元开始,保留一定数量的存储单元; BIT:位定义,其功能是把位地址赋给字符名称; END:汇编结束,表明汇编语言程序结束。
2.顺序程序
顺序程序是指程序中没有使用转移类指令的程序段,机器执行这 类程序时也只需按照先后顺序依次执行,中间不会有任何分支、循环, 也不需要调用子程序。 例:将一个单字节十六进制数转换成BCD码。 解:算法分析。单字节十六进制数在0~255之间,将其除以100后, 商为百位数;余数除以10,商为十位数,余数为个位数。 设单字节数存放在40H,转换后,百位数存放在R0中,十位数存 放在R1中,个位数存放在R2中,具体程序如下: ORG 0030H MOV A, 40H ;将单字节十六进制数送入A中 MOV B,#64H ;将100送入B中, #64H可直接写成#100 DIV AB MOV R0,A ;百位数送R0,余数在B中 XCH A,B ;余数送入A中 MOV B,#0AH ;将10送入B中, #0AH可直接写成#10 DIV AB ;商为十位数,余数为个位数 MOV R1,A MOV R2,B SJMP $
51汇编伪指令详解
51汇编伪指令伪指令是对汇编起某种操纵作用的特殊命令,其格式与通常的操作指令一样,并可加在汇编程序的任何地址,但它们并非产生机械指令。
许多伪指令要求带参数,这在概念伪指令时由“表达式”域指出,任何数值与表达式匀能够作为参数。
不同汇编程序许诺的伪指令并非相同,以下所述的伪指令仅适用于MASM51系统,但一些大体的伪指令在大部份汇编程序中都能利用,当利用其它的汇编程序版本时,只要注意一下它们之间的区别就能够够了。
MASM51中可用的伪指令有:ORG 设置程序起始地址END 标志源代码终止EQU 概念常数SET 概念整型数DATA 给字节类型符号定值BYTE 给字节类型符号定值WROD 给字类型符号定值BIT 给位地址取名ALTNAME 用自概念名取代保留字DB 给一块持续的存储区装载字节型数据DW 给一块持续的存储区装载字型数据DS 预留一个持续的存储区或装入指定字节。
INCLUDE 将一个源文件插入程序中TITLE 列表文件中加入题目行NOLIST 汇编时不产生列表文件NOCODE 条件汇编时,条件为假的不产生清单一、ORG伪指令ORG用于为在它以后的程序设置地址值,它有一个参数,其格式为:ORG 表达式表达式能够是一个具体的数值,也能够包括变量名,若是包括变量名,那么必需保证,当第一次碰到这条伪指令时,其中的变量必需已有概念(已有具体的数值),不然,无概念的值将由0替换,这将会造成错误。
在列表文件中,由ORG概念的指令地址会被打印出来。
ORG指令有什么用途呢?指令被翻译成机械码后,将被存入系统的ROM中,一样情形下,机械码老是一个接一个地放在存储器中,但有一些代码,其位置有特殊要求,典型的是五个中断入口,它们必需被放在0003H,000BH,0013H,001BH和0023H的位置,不然就会犯错,若是咱们编程时不作特殊处置,让机械代码一个接一个地生成,不能保证这些代码正益处于这些规定的位置,执行就会犯错,这时就要用到ORG伪指令了。
3.2 汇编语言程序设计伪指令
2012-2-29
单片机原理及其应用
11
7.2 算术运算程序的设计
+
DA A DA A DA A
图7.3 多位十进制加法算法
2012-2-29
单片机原理及其应用
12
7.2 算术运算程序的设计
例4 多位十进制减法 在第3章的例30中,我们介绍了2位十进制数减 法算法:X-Y=X+100-Y→ X+9AH-Y,把十进 制减法变换成二进制减法(求十进制减数的补码) 和十进制加法2步进行。多位十进制数减法也采用了 同样的算法。设被减数存放在20H开始的内部RAM 存储单元,减数存放在30H开始的存储单元,6位十 进制数减法的程序如下
15
7.2 算术运算程序的设计
例5 多字节数二进制乘法 2个多字节二进制数乘法的算法与按位进行十进 制数乘法相似。把它转换为几个多字节与单字节的 乘法运算,先分别计算出它们的部分积,然后按照 规则把部分积累加计算出乘积。 图7.4为2个16位二进制数相乘的算法原理图。 图中被乘数为X,其高八位和低八位分别存储在XH 和XL单元,乘数为Y,YH和YL分别高八位和低八位 存储单元。
2012-2-29
单片机原理及其应用
16
7.2 算术运算程序的设计
算法分2步进行:首先,分别用乘数的高八位和 低八位与被乘数相乘,计算部分积,分别存储在 (XYH3),(XYH2),(XYH1)和 (XYL3),(XYL2)(XYL1)单 元;在编写程序时,乘法运算可以用子程序调用的 方法实现(第3章例33)。第二步,采用加法运算求 出乘积存储在(XY4)(XY3)(XY2)(XY1)单 元。
MCS-51单片机汇编语言的伪指令-文档资料
Copyright 2006
题意分析:
本例是典型的分支程序,根据两个无符号数的 比较结果(判断条件),分别点亮相应的发光二极 管。
6.定义空间伪指令DS
4.定义字节数据伪指令DB
格式:[标号:] DS 表达式
格式:[标号:] DB 字节数据表
功能:从指定的地址开始,保留
功能:字节数据表可以是多个字节数 多少个存储单元作为备用的空间。
据、字符串或表达式,它表示将字节数据表中的 数据从左到右依次存放在指定地址单元。
如: ORG 1000H
Copyright 2006
JC L1 CLR P1.0
SJMP FIN L1:CLR P1.1 FIN:SJMP $
END
;CY=1,转移到 L1 ;CY=0,(40H)≥(50H),点亮 P1.0 连 接的LED1 ;直接跳转到结束等待
;(40H)<(50H),点亮P1.1接的LED2
7. 数据地址赋值伪指令XDATA
格式:符号名 XDATA 表达式
功能:将表达式的值或某个特定 汇编符号定义为一个指定的符号名,可以 先使用后定义,并且用于双字节数据定义。
例如:
DELAY XDATA 0356H
LCALL DELAY ;执行指令后,程 序转到0356H单元执行
Copyright 2006
BUF: DS 50 ;
例如:ORG 1000H
TAB: DB 22H ;22H存放在1032H单元。
TAB: DB 2BH, 0A0H, ‘A’, 2*4 ;
表示从1000H单元开始的地方存放数 据2BH,0A0H,41H(字母A的ASCII码), 08H
51单片机伪指令和指令详解
ASM-51汇编伪指令一、伪指令分类1.符号定义SEGMENT, EQU, SET, DATA, IDATA, XDATA, BIT, CODE2.存储器初始化/保留DS, DB, DW, DBIT3.程序链接PUBILC, EXTRN, NAME4.汇编程序状态控制ORG, END5.选择段的伪指令RSEG, CSEG, DSEG, XSEG, ISEG, BSEG, USING二、伪指令具体说明1.符号定义伪指令1)SEGMENT伪指令格式:段名SEGMENT 段类型说明:SEGMENT 伪指令说明一个段。
段就是一块程序代码或数据存储器。
允许使用的段类型为:●CODE代码空间●DATA 可以直接寻址的内部数据空间●XDATA外部数据空间●IDATA可以间接寻址的整个内部数据空间●BIT位空间例子:(段符号用于表达式时,代表被连接段的基地址)STACK SEGMENT IDATARSEG STACKDS 10H ;保留16字节做堆栈MOV SP , #STACK-1 ;堆栈指针初始化2)EQU伪指令格式:符号名 EQU 表达式符号名 EQU 特殊汇编符号说明:EQU表示把一个数值或特殊汇编符号赋予规定的名字。
一个表达式赋予一个符号,必须是不带向前访问的表达式。
例子:N27 EQU 27;ACCUM EQU A ;定义ACCUM代替特殊汇编符号A(累加器)HERE EQU $; HERE为当前位置计数器的值3)SET伪指令格式:符号名 SET 表达式符号名 SET 特殊汇编符号说明:SET类似EQU,区别在于可以用另一个SET伪指令在以后对定义过的符号重新定义。
例子:COUNT SET 0COUNT SET COUNT+14)BIT伪指令格式:符号名 BIT 位地址说明: BIT伪指令把一个地址赋予规定的符号名。
该符号类型取段类型BIT.例子:RSEG DATA_SEG;CONTROL: DS 1ALATM BIT CONTROL.0;OPEN_BOARD BIT ALATM+1 ;下一位RESET_BOARD BIT 60H ;下一个绝对的位5)DATA伪指令格式:符号名 DATA 表达式说明:DATA伪指令把片内的数据地址赋予所规定的符号名。
c51汇编伪代码
0013 021020 LJMP INT_1 ;外中断1处理程序
001B ORG 001BH
001B 021030 LJMP TIME_1 ;定时中断1处理程序
0023 ORG 0023H
0023 021040 LJMP SERIAL ;串行口中断程序
START:
The Cybernetic Micro Systems 8051 Family Assembler, Version 3.03 Page 1
08-26-96
1000 = INT_0 EQU 1000H
1010 = TIME_0 EQU 1010H
1020 = INT_1 EQU 1020H
DS 预留一个连续的存储区或装入指定字节。
INCLUDE 将一个源文件插入程序中
TITLE 列表文件中加入标题行
NOLIST 汇编时不产生列表文件
NOCODE 条件汇编时,条件为假的不产生清单
一、ORG
伪指令ORG用于为在它之后的程序设置地址值,它有一个参数,其格式为:
ORG 表达式
;跳转到主程序起始点
0002 021000 LJMP INT_0 ;外中断0处理程序
0005 021010 LJMP TIME_0 ;定时中断0处理程序
0008 021020 LJMP INT_1 ;外中断1处理程序
INT_1 . . . . . . . . . . . . . I 1020
SERIAL. . . . . . . . . . . . . I 1040
START . . . . . . . . . . . . . L 0026
4-1伪指令1
2、汇编结束伪指令 END 告诉汇编程序,对源程序的汇编到此结束。在 END以后所写的指令, 汇编程序都不予以处理。 一个源程序只能有一个END命令。 在同时包 含有主程序和子程序的源程序中, 也只能有一个 END命令, 并放到所有指令的最后, 否则, 就有一部 分指令不能被汇编。 例: …… 程序最末尾 …… end
例如: ORG 2000H TAB1: DB 30H, 8AH, 7FH, 73 DB ′5′,′A′,′BCD′ /*单双引号效果一样 由于ORG 2000H, 所以TAB1的地址为2000H, 因此 以上伪指令经汇编以后, 将对 2000H开始的若干内 存单元赋值: (2000H) = 30H (2001H) = 8AH (2002H) = 7FH (2003H) = 49H ; 十进制数 73 以十六进制数存放 (2004H) = 35H ; 数字 5 的ASCII码 (2005H) = 41H ; 字母A的ASCII码 (2006H) = 42H ; ′BCD′中B的ASCII码 (2007H) = 43H ; ′BCD′中C的ASCII码 (2008H) = 44H ; ′BCD′中D的ASCII码
本节课要点:
有关汇编过程及汇编程序格式说明; 常用汇编伪指令的用法介绍和举例; 程序设计方法(一)
汇编语言概述 1、汇编语言与汇编的概念 机器语言就是用二进制代码指令来编写的程序语 言。机器语言编的程序也称为目的(目标)程序, 装入内存中,执行时最直接、速度最快。 把汇编语言源程序变为二进制代码程序的过程叫 做汇编。汇编有两种方法,即手工汇编和机器汇 编。 实际上,汇编就是把用汇编语言格式写的源程序 翻译成计算机能够识别和执行的目标程序。
15、
CJNE A,#0,feiling MOV 20H,#0FFH sjmp $ feiling: jnc zheng MOV 20H,#0FFH SJMP JS ZHENG: MOV 20H,#0 JS: SJMP $
2.3.6伪指令
其中35H和41H分别是字符5和A的ASCII码,其余 的十进制数(73)和二进制数(101B)也都换算为 十六进制数了。
3、有关概念
源程序:用汇编语言编写的程序。
目标程序:用机器语言表示的程序。 汇编:将汇编语言源程序翻译成目标程序的过程。 汇编程序:计算机内专门用于完成汇编工作的应用 程序。
汇编语言源程序由一系列的指令和伪指令组成。
本节介绍伪指令。 二、伪指令 伪指令又叫汇编控制指令,用来对汇编的过程进 行控制或对某些符号、标号进行赋值。
A2 BIT P1.1
用EQU命令也可以定义位地址变量,但这时所赋 的值应该是具体的位地址值,例如P1.0 就要具体 地用90H来代替。
本节小结
源程序
汇编语言基本概念
目标程序 汇编 汇编程序
ORG汇编起始伪指令
END汇编结束伪指令
伪指令
EQU、DATA字符定义伪指令 DB、DW、DS数据表定义伪指令 BIT位地址定义伪指令
(1503H)=8AH
(1505H)=0AH
7、DS(定义空间命令) ①功能:从指定的地址开始,保留若干个字节内存
空间备用。
②格式:[标号:] DS 表达式 在汇编以后,将根据表达式的值来决定从指定 地址开始留出多少个字节空间,表达式也可以是 一个指定的数值。
③举例:
ORG 1000H
DS 08H DB 30H,8AH 汇编以后,从1000H开始,保留八个字节的内存单 元,然后从1008H开始,按照下一条DB命令给内存单
MCS-51单片机汇编语言概述
1.1 汇编语言的特点
汇编语言是用助记符来表示机器语言的指令代码的。汇编 语言具有如下特点: ① 助记符指令和机器指令一一对应。用汇编语言编写的程序效 率高,占用存储空间小,运行速度快,且能编写出最优化的 程序。 ② 汇编语言与计算机硬件设备密切相关。汇编语言程序能直接 管理和控制硬件设备,直接访问存储器及接口电路,也能处 理中断。 ③ 汇编语言编程比高级语言程序的编写和调试要困难。汇编语 言是面向计算机的,汇编语言的程序设计人员必须对计算机 硬件有相当深入的了解。 ④ 汇编语言缺乏通用性,程序不易移植。各种计算机都有自己 的汇编语言,不同计算机的汇编语言之间不能通用。
① 标号由1~8个ASCII码字符组成,第一个字符必须是字母,其余 字符可以是字母、数字和一些特定字符。
② 不能使用汇编语言中已经定义的符号作为标号,如指令助 记符、 伪指令、专用寄存器的符号名称等均不能用作标号。
③ 标号后必须紧跟一个冒号。
④ 同一个标号在一个程序中只能定义一次,不能重复定义。
⑤ 一条语句可以有标号,也可以没有标号,标号的有无取决于 本程序中的其他语句是否需要访问这条语句。
TBL:
DB
DB
30H 0C0H,0F9H,0A4H 0B0H,99H,92H
第二条伪指令定义了一个常数表,该表的起始地址为 TBL,表中数据按伪指令中数据的顺序排列。
又例如:
DB
“how old are you?”,“A”,“#”
把引号中的字符按ASCII码存于连续的ROM中。
5. DW 定义字命令
其功能是从指定的地址单元开始,定义若干个16位的数据字。 命令格式:
[标号:] DW 字数据表
一个数据字占两个字节。存放时,高8位在前(低地址),低8位在 后(高地址)。例如:
51单片机汇编指令及伪指令小结
51单片机汇编指令及伪指令小结51单片机汇编指令及伪指令小结51单片机汇编指令小结一、数据传送类指令MOV用法MOVA,RnMOVA,@RiMOVA,#dataMOVA,directMOVRn,AMOVRn,#dataMOVRn,directMOV@Ri,AMOV@Ri,#dataMOV@Ri,directMOVdirect,AMOVdirect,@RiMOVdirect,Rn功能寄存器送累加器立即数送累加器直接寻址单元送累加器累加器送寄存器立即数送寄存器直接寻址单元送寄存器字节数122122周期11111121121222222222221111XCH不能出现两个直接寻址地址R0和R1只能寻址片内低128字节或者片外低256字节MOVX必须通过A与外部RAM传值,另一个操作数必须用寄存器间接寻址MOVC必须通过A进行注意事项MOV指令中不能出现两个工作寄存器间接寄存器寻址只能用R0和R1R0和R1只能寻址片内低128字节或者片外低256字节(SFR不能通过工作寄存器寻址)DPTR为唯一16位寄存器内部RAM单元送累加器1累加器送内部RAM单元1立即数送内部RAM单元2直接寻址单元送内部RAM单元累加器送直接寻址单元内部RAM单元送直接寻址单元寄存器送直接寻址单元址单元223223MOVdirect,#data 立即数送直接寻址单元MOVdirect2,direct1直接寻址单元送直接寻MOVDPTR,#data1616位立即数送数据指针3MOVXMOVXA,@Ri外部RAM单元送累加器1(8位地址)MOVXA,@DPTRMOVX@Ri,AMOVX@DPTR,AMOVCMOVCAA+DPTRXCHXCHD,@外部RAM单元送累加器(16位地址)累加器送外部RAM单元(8位地址)累加器送外部RAM单元(16位地址)查表数据送累加器(DPTR为基址)查表数据送累加器(PC为基址)累加器与寄存器交换累加器与内部RAM单元交换累加器与直接寻址单元交换累加器与内部RAM单元111111121MOVCA,@A+PCXCHA,RnXCHA,@RiXCHA,directXCHDA,@Ri低4位交换PUSH&POPPOPdirectPUSHdirect栈顶弹出指令直接寻址单元直接寻址单元压入栈顶2222用ACC表示累加器堆栈在用户RAM区二、算术运算类指令指令ADD用法ADDA,RnADDA,@RiADDA,directADDA,#dataADDCADDCA,RnADDCA,@RiADDCA,#dataADDCA,directINCINCAINCRnINCdirectINC@Ri功能累加器加寄存器累加器加内部RAM单元累加器加直接寻址单元累加器加立即数累加器加寄存器和进位标志累加器加内部RAM单元和进位标志累加器加立即数和进位标志累加器加直接寻址单元和进位标志累加器加1寄存器加1直接寻址单元加1内部RAM单元加1字节数112211221121周期111111111111注意事项ADD可以产生进位,但不考虑进位加法类指令只能通过A进行加法类的和超过8位时,CY置1,OV置1 ADDC可以产生进位,也考虑进位除了INCA改变奇偶标识位,其他都不改变PSW(不改变CY)INCDPTRDASUBBDAASUBBA,RnSUBBA,@RiSUBBA,#dataSUBBA,directDECDECADECRnDEC@RiDECdirectMUL&MULABDIV数据指针加1十进制调整累加器减寄存器和进位标志累加器减内部RAM单元和进位标志累加器减立即数和进位标志累加器减直接寻址单元和进位标志累加器减1寄存器减1内部RAM单元减1直接寻址单元减1累加器乘寄存器B1111221112121111111114结果存储为BAA、B为单字节无符号数乘积大于255时(结果中B不为0),OV置1CY总为0结果储存为:商A,余数B除数为0时,OV置1与INC类似DIVAB累加器除以寄存器B14三、逻辑运算类指令指令ANL用法ANLA,RnANLA,@RiANLA,#dataANLA,directANLdirect,AANLdirect,#dataORLORLA,RnORLA,@RiORLA,#dataORLA,direct功能累加器与寄存器累加器与内部RAM单元累加器与立即数累加器与直接寻址单元直接寻址单元与累加器直接寻址单元与立即数累加器或寄存器累加器或内部RAM单元累加器或立即数累加器或直接寻址单字节数1122231122周期注意事项111111111元ORLdirect,AORLdirect,#dataXRLXRLA,RnXRLA,@RiXRLA,#dataXRLA,directXRLdirect,AXRLdirect,#dataRLARRARLCARRCACPLACLRA 直接寻址单元或累加器直接寻址单元或立即数累加器异或寄存器累加器异或内部RAM单元累加器异或立即数累加器异或直接寻址单元直接寻址单元异或累加器直接寻址单元异或立即数累加器左循环移位累加器右循环移位累加器连进位标志左循环移位累加器连进位标志右循环移位累加器取反累加器清零2311222311111111111112111111边上一位移入CY,另一侧一位从CY移入ANL、ORL、XRL均可以对接口进行操作四、控制转移类指令类指令用法ACALLaddr11功能2KB范围内绝对调用字节数2周期注意事项2Addr0~10赋给PC0~10PC11~15不变调用时,地址分两次压栈调用时,地址分两次压栈A+DPTR赋给PCLCALLaddr16AJMPaddr11LJMPaddr16SJMPrelJMP@A+DPTRRETRET1JCrel64kb范围内长调用2KB范围内绝对转移64KB范围内长转移-128B~127B相对短转移相对长转移子程序返回中断返回判断CY=1转移323211122222222JNCrelJZrelJNZrelCJNEA,#data,relCJNEA,direct,relCJNERn,#d ata,rel判断CY=0转移累加器为零转移累加器非零转移累加器与立即数不等转移累加器与直接寻址单元不等转移寄存器与立即数不等转移22233332222222221影响CY:前数>=后数,CY=0,反之CY=1CJNE@Ri,#data,relRAM单元与立即数不等转移五、位操作类指令MOVMOVC,bitMOVbit,C直接寻址位送CC送直接寻址DJNZRn,relDJNZdirect,relNOP直接寻址单元减1不为零转移空操作寄存器减1不为零转移2312212Bit为RAM中20H~2FH中128个可寻址位,或SFR中可寻址储存单元必须通过C传送SETBJBbit,relJNBbit,relJBCbit,relSETBCSETBbit(bit)为1则转移并清零3331222211逻辑操作与字节中的一致51汇编常用伪指令16位地址:此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址;2.【标号】DB字节数据项表:奖项表中的字节数据存放到从标号开始的连续字节单元中。
伪指令
MCS-51单片机常用伪指令及常见出错表一)符号定义伪指令符号定义名用法说明EQU 为常量,符号名等定义符号化常量名符号名不能重名定义 = 为常量,符号名等定义符号化常量名符号名不能重名定义 DATA 用来为一个字节类型的符号定值符号名不能重名定义 BYTE 用来为一个字节类型的符号定值符号名不能重名定义 WORD 用来为一个字类型的符号定值符号名不能重名定义BIT 用来定义一个字位类型符号名不能重名定义SET 用来定义整数类型的符号名符号名可重名定义1. EQU(=)指令EQU 指令用于将一个数值或寄存器名赋给一个指定符号名。
指令格式:符号名EQU(=)表达式符号名EQU(=)寄存器名经过EQU 指令赋值的符号可在程序的其它地方使用,以代替其赋值。
例如:MAX EQU 2000则在程序的其它地方出现MAX,就用2000 代替。
2. SET 指令SET 指令类似于EQU 指令,不同的是SET 指令定义过的符号可重定义。
指令格式:符号名SET 表达式符号名SET 寄存器名例如:MAX SET 2000MAX SET 30003. BIT 指令BIT 指令用于将一个位地址赋给指定的符号名。
指令格式:符号名BIT 位地址经BIT 指令定义过的位符号名不能更改。
例如:X_ON BIT 60H ;定义一个绝对位地址X_OFF BIT 24h.2 ;定义一个绝对位地址4. DATA(BYTE)指令DATA 指令用于将一个内部RAM 的地址赋给指定的符号名指令格式:符号名DATA 表达式数值表达式的值应在0~255 之间,表达式必须是一个简单再定位表达式。
例如:REGBUF DATA(BYTE) 40HPORT0 DATA(BYTE) 80HDATA与BYTE的区别: DATA与BYTE是相类似的伪指令。
当程序运行到DATA伪指令定义的符号名时,该符号名将被显示;而由BYTE定义的符号名不被显示。
5. XDATA 指令XDATA 指令用于将一个外部RAM 的地址赋给指定的符号名。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MCS-51单片机汇编伪指令的用法解析
1、DS ---预留存储区命令
格式:〔标号:〕DS 表达式值
其功能是从指定地址开始,定义一个存储区,以备源程序使用。
存储区预留的存储单元数由表达式的值决定。
TMP:DS 1
从标号TEP地址处开始保留1个存储单元(字节)。
2、BIT---定义位命令
格式:字符名称BIT 位地址
其功能用于给字符名称定义位地址。
SPK BIT P3.7
经定义后,允许在指令中用SPK代替P3.7。
3、USING指令
USING指令通知汇编器使用8051的哪一个工作寄存器组。
格式:USING 表达式(值必须为0-3,默认值为0。
)
USING 0
使用第0组工作寄存器。
4、SEGMENT指令
SEGMENT 指令用来声明一个再定位段和一个可选的再定位类型。
格式:再定位段名SEGMENT 段类型〔再定位类型〕
其中,“再定位段名”用于指明所声明的段。
“段类型”用于指定所声明的段将处的存储器地址空间。
可用的段类型有CODE、XDATA、DATA、IDATA和BIT。
STACK_SEG SEGMENT IDATA
DATA_SEG SEGMENT DATA
5、RSEG---再定位段选择指令。