当前位置:文档之家› 汇编伪指令和编译出错说明

汇编伪指令和编译出错说明

汇编伪指令和编译出错说明
汇编伪指令和编译出错说明

ASM-51 宏汇编使用手册

A51与ASM51基本相同

ASM-51 宏汇编主要用来开发Inter8051系列单片机,它具有宏处理,数据处理,列表处理和条件处理等多种功能。源程序的编写完全采用 Inter标准助记符和行格式。在编写程序过程中,可借助于文本编辑(Windows的记事本)或文字处理软件Word等编辑,经ASM-51汇编后生成列表输出文件(.LST)和目标代码文件(.HEX)。此目标代码文件(.HEX)可直接用CZS-51或MedWin、Keil、Debug8051进行模拟/调试,或直接用于硬件仿真器上运行。当然,这也是要烧写到单片机ROM中的代码。

1、宏汇编语言的基本语法

1、1 宏汇编的特点

ASM-51宏汇编完全支持Inter助记符的汇编语言,它含有宏语句,英文大小写字母,变量名,标号等不受限制,有二,十,十六进制和串参数类型,有汇编控制指令和多层条件语句,程序逻辑分段,还有模块化程序设计的连接功能,汇编速度快等特点。

1、2 汇编处理过程

(1) 用行编辑EDLIN或文字处理软件WS或全屏幕编辑软件PE等,编辑宏汇编

语言源程序,它的文件扩展名为。ASM。

(2) 用ASM-51宏汇编程序对上述源程序文件进行汇编,产生扩展名为.LST的列表输出文件和扩展名为.HEX的目标代码文件(.HEX)。列表输出文件包含源程序语句所汇编成的代码,以及有关的地址,语句和符号表等。目标代码文件包含源程序语句所汇编成的代码,不包含任何符号信息或助记符。进行模拟/调试,或直接用于硬件仿真器上运行。

1、3 语句

汇编语言可分为两类语句:指令性语句和指示性语句。

(1)指令性语句

这一类语句是指在汇编过程中能生成指令代码的语句(如 MOV ,DEC等)。其格式为:

[标号:] [指令助记符] [操作数] [;注释]

其中方括号[ ]中为选择项。下同。

(2)指示性语句

这一类语句即通常所说的伪指令,它指示汇编程序后面的指示性语句如何产生代码。

ASM-51宏汇编完全支持Inter助记符的汇编语言,因此汇编程序的格式,指令完全与8051汇编语言一样,这里不再介绍它们的指令系统。

1、4 常量与数值运算

(1) 常量及其表示

常量,就是在汇编时已经确定的值。在汇编语言中,常量主要用作指令性语句中的直接操作数,也可用于存储器操作的组成部分(如位移量),或者为伪指令中的变量输初值。

为便于程序设计,常量有多种表示形式:二、十、十六进制数和字符串等,它们的格式各不相同,并采用不同的基数标记加以区分。表--1列出其格式。

表--1

数据形式格式取值范围例如备注

2进制 ********B 0,1 10011100B

10进制 ****** 0,1,2...9 45723 缺省基数标记

16进制 ****H 0,1...E,F 0CDE3H 最前面一个字符应是0--9

ASCII '**' ASCII 'AD' 只有DB命令中使用

常量以数值形式直接写在汇编语言的语句中称为字面常量,若预先为它定义一个符号名,然后在语句中用符号名来表示该常量称符号常量。使用符号常量的优点可改善程序的可读性,它的定义需要使用伪操作命令"EQU"或“=“。

(2) 数值运算

宏汇编中,所有参数值均被认为是整数,并以16位的形式存放,表示的范围是0---65535,所有算术操作均对整数以补码形式运算。

(1) 基本运算

汇编语言对常量允许进行算术运算,逻辑运算,分离运算等三种类型的运算。如表--2所示。

表--2 基本运算

运算操作含义以ADD为例

算 + 加操作 ADD A,R1+36

- 减操作 ADD A,R1-2EH

* 乘操作 ADD A,R1*0E3H

术 / 除操作 ADD A,R1/23

MOD 模除 ADD A,R1 MOD 12

SHR 右移 ADD A,R1 SHR 3

SHL 左移 ADD A,R1 SHL 2

逻 AND 与操作 ADD A,R1 AND 10000101B

OR 或操作 ADD A,R1 OR 00110000B

XOR 异或操作 ADD A,R1 XOR 36H

辑 NOT 非操作 ADD A, NOT 45H

分 HIGH 高字节分离 ADD A, HIGH 05E2H

离 LOW 低字节分离 ADD A, LOW 77F0H

说明: R1为符号常量。

(2) 综合运算

综合运算规则 1: 计算表达式时,所有的运算全部从左到右顺序进行,遇到操作数就进行运算,不考虑优先关系,括号有助于视觉理解,但不改变表达式的?计算顺序。

例如: R1 SET NOT(0C5FH OR 000CH)

其结果应为 0F3ACH。

综合运算规则 2: 当两个操作数之间没有参数相隔时,第二个操作符优先于第一个操作符计算。

例如: R1 SET NOT 10011010B

其结果应为 65H。

1、5 程序分段

8051系列的处理器的结构,把内存分成五个独立的内存段,即代码段(段名CSEG),数据段(段名DSEG),外部段(段名XSEG),功能段(段名FSEG)和位段(段名BSEG)等。各个段在源程序中的次序可以任意,段的数目可以根据需要确定,原则上不受限制。程序中的所有段都必须用段名开头,段结束语句ENDS结束。

1、6 源文件

源文件是由汇编语言代码和汇编程序指令组成的 ASCII 字符文件,扩展名为。ASM。源文件的每一语句行,最多有四个域。每一行的长度不超过80个字符,且以“回车“键结束。

1、7 列表输出文件和目标代码文件

(1) 目标代码文件(.HEX)

目标代码文件(.HEX)是ASCII文件,它只包含由各种程序语句所生成的代码,而不包含任何信息或助记符。该文件是能够在处理器上运行的实际机器指令码。

目标代码文件格式如下:

:cc aaaa tt dd aa dd ss

计数器数据类型记录地址回车

记录地址代码的字节和校验

目标代码文件(.HEX)的每一行以一个冒号开始,后面跟着的数字和符号分别表示十六进制数据的计数器(cc),记录第一个数据字节的16位地址(aaaa),目标记录的数据类型(tt),代码的实际字节(dd),计数器从第一个数据字节到最后的所有字节值累加和的相反数即和校验(ss)等等。

