51汇编伪指令(定义系统堆栈1).

合集下载

伪指令和汇编语言

伪指令和汇编语言

从指定单元开始,定义若干个字(双字节数)。
例如:
ORG 8000H
HETAB:
DW 7234H,8AH,10
汇编后则:
(8000H)=72H (8001H)=34H (8002H)=00H (8003H)=8AH (8004H)=00H (8005H)=0AH
03 常用旳伪指令
DS:定义空间命令
“DS <体现式>定义空间命令 格式: 标号: DS 数据或字符体现式 从指定单元开始,由数据或体现式 拟定保存若干个字节内存空间备用。 例如: ORG 8000H DS 08H DB 30H,8AH 即8000H~8007H单元保存备用 (8008H)=30H (8009H)=8AH
DATA和EQU旳区别在于DATA定义旳字符名称
作为标号登记在符号表中,故可先使用后定义;
而用EQU定义旳字符名称必须先定义后使用,其
原因是EQU不定义在符号表中。
03 常用旳伪指令
BIT:位地址符号命令

BIT<体现式>位地址符号命令
格式:
字符名称:
BIT 位地址
该命令把地址赋予标号段要求旳字符名称。
地址,位地址或立即数。
例如:
ORG 8000H
AA: EQU R6
;AA与R6等值
MOV A,AA
;A(R6)

03 常用旳伪指令
DATA:数据地址赋值命令
“ DATA<体现式>数据地址赋值命令 格式:
字符名称:
DATA 数据或体现式
此命令把数据地址或代码地址赋予标号段要求旳字符名称。
例如:INDEXJ DATA 8389H
定义了INDEXJ这个字符名称旳地址为8389H,主要用于

5-MCS-51单片机讲义(宏汇编伪指令)

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指令定义过的符号名可被重新定义。

《汇编语言》学习笔记6——伪指令

《汇编语言》学习笔记6——伪指令

《汇编语⾔》学习笔记6——伪指令1.伪指令⼜称伪操作,即不能像汇编指令⼀样⽣成可执⾏的⼆进制机器代码,⽽是在汇编程序对汇编语⾔源程序进⾏汇编(编译)期间,由汇编程序执⾏。

它与C中的说明性语⾔的含义类似,起到说明作⽤,⽤来指出程序分段、数据定义、存储分配、程序开始和结束等信息,这些信息在汇编(编译)完成后就不⽤了。

但程序中没伪指令,则系统就⽆法完成编译。

2.段定义伪指令:⽤来定义各种类型的段 1.格式:段名 SEGMENT [类型参数] ...... 段名 ENDS 1.其中SEGMENT和ENDS必须成对出现,表⽰段的开始和结束。

⼀般的,段名和段的意义⼀致,便于识别。

2.段名实际就是段地址,在汇编过程中,系统给出具体的地址值,⼀个段必须有⼀个名字来标识。

3.参数是可选项(可有可⽆),⽤于指出段的边界、段的组合、类别标识,⼀般⽤于多模块程序设计中。

2.类型参数 1.定位类型 PARA 该段的起始地址必须为⼩段的⾸地址,即起始地址的16进制数最低位为0 BYTE 该段可以从任意地址开始 WORD 该段必须从字边界开始,即起始地址为偶数 DWORD 该段必须从双字边界开始,即起始地址的16进制数为最低应为4的倍数 PAGE 该段必须从页边界开始,即起始地址的16进制数最低两位为00(能被256整除) 若不指定定位类型,系统默认为PARA 2.组合类型 PRIVATE 该段为私有段,连接时不与其他同名段合并 PUBLIC 连接时可与其他模块中的同名段按顺序连接成⼀个段 COMMON 表⽰该段与其他模块中的同名段有相同的起始地址,如果连接将产⽣覆盖,连接后段的长度为同名段中的最长者 STACK 表⽰该段为堆栈段 AT 表达式 该段直接定位在表达式指出的位置上 若不指定组合类型,默认为PRIVATE 3.类型标识:在引号中给出段的类型名。

在连接时,类别标识相同的段放在连续的存储区中。