(2)列表输出文件(.LST)

列表输出文件也是个ASCII文件,它由源程序和目标代码文件组成,可作为程序文档也可被打印。

列表输出文件是分页显示,打印的,其长度由缺省值或伪指令$PAGE决定。每页一开始指出汇编程序的类型,版本以及页号等。

2、伪操作指令

汇编语言中的指示性语句(伪指令),不象指令性语句会产生目标代码,它主要是用来“控制指挥“汇编程序如何把指令性语句翻译成目标代码。除本身伪指令申请分配一部分存贮空间作数据区和堆栈区外,不产生任何目标代码。

按照它们的功能,大致分成七类: 符号定义伪操作,段定义伪操作,数据定义崐伪操作,列表伪操作,条件伪操作,宏处理伪操作以及其它操作等。如表--3所示。

表--3 伪操作指令

序号分类伪操作指令

1 符号定义伪操作 EQU,=,DATA,BYTE,WORD,BIT,SET

2 段定义伪操作 ORG,END,CSEG,DSEG,XSEG,FSEG,ENDS

3 数据定义伪操作 DB,DW,DS

4 列表伪操作 $TITLE,$SUBTTL,$PAGE,$LIST,$NOLIST,$NOCODE

5 条件伪操作 IF,ELSE,ENDIF

6 宏处理伪操作 MACRO,ENDM

7 其它 ALTNAME,INCLUDE

2、1 符号定义伪操作

符号定义伪操作及其格式: 符号名符号定义名常量或表达式

其中符号定义名可以为EQU,=,DA TA,BYTE,WORD,BIT,SET等。下面就是这些符

号定义伪操作的用法及说明。如表--4所示。

表--4 符号定义伪操作

符号定义名用法说明

EQU 为常量,符号名等定义符号化常量名符号名不能重名定义

= 为常量,符号名等定义符号化常量名符号名不能重名定义

DATA 用来为一个字节类型的符号定值符号名不能重名定义

BYTE 用来为一个字节类型的符号定值符号名不能重名定义

WORD 用来为一个字类型的符号定值符号名不能重名定义

8051中没有字操作

BIT 用来定义一个字位类型

SET 用来定义整数类型的符号名符号名可重名定义

DATA与BYTE的区别: DA TA与BYTE是相类似的伪指令。当程序运行到DA TA伪指令定义的符号名时,该符号名将被显示;而由BYTE定义的符号名不被显示。

2、2 段定义伪操作

(1) ORG 用于设臵或改变程序计数器的值。

其格式为: ORG 常数或表达式

例如: ORG 0008H

ORG $+5

其中$表示程序计数器的当前值。

(2) END 表示源代码结束。

其格式为: END 常数或表达式

汇编程序遇到END语句即停止运行。若程序中没有END,则在汇编源程序时显出错

(3) 8051系列的处理器把内存结构分成五个段,代码段CSEG,数据段DSEG,外部段XSEG,功能段FSEG和位段BSEG等,其用法及区别如表--5所示。

在汇编以上各段所定义的符号时,系统根据符号所在不同段,赋与不同类型的字母,如表--6所示。

2、3 数据定义伪操作

数据定义伪操作格式:

[ 标号: ] 数据定义名 [ 表达式1,表达式2,。。。 ]

其中数据定义名可为DB,DW,DS等。

如表--7所示,数据定义伪操作的含义及说明。

表--5 段定义伪操作

段用法及区别

代码段(CSEG) 包含由处理器所执行的程序。段名可缺省。有目标代码生成。

数据段(DESG) 由内部工作寄存器的处理器的RAM组成。用来对程序使用的数据地址赋符号名,大多以ORG,DA TA,BYTE,WORD,EDNS等组成。无目标码生成。

外部段(XSEG) 由外部工作寄存区和RAM组成。使用方法同数据段。无目标码生成。

功能段(FSEG) 由特殊寄存器位臵组成(如:输入/输出部件,计时器,中断控制和连续的寄存器部件接口等)。无目标代码生成。

位段(BSEG) 由一些独立的位组成,可以用布尔函数实现。该段地址被解释为位地址。无目标代码生成。

表--6 程序分段的类型符号

段标号(Label) 字节型操作数(Byte) 字型操作数(Word)

代码段CSEG LDW

数据段DSEG DDW

外部段XSEG XXE

功能段FSEG FFG

位段BSEG BBB

说明: (1)在不同的段中类型符号不同;

(2)字节型操作数(Byte)一般通过DA TA指令赋给符号; 字型操作数

一般通过WORD指令赋给符号;

(3)如果各段中用BYTE赋值,则在各段中符号全以S表示;在SIM51模

拟/调试中的符号区显示功能中,对BYTE赋值的将被跳过。

(4)在各段中,位类型可以用BIT指令赋给。

表--7 数据定义伪操作

数据定义名含义说明

DB 用于定义一个字节包含的值表达式不是字符串时,每个表达式赋给一个字节,是字符串时,用单引号“ ' “作为分隔符。

DW 用于定义一个字(16位) 每个表达式占16位。如果表达式中的存贮内容为字符串,只取最后两个字符。若字符串只有一个字符,高字节臵“0“。

DS 定义一个存贮区通常用在代码段中,作为程序的一部分。若用在数据段,外部段,则作为位臵标志使用。

表--8 列表伪操作

伪指令含义及格式说明

$TITLE 给源程序指定一个标题标题不加““,其最大长度

格式: $TITLE [标题行] 60个字符。若标题行省略,原来定义的标题行作废。

$SUBTTL 给源程序指定一个副标题副标题不加““,其最大长

格式: $SUBTTL [副标题行] 度60字符。若副标题行省略,原来定义的副标题行作废。

$PAGE 用于形成或定义新的一页或行数汇编时页长为66行(适合于格式: $PAGE [表达式] 标准打印纸)。表达式最大为65535,最小为12,表达式缺省,则从新的一页开始。

$LIST 使源程序汇编时,产生程序清单汇编时无此指令照样产生清单。

格式: $LIST

$NOLIST 使源程序汇编时不产生程序清单

格式: $NOLIST

$NOCODE 源程序汇编时,条件汇编程序值没有此指令汇编时,不论其值是为假的不产生清单。真、假的条件都不产生目标码。

格式: $NOCODE

2、4 列表伪操作

如表--8所示,列表伪操作的含义,格式及说明。

2、5 条件伪操作

条件伪操作格式:

IF 表达式

[ 程序块1 ]

[ ELSE ]

[ 程序块2 ]

ENDIF

当IF指令中的表达式为真时,被汇编的代码段是程序块1;当IF指令中的表达式为假时,被汇编的代码段是程序块2。在一个条件结构中,仅有一个代码段被汇编,其它的则被忽略。

2、6 宏处理操作

在源程序中,如果有一段程序需要多次使用,为使程序不重复书写这段程序,可用宏定义把所需要重复出现的程序块定义成宏指令,此后在宏指令出现的地方,宏汇编程序总是自动

地把它们替换成相应的代码段。

(1) 宏指令格式

[ 宏指令名 ] MACRO [形式参数,。。。]

代码段

ENDM

在宏定义中,使用了“形式参数“,它们引用宏指令时被给出的一些名字或数值(实在参数)所替换。使用形式参数给宏指令带来了很大的灵活性。

(2)宏调用格式

[ 宏指令名 ] [实在参数,。。。]

注意:1、当有两个以上的实参数时,它们之间要用逗号,空格或列表符隔开。

2、实参数项将对应替换宏指令中形式参数。如果形式参数为标号时,则在宏调用中,实参也应为标号,且要求实参是唯一的。如果宏定义中有自己的标号,则在宏调用时,汇编程序自动地把标号变成唯一的标号。

2、7 其他

(1) 替换名 ALTNAME

功能: 这一伪指令用来自定义名字,以替换源程序中原来的保留字,替换的保留字均可等效地用于子程序中。

格式: ALTNAME 保留字自定义名

注意: 自定义名与保留字之间首字符必须相同。

(2) 附加文件的链结 INCLUDE

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

格式: INCLUDE [ 驱动器名: ] [ 路径名 ] 文件名

注意:1、文件名中若没有扩展名,则系统默认是。ASM(该文件必须是能打开的)。

2、被插入的源程序中不能包含END伪指令,否则汇编会停止运行。被链接文件的每一行,在程序清单中以“I“开头。

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

CONFIG。SYS文件的FILES参数。

3 宏汇编运行

3、1 系统运行环境

ASM-51宏汇编要在IBM-PC及其兼容机上运行(至少128K字节的RAM);具有一个软驱动器或硬驱动器,采用ANSI标准终端(包括键盘,显示控制器,打印机,至少一个RS-232异步通讯接口)。软件有PC-DOS,MS-DOS 2。0 以上版本,ASM_51系统。

3、2 宏汇编程序的运行

以 8051 宏汇编为例,在DOS系统的提示符下键入

A> ASM51 文件名。ASM

等错误的个数出现后,键入 变返回到DOS提示符下。8051的宏汇编与此相似。

4 汇编的使用

使用ASM-51宏汇编是将8051源程序汇编生成列表输出文件和目标代码文件,供模拟/调试时使用。我们使用的宏汇编完全采用Inter标准助记符和行格式,因此在编写源程序时,可以使用宏汇编中的伪指令,以增加源程序的运行速度和可读性。也可以直接用 Inter 标准助记符来编写源程序。再经过ASM-51宏汇编进行汇编,便可得到列表输出文件和目标代码文件。

汇编的格式如下:

> ASM51 文件名。ASM [ 可选项 ]

其中可选项为: /L, /H, /S, /P, /N

/L 表示源程序汇编后不生成列表册输出文件(.LST),只显示在屏幕上。

/H 表示源程序汇编后不生成目标代码文件(.HEX)。

/S 表示源程序汇编后不生成符号表。

/P 表示源程序汇编后生成符号表。

/N 表示源程序汇编后,程序是连续的显示。

如果没有选择项,则表示产生列表输出文件和目标代码文件,且在LST文件后面列出符号表。生成的目标代码便可以进行模拟/调试,如果在模拟/调试中发现错误,则源程序要经过修改,重新汇编,然后再进行模拟/调试,直到完全正确。

若程序汇编过程中有错误,则给出出错信息(出错信息见附录)。生成的目标代码可以进行模拟/调试/烧写。

附录 ASM-51 汇编出错信息表

1 Address Out of Range 一个被计值的目标地址超出了当前语句的范围。

2 Badly Formed Argument 数字规定的类型中有非法数字存在。

3 Illefal Equale 有不允许的类型约定。

4 Label Name Conflicts With Symbol Name 在程序中有两个符号相同。

5 Label Address Changed On Pass 2。源程序在此错误之前,还有一些错误。

6 Missing Argument in Expression 表达式中算术运算符后面没有操作数。

7 Missing END Statrment 汇编的源程序结尾未发现END语句。

8 Multiply Defined Label 源程序中定义了两个标号。

9 Unbalanced Parentheses 表达式中多余或缺少括号。

10 Undefined Symbol 语句中的符号名可能拼错或未被定义。

11 Unrecognized Statemen or Undefined Argument 未定义参数的指令或代码。

12 Value Out of Range 有一个非法的值来说明一个有着可能值限制的语句。

汇编语言入门

汇编语言入门教程 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS 的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志,将在下文用到时详细说明。 内存是电脑运作中的关键部分,也是电脑在工作中储存信息的地方。内存组织有许多可存放

汇编常用伪指令

一、基本段定义格式常用结构STACK SEGMENT PARA 'STACK; DB 100 DUP('STACK') STACK ENDS DATA SEGMENT DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,data MOV DS,AX MOV ES,AX MOV AL,4CH INT 21H CODE ENDS END START ------------------------------------------------------------------------------------------------------------------------ 段名segment[定位][组合][段字][‘类别’] ... 段名ends (1)定位 段定位(align)属性——指定逻辑段在主存储器中的边界: BYTE:段开始为下一个可用的字节地址(xxxx xxxxb),属性值为1 WORD:段开始为下一个可用的偶数地址(xxxx xxx0b),属性值为2 DWORD:段开始为下一个可用的4倍数地址(xxxx xx00b),属性值为4 PARA:段开始为下一个可用的节地址(xxxx 0000b),属性值为16 PAGE:段开始为下一个可用的页地址(0000 0000b),属性值为256 简化段定义伪指令的代码和数据段默认采用WORD定位,堆栈段默认采用PARA定位。完整段定义伪指令的默认定位属性是PARA。(2)组合 PUBLIC: 所有此类型的同名段组合成一个逻辑段,公用一个段地址,运行时装入同一个物理段中。 COMMON : 所有此类型的同名段具有相同的起始地址(覆盖),共享相同的存储区域。 AT <数值表达式> : 按绝对地址定位,段地址就是表达式的值。