(如:"STACK"⽤啦标识该段为堆栈段) 4.END:结束标记,若碰到伪指令END则停⽌编译3.ASSUME伪指令:⽤于指明段寄存器与段的对应关系 1.格式:ASSUME 段寄存器:段名,[段寄存器:段名,段寄存器:.....]【[]中标识可选项】 2.除了代码段寄存器CS不能⽤MOV指令赋值外,其他段寄存器都可⽤MOV指令进⾏初始化。

汇编指令、伪指令大全

汇编指令、伪指令大全

MOV指令为双操作数指令,两个操作数中必须有一个是寄存器.MOV DST , SRC // Byte / Word执行操作: dst = src1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器).2.立即数不能直接送段寄存器3.不允许在两个存储单元直接传送数据4.不允许在两个段寄存器间直接传送信息PUSH入栈指令及POP出栈指令: 堆栈操作是以"后进先出"的方式进行数据操作.PUSH SRC //Word入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器.入栈时高位字节先入栈,低位字节后入栈.POP DST //Word出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器.执行POP SS指令后,堆栈区在存储区的位置要改变.执行POP SP 指令后,栈顶的位置要改变.XCHG(eXCHanG)交换指令: 将两操作数值交换.XCHG OPR1, OPR2 //Byte/Word执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp1.必须有一个操作数是在寄存器中2.不能与段寄存器交换数据3.存储器与存储器之间不能交换数据.XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码.XLAT (OPR 可选) //Byte执行操作: AL=(BX+AL)指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码.LEA(Load Effective Address) 有效地址传送寄存器指令LEA REG , SRC //指令把源操作数SRC的有效地址送到指定的寄存器中.执行操作: REG = EAsrc注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器MOV BX , OFFSET OPER_ONE 等价于 LEA BX , OPER_ONEMOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中LDS(Load DS with pointer)指针送寄存器和DS指令LDS REG , SRC //常指定SI寄存器。

51汇编伪指令详解

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伪指令了。

单片机伪指令和指令详解

单片机伪指令和指令详解

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伪指令把片内的数据地址赋予所规定的符号名。

51汇编伪指令详解word资料17页

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伪指令了。

汇编器伪指令

汇编器伪指令

汇编器伪指令本章讲解汇编器的伪指令。

说明如何定义符号和怎样控制代码和数据在程序存储器中的位置。

简介Ax51汇编器有一些伪指令,可以让我们定义符号值,预留和初始化内存,以及控制代码的位置。

不要把伪指令与指令相混淆。

伪指令不产生可执行的代码,除DB,DW和DD之外,它们对代码存储器的内容没有直接的影响。

这些伪指令改变汇编器的状态,定义用户符号,以及添加信息到目标文件。

下表是对汇编器伪指令的一个汇总。

关于每条伪指令的详细信息,请点击相应链接查看。

伪指令 格 式 说 明BIT符号 BIT 位地址 在位数据空间定义一个位地址。

BSEG BSEG [AT 绝对地址] 在位地址空间定义一个绝对地址段。

CODE符号 CODE 代码地址 为代码空间内的一个指定地址分配一个符号名。

CSEG CSEG [AT 绝对地址] 在代码地址空间定义一个绝对地址段。

DATA符号 DATA 数据地址 给一个指定的片内数据地址分配一个符号名。

DB [标号:] DB 表达式[, 表达式...]定义一列字节型数值。

DBIT[标号:] DBIT 表达式 在位单元中预留一个空间。

DD [标号:] DD 表达式[, 表达式...]定义一列双字型数值。

DS[标号:] DS 表达式 在字节空间预留空间。

DSB[标号:] DSB 表达式 在字节空间预留空间。

DSD[标号:] DSD 表达式 在双字空间预留空间。

DSEG DSEG [AT 绝对地址] 在间接寻址内部数据空间定义一个绝对段。

DSW[标号:] DSW 表达式 在字空间预留空间;增加当前段的位置计数器。

DW [标号:] DW 表达式[, 表达式...]定义一列字数值。

END END 指示程序的结束。