(完整word版)汇编语言常用指令大全,推荐文档

MOV指令为双操作数指令,两个操作数中必须有一个是寄存器. MOV DST , SRC // Byte / Word 执行操作: dst = src 1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用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=Tmp 1.必须有一个操作数是在寄存器中 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_ONE MOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中 LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中 LDS(Load DS with pointer)指针送寄存器和DS指令 LDS REG , SRC //常指定SI寄存器。 执行操作: REG=(SRC), DS=(SRC+2) //将SRC指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入DS段寄存器中。

汇编语言知识大全

第一章基础知识: 一.机器码:1.计算机只认识0,1两种状态。而机器码只能由0,1组成。故机器码相当难认,故产生了汇编语言。 2.其中汇编由三类指令形成:汇编指令(有机器码对应),伪指令,其他符号(编译的时候有用)。 每一总CPU都有自己的指令集;注意学习的侧重点。 二.存储器:1.存储单元中数据和指令没任何差别。 2.存储单元:Eg:128个储存单元(0~127)128byte。 线: 1.地址总线:寻址用,参数(宽度)为N根,则可以寻到2^N个内存单元。 据总线:传送数据用,参数为N根,一次可以传送N/8个存储单元。 3.控制总线:cpu对元器件的控制能力。越多控制力越强。 四.内存地址空间:1.由地址总线决定大小。 2.主板:cpu和核心器件(或接口卡)用地址总线,数据总线,控制总 线连接起来。 3.接口卡:由于cpu不能直接控制外设,需通过接口卡间接控制。

4.各类存储器芯片:RAM,BIOS(主板,各芯片)的ROM,接卡槽的 RAM CPU在操控他们的时候,把他们都当作内存来对待,把他们总的看作一个由 若干个存储单元组成的逻辑存储器,即我们所说的内存地址空间。 自己的一点理解:CPU对内存的操作是一样的,但是在cpu,内存,芯片之间的硬件本身所牵扯的线是不同的。所以一些地址的功能是对应一些芯片的。 第二章寄存器 引入:CPU中含有运算器,寄存器,控制器(由内部总线连接)。而寄存器是可以用来指令读写的部件。8086有14个寄存器(都是16位,2个存储空间)。 一.通用寄存器(ax,bx,cx,dx),16位,可以分为高低位 注意1.范围:16位的2^16-1,8位的2^8-1 2.进行数据传送或运算时要注意位数对应,否则会报错 二.字:1. 1个字==2个字节。 2. 在寄存器中的存储:0x高位字节低位字节;单元认定的是低单元 数制,16进制h,2进制b

DSP汇编指令总结

DSP汇编指令总结 一、寻址方式: 1、立即寻址: 短立即寻址(单指令字) 长立即数寻址(双指令字) 第一指令字 第二指令字 16位常数=16384=4000h 2、直接寻址 ARU 辅助寄存器更新代码,决定当前辅助寄存器是否和如何进行增或减。N规定是否改变ARP值,(N=0,不变)

4.3.1、算术逻辑指令(28条) 4.3.1.1、加法指令(4条); 4.3.1.2、减法指令(5条); 4.3.1.3、乘法指令(2条); 4.3.1.4、乘加与乘减指令(6条); 4.3.1.5、其它算数指令(3条); 4.3.1.6、移位和循环移位指令(4条); 4.3.1.7、逻辑运算指令(4条); 4.3.2、寄存器操作指令(35条) 4.3.2.1、累加器操作指令(6条) 4.3.2.2、临时寄存器指令(5条) 4.3.2.3、乘积寄存器指令(6条) 4.3.2.4、辅助寄存器指令(5条) 4.3.2.5、状态寄存器指令(9条) 4.3.2.6、堆栈操作指令(4条) 4.3.3、存储器与I/O操作指令(8条)4.3.3.1、数据移动指令(4条) 4.3.3.2、程序存储器读写指令(2条) 4.3.3.3、I/O操作指令(2条) 4.3.4、程序控制指令(15条) 4.3.4.1、程序分支或调用指令(7条) 4.3.4.2、中断指令(3条) 4.3.4.3、返回指令(2条) 4.3.4.4、其它控制指令(3条)

4.3.1、算术逻辑指令(28条) 4.3.1.1、加法指令(4条); ▲ADD ▲ADDC(带进位加法指令) ▲ADDS(抑制符号扩展加法指令) ▲ADDT(移位次数由TREG指定的加法指令) 4.3.1.2、减法指令(5条); ★SUB(带移位的减法指令) ★SUBB(带借位的减法指令) ★SUBC(条件减法指令) ★SUBS(减法指令) ★SUBT(带移位的减法指令,TREG决定移位次数)4.3.1.3、乘法指令(2条); ★MPY(带符号乘法指令) ★MPYU(无符号乘法指令) 4.3.1.4、乘加与乘减指令(6条); ★MAC(累加前次积并乘)(字数2,周期3) ★MAC(累加前次积并乘) ★MPYA(累加-乘指令) ★MPYS(减-乘指令) ★SQRA(累加平方值指令) ★SQRS(累减并平方指令) 4.3.1.5、其它算数指令(3条); ★ABS(累加器取绝对值指令) ★NEG(累加器取补码指令) ★NORM(累加器规格化指令) 返回 4.3.1.6、移位和循环移位指令(4条); ▲ SFL(累加器内容左移指令) ▲ SFR(累加器内容右移指令) ▲ROL(累加器内容循环左移指令) ▲ROR(累加器内容循环右移指令) 返回 4.3.1.7、逻辑运算指令(4条); ▲ AND(逻辑与指令) ▲ OR(逻辑或指令) ▲ XOR(逻辑异或指令) ▲ CMPL(累加器取反指令) 返回 4.3.2、寄存器操作指令(35条) 4.3.2.1、累加器操作指令(6条)

(完整word版)汇编语言指令集合-吐血整理,推荐文档

8086/8088指令系统记忆表 数据寄存器分为: AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据. BH&BL=BX(base):基址寄存器,常用于地址索引; CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器. DH&DL=DX(data):数据寄存器,常用于数据传递。他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。 另一组是指针寄存器和变址寄存器,包括: SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置; BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置; SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针; DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。 指令指针IP(Instruction Pointer) 标志寄存器FR(Flag Register) OF(overflow flag) DF(direction flag) CF(carrier flag) PF(parity flag) AF(auxiliary flag) ZF(zero flag) SF(sign flag) IF(interrupt flag) TF(trap flag) 段寄存器(Segment Register) 为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址: CS(Code Segment):代码段寄存器; DS(Data Segment):数据段寄存器; SS(Stack Segment):堆栈段寄存器;

PIC16系列_单片机常用伪指令(汇编)

PIC 单片机端口电平变化中断使用必须注意的问题 PICC18使用说明 PIC 单片机常用伪指令 PIC单片机2009-02-19 11:16:40 阅读8 评论0 字号:大中小订阅 3.2.3 MPASM 的伪指令 我们在第一章中已经详细介绍了中档PIC 单片机的35 条指令,源程序的编写主要就是用这些基本的指令实现你的控制任务。但为了增加源程序的可读性和可维护性,我们引入了伪指令的概念。伪指令本身不会产生可执行的汇编指令,但它们可以帮组“管理”你编写的程序,其实用性和必要性绝不亚于35 条正真的汇编指令。我们在此着重介绍最常用的几种 伪指令。 #include 或include #include 伪指令的作用是把另外一个文件的内容全部包含复制到本伪指令所在的位置。 被包含复制的文件可以是任何形式的文本文件,当然文件中的内容和语法结构必须是MPASM 能够识别的。最经常被“include”的是针对PIC 单片机内部特殊功能寄存器定义的包含头文件,在MPLAB 安装后它们全部放在路径“ C:\Program Files\MPLAB IDE\MCHIP_Tools”下,每一个型号的PIC 单片机都有一个对应的预定义包含头文件,扩展名是“.inc”。除了一些符号预定义文件,你也可以把现有的其它程序文件作为一个代码模块直接“包含”进来作为自己程序的一部分。见例3-01。 #include ;把预定义的PIC16F877A 寄存器符号包含到此处 #include ”math.asm” ;把现有的程序文件包含进来作为自己代码的一部分 例3-01 请注意被包含文件的引用方式。一种是<>尖括号引用,这种引用意味着让编译器去默认的路径下寻找该文件,MPASM 默认的寄存器预定义文件存放路径即为上面提及的MPLAB 安装后的目录;另一种是””双引号引用,这种引用方式的意思是指示编译器从引号中指定的全程文件路径下寻找该文件。例3-01 中”math.asm”没有指定路径,即意味着在当前项目路径下寻找math.asm 文件。如果编译器找不到被包含的文件,将会有错误信息告 知。 请在你的源程序中尽量用MPLAB 标准头文件定义的寄存器符号。一来这些被定义的寄存器符号和芯片数据手册上的描述一一对应,理解起来即直观又容易;二来如果用你自己定义符号就缺乏一个大家能一起交流的标准平台,其他人要解读你的代码时将费时费力。故例3-01 中的首行#include 包含引用伪指令可以说是PIC 单片机程序编写时的标准必备。

单片机汇编指令大全

单片机汇编指令一览表 作者:乡下人 助记符指令说明字节数周期数 (数据传递类指令) MOV A,Rn 寄存器传送到累加器 1 1 MOV A,direct 直接地址传送到累加器 2 1 MOV A,@Ri 累加器传送到外部RAM(8 地址) 1 1 MOV A,#data 立即数传送到累加器 2 1 MOV Rn,A 累加器传送到寄存器 1 1 MOV Rn,direct 直接地址传送到寄存器 2 2 MOV Rn,#data 累加器传送到直接地址 2 1 MOV direct,Rn 寄存器传送到直接地址 2 1 MOV direct,direct 直接地址传送到直接地址 3 2 MOV direct,A 累加器传送到直接地址 2 1 MOV direct,@Ri 间接RAM 传送到直接地址 2 2 MOV direct,#data 立即数传送到直接地址 3 2 MOV @Ri,A 直接地址传送到直接地址 1 2 MOV @Ri,direct 直接地址传送到间接RAM 2 1 MOV @Ri,#data 立即数传送到间接RAM 2 2 MOV DPTR,#data16 16 位常数加载到数据指针 3 1 MOVC A,@A+DPTR 代码字节传送到累加器 1 2 MOVC A,@A+PC 代码字节传送到累加器 1 2 MOVX A,@Ri 外部RAM(8 地址)传送到累加器 1 2 MOVX A,@DPTR 外部RAM(16 地址)传送到累加器 1 2 MOVX @Ri,A 累加器传送到外部RAM(8 地址) 1 2 MOVX @DPTR,A 累加器传送到外部RAM(16 地址) 1 2 PUSH direct 直接地址压入堆栈 2 2 POP direct 直接地址弹出堆栈 2 2 XCH A,Rn 寄存器和累加器交换 1 1 XCH A, direct 直接地址和累加器交换 2 1 XCH A, @Ri 间接RAM 和累加器交换 1 1 XCHD A, @Ri 间接RAM 和累加器交换低4 位字节 1 1 (算术运算类指令) INC A 累加器加1 1 1 INC Rn 寄存器加1 1 1 INC direct 直接地址加1 2 1 INC @Ri 间接RAM 加1 1 1 INC DPTR 数据指针加1 1 2 DEC A 累加器减1 1 1 DEC Rn 寄存器减1 1 1 DEC direct 直接地址减1 2 2

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伪指令了。看如下例子: 例: INT_0 EQU 1000H TIME_0 EQU 1010H INT_1 EQU 1020H TIME_1 EQU 1030H SERIAL EQU 1040H

单片机汇编语言伪指令