EQU EQU 表达式 永久设置符号值。

__ERROR____ERROR__ 文本 产生一条标准的出错信息。

罗亩按:前后均是两条下划线(_)。

EVEN EVEN 确保变量的字对齐。

EXTRN EXTRN 存储空间类型 [:数据类型] (符号 [, ...])定义在当前模块中引用的在其它模块中定义的符号。

MCS-51单片机汇编伪指令的用法解析

MCS-51单片机汇编伪指令的用法解析

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---再定位段选择指令。

keilA51汇编语言伪指令

keilA51汇编语言伪指令
KeilA51单片机汇编语言伪指令
A51伪指令即控制指令允许定义符号的值,初始化存储区,控制代码的位置。 伪指令不应与处理器指令或汇编指令混淆。控制指令不生成可执行代码,并且除 DB,DD 和 DW 语句外,他没有直接影响代码存储器的内容。这些控制指令改 变汇编的状态,定义用户符号,并添加目标文件信息。 伪指令可分为以下类别: 一、地址控制类: 1、EVEN 强制地址计数器到下一个偶数地址。 EVEN 指令设置程序计数器 PC 到下一个偶数地址(如果当前位置计数器是奇数 )。这可以用来确保下一个 声明字边界上的对齐。如有必要,汇编器将创建1个字节的间隙。间隙字节的内 容是不确定的。 注意:该指令只有 A51汇编器可使用。 例:MYDATA: SEGMENT DATA WORD
int10 PROC INTERRUPT I10=10 USING MyBank2 MOV MyBank2,R0 SCXT CP,#MyBank2 NOP ; ... POP CP RET
int10 ENDP
proc1 PROC USING MyBank1 MOV MyBank1,R0 SCXT CP,#MyBank1 NOP ; ... POP CP RET
2、EXTERN 同 EXTRN(A51专用)
3、NAME 指定当前单元的名称
格式:NAME modulename
Name 指令是汇编单元的名称嵌入目标文件,如果在目标文件中没有 NAME 指铃,文件名
将被作为该单元的名称
4、PUBLIC 声明符号可以被其他文件使用
格式:PUBLIC symbol , symbol ...
EXTRN class:type (symbol <[>, symbol ...<]>)

第5章51汇编伪指令 优质课件

第5章51汇编伪指令 优质课件

www,
5.1 汇编语言的程序与语句
ASSUME语句来完成段分 配时,要注意以下几点:
1、在一个代码段中,如果没有另 外的ASSUME语句重新设置,原来 设置的ASSUME语句一直有效。 2、每条ASSUME语句可设置1-6个 段寄存器。
3、可用NOTHING删除以前的设置 例如:ASSUME ES:NOTHING 删除ES与某段的联系 ASSUME NOTHING 删除全部6 个段寄存器的设置。
www,
5.1 汇编语言的程序与语句
2、指定段寄存器伪指令
硬件系统在读取指令时,自动到代码段中读取,读取数据时自动到数据段。那么 CPU怎么知道哪个是代码段、哪个是数据段呢?指定段寄存器伪指令可以解决这 个问题。
格式:ASSUME CS: 段名
功能:建立逻辑段与代码段寄存器CS之间的对应关系。
4、段寄存器的装入:任何指令执 行时都将用到CS、DS、ES、SS 寄存器段基址才能形成真正的物理 地址。在执行这些指令之前,必须 先设置这些段寄存器的值,即段基 址。
www,
5.2 汇编语言的伪指令
5.2.1符号定义伪指令
1、表达式赋值伪操作EQU 指令格式:
符号名 EQU 表达式
MOV AX,MY-DATA MOV DS,AX
以上必须先将MY-DATA的段基址装入AX寄存器,然后再通过 AX装入DS,不能直接将MY-DATA的段基址装入DS寄存器。
Hale Waihona Puke www,5.1 汇编语言的程序与语句
3、汇编语言源程序完整段结构
•NAME 模块名
•EQU 定义语句
•。。。
;指令串或变量定义
•段名 ENDS
功能:定义当前段的名字与具体内容,同时规定段在存储器中的