单片机汇编语言伪指令 1.BIT---用于汇编程序的一开始创建一个常量. FLASH_COUNT BIT3EH;创建一个名为FLASH_COUNT的常量,并把立即数3EH赋给这个常量,在程序中就可以直接把FLASH_COUNT等同于立即数3EH进行操作. 2.DATA---定义一个指向特殊功能寄存器区地址的变量. DPTRSW DATA0A2H;DPTRSW指向特殊功能寄存器0A2H地址上. 3.DB---用于汇编程序中定义若干个长度为1个字节的字,这若干个字使用逗号分隔开,如果逗号之间没有数据,汇编器默认为00H. DB10H,11H,,3FH,20H;在目标文件中生成10H,11H,00H,3FH,20H 4.DS---用于保留一块存储器空间给程序变量使用或别的用途. STORAGE DS10;保留一块名叫"STORAGE"的10字节存储空间 5.DW---定义若干个长度为两个字节的字,这若干个字使用逗号分隔开,如果逗号之间没有数据,汇编器默认为0000H. DW0FFFEH,,0102H;在目标文件中生成代码:FFH,FEH,00H,00H,01H,02H 6.END---该伪指令告诉汇编器程序的结束点. 7.EQU---定义某一个符号的值,一旦一个符号被定义后,就不能被另一个EQU或SET指令重复定义. BEEP_COUNT EQU1+1;表达式把2定义给符号BEEP_COUNT 8.IF、ELSE、ENDIF---这3个伪指令是条件选择语句,它们告诉汇编器根据表达式的值,是否汇编某一块程序,没有汇编的块在目标文件中是不存在对应的执行代码的. IF P1.0;如果P1.0=1,就汇编下一行 ELSE01H,02H,03H;在存储器中定义字01H、02H、03H ENDIF;条件选择结束,如果P1.0≠1,上一行不被汇编. 9.INCL---该指令用于在汇编时把其他文件与当前文件结合在一起汇编. INCL"const.def";即把文件"const.def"与当前文件结合在一起汇编. https://www.doczj.com/doc/4c12028570.html,---该伪指令用于设置程序计数器PC的初始值. ORG0000H;指令的执行代码在单片机的程序存储器中从0000H开始存储(也可简单写成00H). 11.SET---该伪指令类似EQU,但不同的是SET可以通过另一个SET伪指令重复定义变量的值. COUNT SET3 COUNT SET1;最终COUNT=1

AVRmega8汇编指令汇总.

指令集概述 指令操作数说明操作标志 # 时钟数 算数和逻辑指令 ADD Rd, Rr 无进位加法Rd ← Rd + Rr Z,C,N,V,H 1 ADC Rd, Rr 带进位加法Rd ← Rd + Rr + C Z,C,N,V,H 1 ADIW Rdl,K 立即数与字相加Rdh:Rdl ← Rdh:Rdl + K Z,C,N,V,S 2 SUB Rd, Rr 无进位减法Rd ← Rd - Rr Z,C,N,V,H 1 SUBI Rd, K 减立即数Rd ← Rd - K Z,C,N,V,H 1 SBC Rd, Rr 带进位减法Rd ← Rd - Rr - C Z,C,N,V,H 1 SBCI Rd, K 带进位减立即数Rd ← Rd - K - C Z,C,N,V,H 1 SBIW Rdl,K 从字中减立即数Rdh:Rdl ← Rdh:Rdl - K Z,C,N,V,S 2 AND Rd, Rr 逻辑与Rd ← Rd ? Rr Z,N,V 1 ANDI Rd, K 与立即数的逻辑与操作Rd ← Rd ? K Z,N,V 1 OR Rd, Rr 逻辑或Rd ← Rd v Rr Z,N,V 1 ORI Rd, K 与立即数的逻辑或操作Rd ← Rd v K Z,N,V 1 EOR Rd, Rr 异或Rd ← Rd ⊕ Rr Z,N,V 1 COM Rd 1 的补码Rd ← 0xFF ? Rd Z,C,N,V 1 NEG Rd 2 的补码Rd ← 0x00 ? Rd Z,C,N,V,H 1 SBR Rd,K 设置寄存器的位Rd ← Rd v K Z,N,V 1