ASM51伪指令

ASM51伪指令

ASM51宏汇编本文给出了ASM5l宏汇编伪指令的简要说明及SUPER系列仿真器调试ASM51程序时有关的汇编控制项,目的是使用户快速地掌握宏汇编语言ASM51的一般方法,更复杂的用法请参阅有关汇编语言的手册。

1.1 ASM51基本成份·字符集:ASCII字符集·数字:二进制数,后缀为B八进制数,后缀为O或Q十进制数,后缀为D或无后缀十六进制数,后缀为H·符号:第一字符必须是字母‘?’或‘—’,最多31个字符·定位计数器:用$表示当前定位计数器的值·字符串:字符串必须是用单引号(’)括起来的可打印的ASCII字符序列串长度控制在0—255之内,字符串可用DB伪指令初始化。

1.2表达式和基本操作数1.2.1表达式表达式用于定义常数,表达式有三种属性:1.类型——表达式所属段的类型。

2.可重定位性——表达式分为绝对的表达式和可重定位的表达式。

绝对的表达式的值在汇编期间计算,而可重定位的表达式的值在连接定位期间计算。

绝对的表达式可出现在程序的任意位置。

唯一合法的可重定位表达式是一个可重定位的符号或一个可重定位的符号加上一个常数。

3.值——表达式的值以十六位二进制的补码形式表示。

表示式值或在汇编期间计算或在连接定位期间计算。

·1.2.2基本操作数ASM51有以下五种基本操作数:1.符号——符号用来表示地址和常数2.数字——数字可用二、八、十或十六进制表示3.$——表示定位计数器的当前值4.STACK——预定义的变量STACK表示栈底5.串——只有一或二个字符的串可用作操作数,一个字符的串被认为是值等于其ASCII码的字节常数,二个字符的串被认为是字常数。

1.2.3地址空间8051的地址空间有五种:·可被直接寻址的数据地址空间(DATA)·位地址空间(BIT)·外部的数据地址空间(XDA TA)·程序地址空间(CODE)·可间接寻址的数据空间(1DATA)在某些情况下,同一个数值对全部五种地址空间都是有效的地址。

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 表达式只要表达式不是字符串,每一表达式值都被赋给一个字节。

计算表达式值时按16位处理,但其结果只取低8位,若多个表达式出现在一个DB伪指令中,它们必须以逗号分开。

51单片机堆栈操作指令举例说明

51单片机堆栈操作指令举例说明

什么是堆栈?MCS-51单片机的堆栈怎样设置的?答:程序设计时,往往需要一个后进先出的RAM区,以保存CPU的现场。

这种后进先出的缓冲区,就称为堆栈。

MCS-51单片的堆栈原则上设在内部RAM的任意区域内。

但是,一般设在31H~7FH的范围之间,栈顶的位置由栈指针SP指出。

51单片机堆栈操作指令举例说明时间:2009-03-02 18:46来源:未知作者:牛牛点击:149次这4类指令的作用是把直接寻址单元的内容传送到堆栈指针SP所指的单元中,以及把SP 所指单元的内容送到直接寻址单元中。

这类指令只有两条,下述的第一条常称为入栈操作指令,第二条称为出栈操作指令。

需要指出的是,单片机开机复位后,(SP)默认为07H,但一般都需要重新赋值,设置新的SP首址。

入栈的第一个数据必须存放于SP+1所指存储单元,故实际的堆栈底为SP+1所指的存储单元。

堆栈操作指令有两条: PUSH direct POP direct 第一条指令称之为推入,就是将direct中的内容送入堆栈中,第二条指令称之为弹出,就是将堆栈中的内容送回到direct中。

推入指令的执行过程是,首先将SP中的值加1,然后把SP 中的值当作地址,将direct中的值送进以堆栈操作指令有两条:PUSH directPOP direct第一条指令称之为推入,就是将direct中的内容送入堆栈中,第二条指令称之为弹出,就是将堆栈中的内容送回到direct中。

推入指令的执行过程是,首先将SP中的值加1,然后把SP中的值当作地址,将direct中的值送进以SP中的值为地址的RAM单元中。