CBR Rd,K 寄存器位清零Rd ← Rd ? (0xFF - K Z,N,V 1 INC Rd 加一操作Rd ← Rd + 1 Z,N,V 1 DEC Rd 减一操作Rd ← Rd ? 1 Z,N,V 1 TST Rd 测试是否为零或负Rd ← Rd ? Rd Z,N,V 1 CLR Rd 寄存器清零Rd ← Rd ⊕ Rd Z,N,V 1 SER Rd 寄存器置位Rd ← 0xFF None 1 MUL Rd, Rr 无符号数乘法R1:R0 ← Rd x Rr Z,C 2 MULS Rd, Rr 有符号数乘法R1:R0 ← Rd x Rr Z,C 2 MULSU Rd, Rr 有符号数与无符号数乘法 R1:R0 ← Rd x Rr Z,C 2 FMUL Rd, Rr 无符号小数乘法R1:R0 ← (Rd x Rr << 1 Z,C 2 FMULS Rd, Rr 有符号小数乘法R1:R0 ← (Rd x Rr << 1 Z,C 2 FMULSU Rd, Rr 有符号小数与无符号小数乘法R1:R0 ← (Rd x Rr << 1 Z,C 2跳转指令 RJMP k 相对跳转PC ← PC + k + 1 无 2 IJMP 间接跳转到(Z PC ← Z 无 2 RCALL k 相对子程序调用PC ← PC + k + 1 无 3 ICALL 间接调用(Z PC ← Z 无 3 RET 子程序返回PC ← STACK 无 4 RETI 中断返回PC ← STACK I 4

(完整版)汇编语言中常用的伪指令档

汇编语言中常用的伪指令 分类:软件相关2013-01-23 20:13 515人阅读评论(0) 收藏举报areaequ伪指令常用汇编语言 汇编语言中,指令语句在源程序汇编时会产生可供计算机执行的指令代码,即目标代码。汇编程序除指令语句外,还需要提供一些指令,用于辅助源程序的汇编。比如指定程序或数据存放的起始地址,为数据分配一段连续的内存单元等。这些指令在汇编时并不生成目标代码,不影响程序执行,因此称之为伪指令。本文简单总结了常用的伪指令,如下。 1、EQU(Equate) 一般格式为:标号:EQU 操作数 指令功能为将操作数赋予标号,两边的值完全相等。使用EQU伪指令给一个标号赋值后,此标号在整个源文件中值固定。 AREA: EQU 1000H ;将标号AREA赋值为1000H 2、ORG(Origin) 一般格式为:ORG xxxxH(绝对地址或标号) XxxxH决定此语句后第一条指令(或数据)的地址。该段源程序或数据被连续存放在此后的地址内,直到下一条ORG指令为止。 ORG 8000H ;此后目标代码存储在存储器中以0x8000h开始的地址空间中。 ADD R1,#1 MOV R2, #2 3、DB(Define Byte) 一般格式为:标号:DB 字节常数或字符或表达式 标号字段可有可无,字节常数或字符是指一个字节数据。此伪指令的功能是把字节常数或字节串存放至内存连续的地址空间中。 ORG 8000H DATA1:DB 43H,09H,08H DATA2:DB 07H 伪指令DB指定了43H,09H,08H 顺序存放在8000H开始的存储单元中,DATA2中的07H紧挨着DATA1的地址空间存放,即07H存放在8003H单元中。 注:DW(Define Word)指令定义与DB类似,区别在于DW定义一个字,DB定义一个字节。

汇编语言指令汇总

汇编语言程序设计资料简汇 通用寄存器 8位通用寄存器8个:AL、AH、BL、BH、CL、CH、DL、DH。 16位通用寄存器8个:AX、BX、CX、DX、SI、DI、BP、SP。 AL与AH、BL与BH、CL与CH、DL与DH分别对应于AX、BX、CX和DX的低8位与高8位。专用寄存器 指令指针:IP(16位)。 标志寄存器:没有助记符(FLAGS 16位)。 段寄存器 段寄存器:CS、DS、ES、SS。 内存分段:80x86采用分段内存管理机制,主要包括下列几种类型的段: ?代码段:用来存放程序的指令序列。 ?数据段:用来存放程序的数据。 ?堆栈段:作为堆栈使用的内存区域,用来存放过程返回地址、过程参数等。 物理地址与逻辑地址 ?物理地址:内存单元的实际地址,也就是出现在地址总线上的地址。 ?逻辑地址:或称分段地址。 ?段地址与偏移地址都是16位。 ?系统采用下列方法将逻辑地址自动转换为20位的物理地址: 物理地址= 段地址×16 + 偏移地址 ?每个内存单元具有唯一的物理地址,但可由不同的逻辑地址描述。 与数据有关的寻址方式 立即寻址方式 立即寻址方式所提供的操作数紧跟在操作码的后面,与操作码一起放在指令代码段中。立即数可以是8位数或16位数。如果是16位数,则低位字节存放在低地址中,高位字节存放在高地址中。 例:MOV AL,18 指令执行后,(AL)= 12H 寄存器寻址方式 在寄存器寻址方式中,操作数包含于CPU的内部寄存器之中。这种寻址方式大都用于寄存器之间的数据传输。 例3:MOV AX,BX 如指令执行前(AX)= 6789H,(BX)= 0000H;则指令执行后,(AX)= 0000H,(BX)保持不变。 直接寻址方式 直接寻址方式是操作数地址的16位偏移量直接包含在指令中,和指令操作码一起放在代码段,而操作数则在数据段中。操作数的地址是数据段寄存器DS中的内容左移4位后,加上指令给定的16位地址偏移量。直接寻址方式适合于处理单个数据变量。 寄存器间接寻址方式 在寄存器间接寻址方式中,操作数在存储器中。操作数的有效地址由变址寄存器SI、DI或基址寄存器BX、BP提供。 如果指令中指定的寄存器是BX、SI、DI,则用DS寄存器的内容作为段地址。 如指令中用BP寄存器,则操作数的段地址在SS中,即堆栈段。

C51 汇编伪指令

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 00H 4、CSEG 功能:绝对选择指令CSEG选择绝对代码段;指令格式如下:CSEG [AT 绝对地址表达式] 5、DATA(BYTE) 功能:指令用于将一个内部RAM 的地址赋给指定的符号名指令格式:符号名 DATA 表达式 数值表达式的值应在0~255 之间,表达式必须是一个简单再定位表达式。 例如:REGBUF DATA(BYTE) 40H PORT0 DATA(BYTE) 80H DATA与BYTE的区别: DATA与BYTE是相类似的伪指令。当程序运行到DATA伪指令定义的符号名时,该符号名将被显示;而由BYTE定义的符号名不被显示。 6、DB 功能:DB伪指令用于定义一个连续的存储区,给该存储区的存储单元赋值。该伪指令的参数即为存储单元的值,在表达式中对变元个数没有限制,只要此条伪指令能容纳在源程序的一行内,其格式为:标号:DB 表达式 只要表达式不是字符串,每一表达式值都被赋给一个字节。计算表达式值时按16位处理,但其结果只取低8位,若多个表达式出现在一个DB伪指令中,它们必须以逗号分开。表达式中有字符串时,以单引号“'”作分隔符,每个字符占一个字节,字符串不加改变地被存在各字节中,并不将小写字母转换成大写字母。 例如:DB 00H 01H 03H 46H DB '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 9 000A 04 INC A000B DS 1BH,27H0026 04 INC A DS ---预留存储区命令格式:〔标号:〕DS 表达式值 其功能是从指定地址开始,定义一个存储区,以备源程序使用。存储区预留的存储单元数由表达式的值决定。TMP: DS 1 从标号TEP地址处开始保留1个存储单元(字节)。

8086汇编指令大全.

标志寄存器:9个有效位,分 6个状态寄存器和 3个控制寄存器 CF 当执行一个加法(减法使最高位产生进位(借位时 CF=1 否则 CF=0 PF 指令执行的结果低 8位有偶数个一时, CF=1 否则 CF=0 AF 当执行一个加法(减法使运算结果低 4位向高 4位有进位(借位时 AF=1 否则 AF+0 ZF 当前运算结果为零, ZF=1 否则 ZF=0 SF 符号标志位 OF 溢出标志位 DF 方向标志位 IF 中断允许位 IF=1时响应外部中断

TF 跟踪标志位 操作数:[目的操作数(OPD ,源操作数(OPS ] ;立即操作数,寄存器操作数,存储器操作数。寻址方式: 1 寄存器寻址例:INC AX ; MOV AX , BX 2 寄存器间接寻址 (寄存器只能是 BX , DI , SI , BP ; [PA=(BX 、 DI 、 SI +DS》 4 或 BP+SS》4] 3 寄存器相对寻址 4 基址变址寻址 5 相对基址变址寻址 6 直接寻址 7 立即数寻址 i. 立即数寻址立即数寻址不能用在单操作数指令中 ii. 在双操作数中,立即数寻址方式不能用于目的操作数字段 指令系统: 1 数据传送指令 mov 注意: 不允许在两个存储单元之间直接传送数据

不允许在两个段寄存器之间传送数据 不允许用立即数直接为段寄存器赋值 不影响标志位 不允许寄存器或存储单元到除 CS 外的段寄存器 2 入栈(出栈指令 PUSH (POP 注意: PUSH 操作数不能是“立即数” POP 操作数不能是段寄存器 CS 不影响标志位 先进后出 单操作符 3 交换指令 XCHG 注意:

PIC8位单片机汇编语言常用指令的识读

PIC8位单片机汇编语言常用指令的识读(上) 各大类单片机的指令系统是没有通用性的,它是由单片机生产厂家规定的,所以用户必须遵循厂家规定的标准,才能达到应用单片机的目的。 PIC 8位单片机共有三个级别,有相对应的指令集。基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC 系列芯片共有指令58条,每条指令是16位字长。其指令向下兼容。 在这里笔者介绍PIC 8位单片机汇编语言指令的组成及指令中符号的功能,以供初学者阅读相关书籍和资料时快速入门。 一、PIC汇编语言指令格式 PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下: 标号操作码助记符操作数1,操作数2;注释 指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令。 1 标号与MCS-51系列单片机功能相同,标号代表指令的符号地址。在程序汇编时,已赋以指令存储器地址的具体数值。汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。标号是指令格式中的可选项,只有在被其它语句引用时才需派上标号。在无标号的情况下,指令助记符前面必须保留一个或一个以上的空格再写指令助记符。指令助记符不能占用标号的位置,否则该助记符会被汇编程序作标号误处理。 书写标号时,规定第一字符必须是字母或半角下划线“—”,它后面可以跟英文和数字字符、冒号(:)制符表等,并可任意组合。再有标号不能用操作码助记符和寄存器的代号表示。标号也可以单独占一行。 2 操作码助记符该字段是指令的必选项。该项可以是指令助记符,也可以由伪指令及宏命令组成,其作用是在交叉汇编时,“指令操作码助记符”与“操作码表”进行逐一比较,找出其相应的机器码一一代之。 3 操作数由操作数的数据值或以符号表示的数据或地址值组成。若操作数有两个,则两个操作数之间用逗号(,)分开。当操作数是常数时,常数可以是二进制、八进制、十进制或十六进制数。还可以是被定义过的标号、字符串和ASCⅡ码等。具体表示时,规定在二进制数前冠以字母“B”,例如B10011100;八进制数前冠以字母“O”,例如O257;十进制数前冠以字母“D”,例如D122;十六进制数前冠以“H”,例如H2F。在这里PIC 8位单片机默认进制是十六进制,在十六进制数之前加上Ox,如H2F可以写成Ox2F。 指令的操作数项也是可选项。 PIC系列与MCS-51系列8位单片机一样,存在寻址方法,即操作数的来源或去向问题。因PIC系列微控制器采用了精简指令集(RISC)结构体系,其寻址方式和指令都既少而又简单。其寻址方式根据操作数来源的不同,可分为立即数寻址、直接寻址、寄存器间接寻址和位寻址四种。所以PIC系列单片机指令中的操作数常常出现有关寄存器符号。有关的寻址实例,均可在本文的后面找到。 4 注释用来对程序作些说明,便于人们阅读程序。注释开始之前用分号(;)与其它部分相隔。当汇编程序检测到分号时,其后面的字符不再处理。值得注意:在用到子程序时应说明程序的入口条件、出口条件以及该程序应完成的功能和作用。 二、清零指令(共4条) 1 寄存器清零指令 实例:CLRW;寄存器W被清零 说明:该条指令很简单,其中W为PIC单片机的工作寄存器,相当于MCS-51系列单片机中的累加器A,CLR是英语Clear的缩写字母。 2 看门狗定时器清零指令。 实例:CLRWDT;看门狗定时器清零(若已赋值,同时清预分频器)

汇编与接口第四章作业

1.伪指令语句与硬指令语句的本质区别是什么?伪指令语句有什么主要作用? 答:区别:伪指令语句是能执行的语句,硬指令语句是CPU可以执行的语句。 伪指令语句主要作用是为汇编程序提供解释说明,它仅仅是在汇编过程中告诉汇编程序如果进行汇编。 2.什么是标识符?汇编程序中标识符怎样组成? 答:是用户自己定义的符号名。在汇编程序中标识符有两种:标号标识符,用在指令语句中,后面跟冒号,表示程序入口的逻辑地址。符号(或名字)标识符,用在伪指令语句中,后面不跟冒号,通常是定义一个变量,或说明变量类型。标识符一般不超31个字符,数字及常规符号($、@、?等)不能打头,也不能使用保留字。标识不区分大小写。 4.汇编语句有哪两种,每个语句有哪4部分组成? 答:指令语句(又称执行语句)和伪指令语句(又称说明性语句)。指令语句4部分包括,①标号:、②硬指令助记符、③操作数、④;注释。伪指令语句4部分包括,①符号名、②伪指令助记符、③参数、④;注释。 5.汇编程序开发有哪4个步骤?分别利用什么程序完成,产生什么输出文件? 答:①编辑。使用文本编辑器。产生汇编源程序文件: 文件名.ASM。源文件是文本文件。 ②汇编。使用汇编程序,如MASM或ML,排除程序中的语法错误。产生目标文件:文件名.OBJ。目标文件是二进制文件,是不能执行的文件。 ③连接。使用LINK。产生可执行文件:文件名.EXE. ④调试。使用DEBUG。本身不产生文件,是对连接产生的可执行进行调试,排除程序中的算法错误,保证可执行文件的正确性。 7.假设MYWORD是一个字变量,MYBYTE1和MYBYTE2是两个字节变量,指出下列语句中的错误原因。 (1) MOV BYTE PTR[BX], 1000 答:数据类型不匹配,目的地址单元是字节单元,1000大于255。无法存放。 (2) MOV BX, OFFSET[SI] 答:OFFSET后只能跟标识符。 (3) CMP MYBYTE1, MYBYTE2 答:CMP的两个操作数不能同时在存储器中。 (4) MOV AL, MYBYTE1+MYBYTE2 答:运算符只能对常数进行操作,不能对变量进行操作。 (5) SUB AL, MYWORD 答:数据类型不匹配,AL是8位的,MYWORD是16位变量。 (6) JNZ MYWORD 答:MYWORD是变量,其指的单元中存放的是操作数,不能用做跳转入口。 8.OPRL是个常数,请问下列语句中两个AND操作有什么不同? AND AL, OPRL AND 0FEH 答:第一个AND是指令语句,在程序运行时才执行,第二个AND是逻辑运算符,

相关主题
文本预览
相关文档 最新文档