例:MOV SP,#5FHMOV A,#100MOV B,#20PUSH ACCPUSH B则执行第一条PUSH ACC指令是这样的:将SP中的值加1,即变为60H,然后将A中的值送到60H单元中,因此执行完本条指令后,内存60H单元的值就是100,同样,执行PUSH B时,是将SP+1,即变为61H,然后将B中的值送入到61H单元中,即执行完本条指令后,61H单元中的值变为20。

汇编语言伪指令

汇编语言伪指令

汇编语言伪指令在汇编语言程序里,有一些特殊的助记符,这些助记符与指令系统的助记符不同,它们没有对应的机器码。

这些助记符在源程序中的作用是完成汇编程序的各种准备工作,包括定义变量、分配数据存储空间、控制汇编过程、定义程序入口等。

它们仅仅在汇编的过程中起作用,一旦汇编过程结束,它们的使命也就完成了。

这些助记符称为伪指令,它们所完成的操作称为伪操作。

不同汇编器的伪指令可能存在少量的区别,并非所有的伪指令在任何编译器上都能被识别。

一、符号定义伪指令符号定义(Symbol Definition)伪指令用于定义ARM汇编程序中的变量,对变量赋值和定义寄存器别名等,如表1所列。

表1 符号定义伪指令实例:GBLL P_ON ; 定义全局逻辑变量P_ON P_ON SETL {TRUE} ; 给全局逻辑变量P_ON赋值为真LCLA NUM ; 定义局部数字变量NUM NUM SETA 100 ; 给全局数字变量NUM赋值为100RegList RLIST {R0-R5,R8,R10} ; 定义一个寄存器列表RegList,可用微处理器系统结构与嵌入式系统设计(第3版)2; LDM/STM指令访问该列表二、数据定义伪指令数据定义(Data Denfinition)伪指令一般用于为特定的数据分配存储单元,同时完成对已分配存储单元的初始化工作。

数据定义伪指令如表2所示。

表2 数据定义伪指令从使用方法上来讲,数据定义伪指令可以分为以下3类。

1.SPACE伪指令SPACE用于分配一片连续的存储区,并初始化为0。

其中表达式中的数字表示分配的字节数。

SPACE也可以用%代替。

实例:DataSpace SPACE 100 ; 分配连续100字节的存储单元并初始化为0 2.MAP和FIELD伪指令MAP和伪指令FIELD经常结合在一起使用。

MAP用于定义一个结构化的内存表的首地址,可以用“^”替代。

FIELD用于定义一个结构化的内存表中的数据域,可以用“#”代替。

51单片机伪指令和指令详解

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汇编伪代码

c51汇编伪代码
0013 ORG 0013H
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
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机汇编伪指令命令按字母排序:1、 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 40H PORT0 DATA(BYTE 80HDATA 与 BYTE 的区别:DATA 与 BYTE 是相类似的伪指令。

当程序运行到DATA 伪指令定义的符号名时, 该符号名将被显示;而由 BYTE 定义的符号名不被显示。

6、DB功能:DB伪指令用于定义一个连续的存储区,给该存储区的存储单元赋值。

该伪指令的参数即为存储单元的值, 在表达式中对变元个数没有限制,只要此条伪指令能容纳在源程序的一行内,其格式为: 标号:DB 表达式只要表达式不是字符串,每一表达式值都被赋给一个字节。

计算表达式值时按 16位处理,但其结果只取低 8位, 若多个表达式出现在一个 DB 伪指令中,它们必须以逗号分开。

表达式中有字符串时,以单引号“ ' ”作分隔符, 每个字符占一个字节,字符串不加改变地被存在各字节中,并不将小写字母转换成大写字母。

例如:DB 00H 01H 03H 46HDB 'This is a demo!'7、DBIT功能 :在内部数据区的 BIT 段以位为单位保留存储空间。

指令格式:[标号:] DBIT 数值表达式其操作类似于 DB 。

8、 DS功能 :DS为定义存储内容的伪指令,用它定义一个存储区,并用指定的参数填满该存储区。

DS 伪指令包含两个变元, 第一个变元定义了存储区的长度的字节数,在汇编时,汇编程序将跳过这些单元把其它指令汇编在这些字节之后,因此在使用DS 伪指令时第一个变元不可活力第二个变元表示在这些单元中真入什么值,第二个变元可以活力活力时这些字节将不处理。

下例中 0173处有一条 DS 9,则空出 9个字节,下一第指令被汇编到 017C 处;在 017C 处空出 1BH 个单元,在这些字节中被 27H 所填充。

DS 指令的格式如下:标号:DS 表达式1,表达式2表达式1定义了存储区的长度(以字节为单位。

这个变元不能省略。

表达式2是可选择的,它的值低8位用以填入所定义的存储区。

若省略则这部分存储单元不处理。

例:0000 04 INC A0001 DS 9000A 04 INC A000B DS 1BH,27H0026 04 INC ADS ---预留存储区命令格式:〔标号 :〕 DS 表达式值其功能是从指定地址开始,定义一个存储区,以备源程序使用。

存储区预留的存储单元数由表达式的值决定。

TMP: DS 1 从标号 TEP 地址处开始保留 1个存储单元(字节。

9、DSEG功能:绝对选择指令 DSEG 内部绝对数据段指令格式如下:DSEG [AT 绝对地址表达式]10、 DW功能:DW 为以字节为单元(十六位二进制来给一个的存储区赋值,其格式为: 标号:DW 表达式例如:0000 3035 D46B DW 12341,54379,10110100101110B11、 END功能:END 语句标志源代码的结束,汇编程序遇到 END 语句即停止运行。

若没有 END 语句,汇编将报错。

END 语句有一个参数,可以是数值 0,也可以是表达式, 其格式是:标号 : END 表达式它的值就是程序的地址并且作为一个特殊的记录写入 HEX 文件。

若这个表达式省略, HEX 文件中其值就是 0。

12、EQU(=存器名赋给一个指定符号名。

指令格式: 符号名 EQU(=表达式符号名 EQU(= 寄存器名经过 EQU 指令赋值的符号可在程序的其它地方使用,以代替其赋值。

例如:MAX EQU 2000则在程序的其它地方出现 MAX,就用 2000 代替。

表达式必须是一个简单再定位表达式。

用 EQU 指令赋值以后的字符名,可以用作数据地址、代码地址、位地址或者直接当做一个立即数使用。

13、EXTRNEXTRN 是与 PUBLIC 配套使用的,要调用其它模块的函数,就必须先在模块前声明。

指令格式:EXTRN 段类型(符号,符号······例如:EXTRN CODE (TONGXING,ZHUANHUAN调用外部 TONGXING 和 ZHUANHUAN 程序。

14、IDATAIDATA 指令用于将一个间接寻址的内部 RAM 地址赋给指定的符号名。

指令格式:符号名 IDATA 表达式例如:FULLER IDATA 60H15、IF条件伪操作格式:IF 表达式[ 程序块 1 ][ ELSE ][ 程序块 2 ]ENDIF当 IF 指令中的表达式为真时,被汇编的代码段是程序块 1;当 IF 指令中的表达式为假时,被汇编的代码段是程序块 2。

在一个条件结构中,仅有一个代码段被汇编,其它的则被忽略。

16、INCLUDE功能: 利用此伪指令可将一个源文件插入到当前源文件中一起汇编,最终成为一个完整的源程序。

格式: INCLUDE [ 驱动器名: ] [ 路径名 ] 文件名注意:1、文件名中若没有扩展名,则系统默认是。

ASM(该文件必须是能打开的。

2、被插入的源程序中不能包含 END 伪指令,否则汇编会停止运行。

被链接文件的每一行,在程序清单中以“I“开头。

3、链接伪指令可有8级嵌套, 若要求嵌套的多, 则要修改 DOS 中的 CONFIG。

SYS 文件的 FILES 参数。

17、ISEG功能:绝对选择指令 ISEG 内部间接寻址绝对数据段 idata 指令格式如下:ISEG [AT 绝对地址表达式]18、MACRO宏指令格式[ 宏指令名 ] MACRO [形式参数, 。

]代码段ENDM宏调用格式[ 宏指令名 ] [实在参数,。

]19、LIST它们的格式为:$LIST功能:LIST伪指令使汇编时主生程序清单,但即使不用该指令,汇编也会自动产生清单。

但如果使用了 NOLIST 伪指令后需要继续主生清单则必须使用LIST伪指令。

20、NAME功能:用来给当前模块命名。

指令格式:NAME 模块名例如:NAME TIMER定义一个模块名为 TIMER 的模块。

21、NOCODE其格式为$NOCODENOCODE 伪指令使得在汇编时,条件汇编程序结构中那些真值为假的条件不产生清单。

有关条件汇编结构在下面介绍。

如果没有这条伪指令, 汇编将主生所有条件下的清单, 不论其真值是否为真。

但是假的条件,不产生目标码。

而 NOCODE 伪指令使汇编清单中只列出那些由汇编程序用到的部分, 因此,当使用 NOCODE 伪指令时,程序清单与源程序并非逐行对应。

22、NOLIST它们的格式为:$NOLIST功能:NOLIST伪指令使汇编时不产生清单,所有包含此伪指令及在这条伪指令之后的语句都不进入列表文件。

当不需要任何列表文件,并且不需要显示程序清单时,可以在启动汇编时不加.L附加项,且在源代码的第一行加上 NOLIST 指令。

使用NOLIST 伪指令与附加项 /L不同之处是 NOLIST 伪指令可加在源程序中,与 LIST 伪指令配合使用,使源程序中某些部分不产生清单。

而不加附加项 /L则不产生任何程序清单。

不过,不管有无$NOLIST伪指令,程序在汇编时检查到的错误都将在屏幕上显示出错的源代码行及错误信息23、PAGE功能:PAGE伪指令用于形成新的一中定义一面的行数。

其格式为:$PAGE表达式若表达式缺省则开始新的一页,若有表达式,则每页行数重新定义。

汇编开始时页长为 66行。

一页中除出页外, 剩余 55行用于打印源程序,这一格式适用于标准打印纸。

如果变元值小于 66,页内可打印的源代码行将相应减少。

页长最小值为 12。

若小于 12时,每页内除页上只打印一行源程序。

页长变元是 16位字节,因而每页最长可定义到 65535行,这时分页打印变为连续打印,在屏幕显示程序清单或在卷筒纸上打印程序清单时,常常使用连续打印,如果在启动汇编时用 /N选项,页长就是65535。

24、PUBLIC功能:声明可被其它模块使用的公共函数名。

指令格式:PUBLIC 符号 [,符号,符号[, ······]]PUBLIC 后可跟多个函数名,用逗号格开。

每个函数名都必须是在模块内定义过的。

例如:PUBLIC INTER,_OUTER其中_OUTER 可供 C 调用。

25、RSEG功能:再定位段选择指令为 RSEG,用于选择一个已在前面定义过的再定义段作为当前段,指令格式:RSEG 段名段名必须是在前面声明过的再定位段。

例如:DATAS SEGMENT DATA :声明一个再定位 DATA 段 CODES SEGMENT CODE ;声明一个再定位 CODE 段 BSEG AT 60HRSEG CODES ;选择前面声明的再定位 CODE 段作为当前段。

绝对段选择指令CSEG ---绝对代码段DSEG ---内部绝对数据段 XSEG ---外部绝对数据段 ISEG ---内部间接寻址数据段 BSEG ---绝对位寻址数据段格式:CSEG [AT 绝对地址表达式 ] DSEG [AT 绝对地址表达式 ] XSEG [AT 绝对地址表达式 ]ISEG [AT 绝对地址表达式 ] BSEG [AT 绝对地址表达式 ]括号内是可选项,用来指定当前绝对段的基地址。

CSEG AT 0000H AJMP MAIN26、SEGMENT功能:SEGMENT 指令用来声明一个再定位段和一个可选的再定位类型。

相关文档
最新文档