文档库 最新最全的文档下载
当前位置:文档库 › A51的汇编控制指令即宏指令

A51的汇编控制指令即宏指令

A51的汇编控制指令即宏指令
A51的汇编控制指令即宏指令

A51汇编器是运行于IBM PC系列及其兼容机上的交叉汇编软件,其主要功能是将MCS-51系列单片机汇编语言源程序翻译成符合Intel目标文件格式的可再定位的目标代码,经过L51连接器的连接和装配,产生可被DS51仿真器调试或其它任何一种与Intel 目标文件格式兼容的仿真器使用的绝对目标代码.

一:A51的符号:在A51中可使用符号表示数值(EQU),地址和寄存器名,符号具有段类型,作用域,值域和可变性等属性.

符号的段属性:指出符号所位于的地址空间.段类型有:

NUMBER 无类型符号

DATA DATA段符号(可直接寻址的内部RAM空间)

IDATA IDATA段符号(可间接寻址的内部RAM空间)

XDATA XDATA段符号(外部数据存储空间)

BIT BIT段符号(内部RAM低地址区的可位寻址的空间)

CODE CODE段符号(程序存储器空间)

REGISTER 寄存器符号

作用域:指出符号是外部的,局部的还是全局的.(PUBLIC,EXTRN关键字说明) 二:标号:定义标号时,标号名后必须接冒号”:”,以示区别,每行只能定义一个标号,标号一经定义,其值为当前地址计数器的当前值,因此标号代表了指令和数据的地址,不能重复定义.

三:特殊的汇编符号:A51宏汇编语言定义了代表CPU寄存器的特殊符号,这些是保留的关键字,AR0---AR7:表示当前工作寄存器的R0—R7的绝对地址,它的值取决于指令所选择的工作寄存器组.

四:运算符:有三种

1):算术运算符包括:+,-(正负号),加---+,减,乘,除,MOD(取模),()—括号,改变运算顺序.

2):二进制运算符号:用来对二进制数进行按位取反,移位或逻辑运算.包

括:NOT(按位取反),HIGH(取右边操作数的高8位,LOW(取右边操作数的低8

位)SHR(右移位),SHL(左移位),AND(逻辑与),OR(逻辑或),XOR(逻辑异或). 3):关系运算符:>=,<=,<>,=,<,>.

所有运算符的优先级顺序:()→NOT,HIGH,LOW→+,-(正负号)→*,/,MOD→+,-(加减)→SHR,SHL→AND,OR,XOR→>=,<=,<>,>,<,=.

数值表达式:数值表达式由运算符和操作数组成,一个操作数又可以是表达式,与符号具有段属性一样,表达式也具有段类型属性,表达式的类型依赖于操作数的类型.表达式的类型如下:BIT,NUMBER,CODE,DATA,IDATA,XDATA.大多数的表达式是无类型的,当表达式中包含有段类型的操作数或者是子表达式时,运算结果的段类型遵循下面的原则:

对于单目运算符:(+/-/HIGH/LOW/NOT)表达式的结果与操作数具有相同的类型. 对于所有的双目运算符(除+/-),表达式的结果均为无类型的结果.

对加减运算,只有当其中的一个操作数具有段类型的时候,运算结果才具有相同的段类型,如果两个操作数具有段类型,即使他们的段类型一样,结果也是无类型的(NUMBER).

总结:只有当操作数加上或者是减去一个无类型时,才可能产生一类型,其他所有的组合均产生无类型的表达式.

A51提供了伪指令,可以利用这些伪指令在汇编程序中定义符号,保留和初始化

存储空间,定位目标代码等功能,伪指令中除DB,DW外均不产生目标代码,但可以改变汇编器的状态,并将有关信息(如段定义)加到目标文件中.

伪指令分四类:

1):定义符号:SEGMENT,EQU,SET,DATA,IDATA,XDATA,BIT,CODE

2):保留和初始化存储空间:DS,DB,DW,DBIT

3):程序链接:PUBLIC,EXTRN,NAME

4):汇编状态控制和段选择

:ORG,END,RSEG,CSEG,DSEG,XSEG,ISEG,BSEG,USING

一:定义符号的伪指令

1)SEGMENT

格式: 段名符号 SEGMENT 段类型 [再定位类型]

SEGMENT指令可声明一个可再定位(区别于CSEG,DSEG,XSEG,BSEG,ISEG等定义的在相对应的空间固定地址定义的绝对段—在连接的过程中不允许重新定位)的段符号和一个可选的再定位类型,段符号可以用来定义段,L51连接器可将多个

模块内的具有相同段名和再定位类型的几个段合成为一个段.段类型说明了段所处的地址空间.

如果是编写的汇编程序要与C源程序接口,即被C源程序调用,则全部的汇编子程序所命名的定义的代码段的段名必须是可用SEGMENT来定义的,而且名字的命名的方法也应该参照C51编译器产生的局部段的段名的转换规则.段名的作用主要是在汇编的时候用RSEG来激活的,在连接定位的时候用到的.与段名相应的是用于存储和传递参数的别名,可以在汇编源程序中直接应用局部段的别名,这个别

名主要是在传递函数参数的时候用的.在汇编程序中要用PUBLIC 声明被其他模块引用的全局符号.

DATA (可直接寻址的内部RAM空间)

IDATA (可间接寻址的内部RAM空间)

XDATA (外部数据存储空间)

BIT (内部RAM低地址区的可位寻址的空间)

CODE (程序存储器空间)

可选的再定位类型定义了L51连接时的定位方式,再定位类型:

UNIT:定义一个可开始于任一单元的段对于BIT型的段,一个单元是一个位,

其它所有的段一个单元是一个字节.

PAGE:定义一个起始地址必须是256的整数倍的段,段的绝对地址由L51自己计算,该类型只允许用于XDATA和CODE类型段.

INPAGE:定义一个由L51连接后必须包含在256B的块中,只适用于XDATA和CODE 段.

INBLOCK:定义一个L51连接后必须包含在2KB中的段,只适用于CODE段. OVERLAYABLE:定义一个可与其他段交叠的覆盖段,其段名符号必须按C51或者

PL/M51的规则命名.C51把局部数据段和局部位段定义

成?DT?FUNCTIONNAME?MODULENAME

和?BI?FUNCTIONNAME?MODULENAME这是在small模式下.其他的模式略有不同。

BITADDRESSABLE:定义一个L51连接后位于可位寻址的区,段长不能超过16B.

2) EQU

格式: 符号名 EQU 表达式

符号名 EQU 寄存器名

EQU伪指令定义一表示数值或寄存器的符号,该符号可用于表达式或助记符指令的操作数,EQU指令定义的符号不能被改变或重新定义,其段类型取决于表达式中的操作数类型类型,无类型的EQU符号可用于任何表达式中.

LIMIT EQU 200

VALUE EQU LIMIT-100+’A’

COUNTER EQU R5

3) SET

格式: 符号名 SET 表达式

符号名 SET 寄存器名

SET指令的功能与EQU指令的功能一样,区别是SET指令定义的符号可以再定义和改变.

VALUE EQU 200

VALUE SET VALUE/2

COUNTER SET R1

TEMP SET COUNTER/2

4) BIT

格式: 符号名 BIT 表达式

BIT指令定义一表示位地址的符号,该符号一经定义便不能重新定义和改变. DATA_BSEG SEGMENT BIT

RSEG DATA_BSEG

CTRL DS 1

FLAG BIT CTRL.1

FLAG2 BIT FLAG+1

5) DATA

格式: 符号名 DATA 表达式

DATA指令定义一表示MCS-51内部数据存储器字节地址的符号,表达式必须是一个绝对地址值或者是一个简单的再定位表达式(即数值确定的,且其值必须在0—255之间,类型必须是DATA或者是NUMBER类型)

例如在汇编程序中:

PORT DATA 90H

RESULT_L DATA 40H

RESULT_H DATA RESULT_L+1

6) XDATA,IDATA,CODE 均是也和DATA一样,都是定义一个代表相应存储空间单元的地址符号,表达式也必须是相对应的类型或者是NUMBER类型。

二初始化和保留指令

1)DS

格式: [标号:] DS 表达式

DS指令以字节为单位,在内部或者外部地址空间中保留存储空间,表达式中不能包含前向地址参考量,可为除BIT段的任何类型。该伪指令语句使当前地址计数器

加上表达式的值,需要注意的是地址计数器加上表达式结果的值不能超出地址空间的范围。(无论是汇编器还是编译器,对每一种不同类型的地址空间(DATA,CODE,PDATA,XDATA,BIT)都产生一个独立的地址计数器,每汇编一条指令,计数器都会自动增加,不过可以用ORG伪指令改变当前段地址计数器,用ORG伪指令表达式的值作为当前段地址计数器的初值,而当前段的改变可以用RSEG伪指令来改变。

RSEG ?DT?FUNCTION?MODULENAE----声明当前段为局部数据段

?FUNCTION?BYTE:-------------函数局部段的别名

TIME: DS 5

2) DBIT

格式 [标号:] DBIT 表达式

以位为单位在可位寻址段内保留存储空间, 表达式中不能包含前向地址参考量或者是再定位的符号和外部符号,该指令使当前地址计数器增加表达式结果值,其增加量以位为单位.

3) DB DW

格式: [标号]: DB/DW 表达式1[,表达式2,………]

这两个指令的作用相同,均是以字节或者是字初始化程序存储空间,上面是保留存储空间,存储空间可以使RAM和ROM,而这两个指令直接就是初始化程序存储空间.

Table: DB “any key to continue!”

Requst: DB LOW(Table),HIGH(Table)

三:程序连接伪指令

1)PUBLIC

格式: PUBLIC 符号1 [,符号2,符号3….]

PUBLIC 指令声明可被其他模块使用的全局符号,该符号必须在本模块内定义,但是寄存器和段名不能声明全局符号,全局符号在汇编模块中就是语句前的标号,一般在编写C调用用汇编语言实现的函数很有用.

例如: ?PR?FUNCTION_NAME?FILE_NAME ? SEGMENT CODE

PUBLIC FUNCTION_NAME/_FUNCTIONAME

RSEG ?PR?FUNCTION_NAME?FILE_NAME?

FUNCTION_NAME/_FUNCTIONAME:

从寄存器或者存储区域中取回需要的参数

汇编代码 ;

把返回值放入需要规定的寄存器

RET/RETI --------返回

FUNCTION_NAME前有没有下滑线取决于函数有没有使用寄存器传递参数.

2)EXTRN

格式 EXTRN 段类型1 (符号表1) [,段类型2 (符号表2) , …]指令声明本模块引用的外部全局符号,该指令可出现在出现在源程序的任何地方,每个外部符号都必须是CODE,DATA,IDATA,XDATA,BIT或者NUMBER等段类型之一,段的类型限制了符号使用的范围,例如CODE只能做JMP和CALL等转移和调用类指令的目标地址,而不能做MOV等指令的操作数,L51在连接的时候检查外部符号是否和相应的全局符号相匹配,无类型的符号可以任何段类型的同名符号相匹配.

3)NAME

格式 NAME 目标模块名 --- module_name 目标模块名

NAME指令定义当前程序模块的目标模块名,目标模块名不同于目标文件名,也不同于源程序名,当未给出目标模块名的时候,则以不带扩展名的源文件名命名,且每个目标模块只允许一个名字.

四:状态和段选择指令

1)END

该指令必须位于源程序的最后一行,且只能在程序中出现一次,在END的语句不汇编.

2)ORG

格式 ORG 表达式

ORG伪指令改变当前汇编器当前段地址计数器,用表达式的值作为当前段地址计数器的值,表达式中不能有前向参考量,并且只能是一个绝对地址或简单再定位表达式.

3)RSEG

格式 RSEG 段名

RSEG指令选择一个已定义的再定位的段作为当前有效段,具体什么段,由在定义段名的时候段的类型决定, 可在当前段保留存储空间,初始化程序空间,安排程序代码.

例如: DATA_SEG SEGMENT DATA

CODE_SEG SEGMENT CODE

RSEG DATA_SEG

DS 2

COUNT: DS 3

RSEG CODE_SEG

STRING: DB “Press any key to continue”,0

START: MOV A,#80H

<汇编代码>

END

4)CSEG,DSEG,ISEG,XSEG,BSEG

格式: CSEG [AT 绝对地址值]

DSEG [AT 绝对地址值]

ISEG [AT 绝对地址值]

XSEG [AT 绝对地址值]

BSEG [AT 绝对地址值]

以上的几条指令分别和CODE,DATA,IDATA,XDATA,BIT段相对应,当指令中包含一个基地址(AT绝对地址值时),汇编器结束当前段并产生一个起始于绝对地址的新段,如果指令中不包含一个基地址选项,则当汇编器已经有当前段的时候,则不改变当前段,即忽略该指令,

例如:

BSEG AT 70H

DECMODE: DS 2

CSEG AT 0H

LJMP MAIN

LJMP INT_0

需要注意的是:这里的AT和变量的绝对定位_at_不一样,那是C51编译器的关键字的扩展,在C元文件中可以用的,而这个指令是在A51中的.

5)USING

格式 :USING 表达式

USING指令使A51选择适当的寄存器组计算寄存器的绝对地址,该指令类似于C51中的REGISTERBANK编译控制指令的功能,USING不进行寄存器组的切换,表达式的值必须是0—3之间,由表达式的值A51可以计算出寄存器符号AR0—AR7的绝对地址,当程序中需要使用Arn的时候,有必要先使用Using.

例如: USING

POP AR2

PUSH AR3

四:A51的宏指令

A51允许使用宏定义,在汇编时对被调用的宏进行展开,一般用在需要重复一串指令的时候.可以用宏嵌入参数的办法来实现,减少发生错误的可能性.A51能处理MACRO,ENDM,LOCAL,REPT,IRP,IRPC,EXITM宏调用等宏指令,在程序中,宏必须先定义才能调用.

1)MACRO—ENDM

格式宏名 MACRO [形参表]

宏体

ENDM

宏能嵌套定义,用ENDM来结束本级宏定义,汇编器能自动计算MACRO指令的个数,并将每个ENDM指令与MACRO相匹配.

宏的调用:宏一经定义便可在程序中多次调用,调用的时候必须给出宏名和实参,以便在扩展的时候用实参替代形参,

格式 : [标号] 宏名 [实参表]

MACRO_NAME MACRO X,Y

MOV A,#X

MOV B,#Y

MUL AB

ENDM

程序;

MACRO_NAME 20H,30H ;宏调用

2)LOCAL

格式: LOCAL 符号名 [,符号名,……]

功能:将宏体中的符号定义成局部的,LOCAL指令必须紧跟在MACRO指令之后,也就是说宏体中的符号必须在使用之前定义成局部符号,否则在重复调用该宏时会产生错误.LOCAL指令只能在宏体内部使用.

A51汇编器的解释

五:A51的汇编控制指令

A51提供的汇编控制指令,针对A51汇编器的,用于改变A51的状态,A51汇编器能够识别2类汇编控制指令,首要的汇编控制指令和次要的汇编控制指令.

首要控制指令:首要控制指令只能在源程序中出现一次,可以放在命令行或者是源程序的开头,他们不能被别的控制改变.如果需要使用多个首要控制指令,则最好把他们放在源程序的开头,(这样可以在命令行中少输入这些指令,)首要控制指令在源程序中一行只能由一个首要控制指令,

命令的格式: $ 汇编控制指令 (参数)

以$符号开始,且位于第一列,符号与控制指令助记符之间要有空格.

次要控制指令,次要控制指令不能出现在命令行中,只能出现在源程序中,其命令的格式个首要控制指令的格式一样.

一: 首要控制指令

1) DEBUG/NODEBUG

缩写:DB/NODB

默认值:NODEBUG

功能:DEBUG指示A51在目标文件中加入DS51或其他的Intel兼容的仿真器使用的调试信息,而NODEBUG指示不加入调试信息.

2) OBJECT/NOOBJECT

缩写: OJ/NOOJ

参数:仅OBJECT 需要以用括号括起来的文件名

默认值:OBJECT(源文件名.OBJ)

功能:OBJECT指示生成以文件名参数命名的目标文件,如果该指令末未带文件名,则默认目标文件名与源文件名相同,扩展名.OBJ,通常目标文件与源文件位于同一目录下.NOOBJECT指示不生成目标文件.默认的控制是生成与源文件同名,扩

展名.OBJ.

3) PRINT/NOPRINT

缩写:PR/NOPR

参数:可有可无的由括号括起来的文件名(仅PRINT指令需要)

默认值:PRINT(源文件名.LST)

功能:PRINT生成以文件名参数命名的列表文件,如果未指定文件名,默认的列表文件名为源文件名.LST.NOPRINT指示不生成列表文件.默认的控制是生成与源

文件名同名的,扩展名为.LST的列表文件.

4) SYMBOLS/NOSYMBOLS

缩写:SB/NOSB

默认值:SYMBOLS

功能:SYMBOLS指示在列表文件中生成符号表,该指令的功能可被NOPRINT抑制,而NOSYMBOLS指示不生成符号表,该指令的功能可被XREF(在列表文件中生成符号的交叉参考列表)指令激活,默认的控制为SB,即在列表文件中生成符号表.

5) MOD51/NOMOD51

缩写:MO/NOMO

默认值:MOD51

功能:MOD指令使编程者能使用预定义的8051的BIT和DATA符号,而NOMOD51使51不识别8051所定义的所有符号,从而使用户可以对MCS-51系列其他的单片机编程并自定义符号文件.自定义的文件必须使用 $ INCLUDE指令包含到源文件中去,(这种格式是在A51源文件中,在C源文件中使用预处理指令 #Include

这种格式.)在这种格式下,需要使用 $ NOMOD51 指令,否则会因为多重定义产生错误.

6) COND和 NOCOND

默认值:COND

功能:指示在列表文件中列出IF—ELSEIF—ENDIF条件汇编结构中未汇编的部分.NOCOND指示不列出未汇编的部分,此时未列出的部分可以通过丢失的行号识别.默认的控制是COND,即在列表文件中列出为汇编的部分.

二次要控制指令

次要控制指令可多次出现在源程序中的任何地方,但不能出现在命令行,对于同一指令的多次出现,A51总是只接受最新出现的指令的控制.

1) INCLUDE

参数:用括号括起来的文件名

功能:在该指令出现的地方插入参数所指定的文件名,INCLUDE指令可以嵌套,该指令常和NOMOD51指令一起使用,在程序中除了插入为单片机自定义的包含文件外,也可以使有效的汇编语言源代码.

Example : $ INCLUDE (REG52.inc)

2) 条件汇编

条件汇编语据属于次要控制指令,但SET 和 RESET 可在源程序或者是命令行中使用.使用条件汇编,可根据不同需要部分的汇编源程序代码,使用同一程序能满足不同的应用需要.

条件汇编的部分是位于IF/ELSEIF/ELSE/ENDIF指令之间的源代码块,他们又带有美元符和不带美元符两种不同形式.两种形式的差异仅在于前者只能访问由SET 和 RESET指令定义的符号,而后者可访问除SET和RESET定义之外所有的符号.除SET 和RESET指令可用于命令行之外,其他的条件汇编条件汇编指令只能用于源程序中.

a) SET 和RESET

参数:(变量[,变量][,变量]……)

(变量=数值[,变量=数值][,变量=数值]……)

(变量,变量=数值,变量[,……]…)

功能:指令SET和RESET将变量赋值,这些变量与CODE,BIT,DATA,IDATA,XDATA 不同,他们只能用在条件汇编的表达式里以控制条件汇编,不能用于其他地方.数值的类型可以是常数或者是无类型的表达式.

Example:

$ SET (TMP,TMP1=55,TMP2,TMP3)

将变量TMP,TMP2,TMP3赋默认值0FFFFH(TURE) ,变量TMP1被赋值为55

$ RESET (TMP,VAR,TMP3)

将变量TMP,VAR,TMP3都赋以默认值0000H(FALSE).

固定循环功能

固定循环

固定循环 数控铣床和加工中心的固定循环的本质和作用与数控车床一样,其根本目的是为了简化程序、减少编程工作量。 一般数控铣床中的固定循环主要用于孔加工,如钻孔、鏜孔、攻丝等。

固定循环 1.固定循环的组成 通常固定循环由6个动作组成(见右图):(1)在X,Y平面上定位;(2)快速运行到R平面;(3)孔加工操作;(4)暂停;(5)返回到R平面;(6)快速返回到起始点。 由此可知,固定循环只能在X-Y平面上使用,Z轴仅作孔加工进给。此时平面选择功能无效,其中动作(3)的进给速度由F代码给定。 加工过程:机床总是首先快速定位于X,Y坐标,并快速下刀于R点,然后以F速度加工至Z坐标定义的深度位置。

固定循环 2.编程格式 格式如下: G90(G91)G98(G99)(G73~G88)X Y Z R Q P F K 数据格式返回点位置孔加工方式孔位置孔加工参数循环次数 X,Y为孔在X—Y平面上的位置;Z为孔底位置; R为快进的终止面(一般距零件表面2~5mm); Q在G73和G83中为每次的切削深度,在G76和G87中为偏移值,它始终是增量坐标值; P为在孔底位置的暂停时间,与G04相同; F为切削进给速度; K为重复加工次数,范围是1~6,当K=l时,可以省略,当K=0时,不执行孔加工。

固定循环 G90和G91决定孔加工数据的形式。孔加工指令为模态码,只能被G80或01组代码取代。主轴的快移、暂停、正反转、停转等操作,由循环加工指令控制面自动实现。 G98,G99决定加工结束后的返回位置,G98指令返回到初始平面。G99指令返回到R平面。当使用G99指令时,如果在台阶面上加工孔,从低面向高面加工时,会产生现象碰撞现象,这一点必须引起注意。

数控车床单一固定循环指令

数控车床单一固定循环指令 当车削加工余量较大,需要多次进刀切削加工时,可采用循环指令编写加工程序,这样可减少程序段的数量,缩短编程时间和提高数控机床工作效率。根据刀具切削加工的循环路线不同,循环指令可分为单一固定循环指令和多重复合循环指令。 单一固定循环指令 对于加工几何形状简单、刀具走刀路线单一的工件,可采用固定循环指令编程,即只需用一条指令、一个程序段完成刀具的多步动作。固定循环指令中刀具的运动分四步:进刀、切削、退刀与返回。 1. 外圆切削循环指令(G90) 指令格式 G90X(U)_ Z(W)_ R_ F_ 指令功能实现外圆切削循环和锥面切削循环,刀具从循环起点按图1与图2所示走刀路线,最后返回到循环起点,图中虚线表示按R快速移动,实线表示按F指定的工件进给速度移动。 图1 外圆切削循环

图2 锥面切削循环 指令说明 X、Z 表示切削终点坐标值; U、W 表示切削终点相对循环起点的坐标分量; R 表示切削始点与切削终点在X轴方向的坐标增量(半径值),外圆切削循环时R为零,可省略; F表示进给速度。 例题1 如图3所示,运用外圆切削循环指令编程。 图3 外圆切削循环应用

G90 X40 Z20 F30 A-B-C-D-A X30 A-E-F-D-A X20 A-G-H-D-A 例题2 如图4所示,运用锥面切削循环指令编程。 图4 锥面切削循环应用 G90 X40 Z20 R-5 F30 A-B-C-D-A X30A-E-F-D-A X20A-G-H-D-A 2. 端面切削循环指令(G94) 指令格式 G94 X(U)_ Z(W)_ R_ F_ 指令功能实现端面切削循环和带锥度的端面切削循环,刀具从循环起点,按图5与图6所示走刀路线,最后返回到循环起点,图中虚线表示按R快速移动,实线按F指定的进给速度移动。

汇编语言知识大全

第一章基础知识: 一.机器码: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

FANUC系统的11种孔加工固定循环指令

FANUC系统的11种孔加工固定循环指令 FANUC系统共有11种孔加工固定循环指令,下面对其中的部分指令加以介绍。 1)钻孔循环指令G81 G81钻孔加工循环指令格式为: G81 G△△ X__ Y__ Z__ R__ F__ X,Y为孔的位置、Z为孔的深度,F为进给速度(mm/min),R为参考平面的高度。G△△可以是G98和G99,G98和G99两个模态指令控制孔加工循环结束后刀具是返回初始平面还是参考平面;G98返回初始平面,为缺省方式;G99返回参考平面。 编程时可以采用绝对坐标G90和相对坐标G91编程,建议尽量采用绝对坐标编程。 其动作过程如下 (1)钻头快速定位到孔加工循环起始点B(X,Y); (2)钻头沿Z方向快速运动到参考平面R; (3)钻孔加工; (4)钻头快速退回到参考平面R或快速退回到初始平面B。 该指令一般用于加工孔深小于5倍直径的孔。 编程实例:如图a所示零件,要求用G81加工所有的孔,其数控加工程序如下: 图a 图b N02 T01 M06; 选用T01号刀具(Φ10钻头) N04 G90 S1000 M03; 启动主轴正转1000r/min N06 G00 X0. Y0. Z30. M08; N08 G81 G99 X10. Y10. Z-15. R5 F20; 在(10,10)位置钻孔,孔的深度为15mm,参考平面高度为5mm,钻孔加工循环结束返回参考平面 N10 X50; 在(50,10)位置钻孔(G81为模态指令,直到G80取消为止)

N12 Y30; 在(50,30)位置钻孔 N14 X10; 在(10,30)位置钻孔 N16 G80;取消钻孔循环 N18 G00 Z30 N20 M30 2)钻孔循环指令G82 G82钻孔加工循环指令格式为: G82 G△△ X__ Y__ Z__ R__ P__ F__ 在指令中P为钻头在孔底的暂停时间,单位为ms(毫秒),其余各参数的意义同G81。 该指令在孔底加进给暂停动作,即当钻头加工到孔底位置时,刀具不作进给运动,并保持旋转状态,使孔底更光滑。G82一般用于扩孔和沉头孔加工。 其动作过程如下 (1)钻头快速定位到孔加工循环起始点B(X,Y); (2)钻头沿Z方向快速运动到参考平面R; (3)钻孔加工; (4)钻头在孔底暂停进给; (5)钻头快速退回到参考平面R或快速退回到初始平面B。 3)高速深孔钻循环指令G73 对于孔深大于5倍直径孔的加工由于是深孔加工,不利于排屑,故采用间段进给(分多次进给),每次进给深度为Q,最后一次进给深度≤Q,退刀量为d(由系统内部设定),直到孔底为止。见图b所示。 G73高速深孔钻循环指令格式为: G73 G△△ X__ Y__ Z__ R__ Q__ F__

A51的汇编控制指令即宏指令

A51汇编器是运行于IBM PC系列及其兼容机上的交叉汇编软件,其主要功能是将MCS-51系列单片机汇编语言源程序翻译成符合Intel目标文件格式的可再定位的目标代码,经过L51连接器的连接和装配,产生可被DS51仿真器调试或其它任何一种与Intel 目标文件格式兼容的仿真器使用的绝对目标代码. 一:A51的符号:在A51中可使用符号表示数值(EQU),地址和寄存器名,符号具有段类型,作用域,值域和可变性等属性. 符号的段属性:指出符号所位于的地址空间.段类型有: NUMBER 无类型符号 DATA DATA段符号(可直接寻址的内部RAM空间) IDATA IDATA段符号(可间接寻址的内部RAM空间) XDATA XDATA段符号(外部数据存储空间) BIT BIT段符号(内部RAM低地址区的可位寻址的空间) CODE CODE段符号(程序存储器空间) REGISTER 寄存器符号 作用域:指出符号是外部的,局部的还是全局的.(PUBLIC,EXTRN关键字说明) 二:标号:定义标号时,标号名后必须接冒号”:”,以示区别,每行只能定义一个标号,标号一经定义,其值为当前地址计数器的当前值,因此标号代表了指令和数据的地址,不能重复定义. 三:特殊的汇编符号:A51宏汇编语言定义了代表CPU寄存器的特殊符号,这些是保留的关键字,AR0---AR7:表示当前工作寄存器的R0—R7的绝对地址,它的值取决于指令所选择的工作寄存器组. 四:运算符:有三种 1):算术运算符包括:+,-(正负号),加---+,减,乘,除,MOD(取模),()—括号,改变运算顺序. 2):二进制运算符号:用来对二进制数进行按位取反,移位或逻辑运算.包 括:NOT(按位取反),HIGH(取右边操作数的高8位,LOW(取右边操作数的低8 位)SHR(右移位),SHL(左移位),AND(逻辑与),OR(逻辑或),XOR(逻辑异或). 3):关系运算符:>=,<=,<>,=,<,>. 所有运算符的优先级顺序:()→NOT,HIGH,LOW→+,-(正负号)→*,/,MOD→+,-(加减)→SHR,SHL→AND,OR,XOR→>=,<=,<>,>,<,=. 数值表达式:数值表达式由运算符和操作数组成,一个操作数又可以是表达式,与符号具有段属性一样,表达式也具有段类型属性,表达式的类型依赖于操作数的类型.表达式的类型如下:BIT,NUMBER,CODE,DATA,IDATA,XDATA.大多数的表达式是无类型的,当表达式中包含有段类型的操作数或者是子表达式时,运算结果的段类型遵循下面的原则: 对于单目运算符:(+/-/HIGH/LOW/NOT)表达式的结果与操作数具有相同的类型. 对于所有的双目运算符(除+/-),表达式的结果均为无类型的结果. 对加减运算,只有当其中的一个操作数具有段类型的时候,运算结果才具有相同的段类型,如果两个操作数具有段类型,即使他们的段类型一样,结果也是无类型的(NUMBER). 总结:只有当操作数加上或者是减去一个无类型时,才可能产生一类型,其他所有的组合均产生无类型的表达式.

单片机汇编指令大全

单片机汇编指令一览表 作者:乡下人 助记符指令说明字节数周期数 (数据传递类指令) 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

(完整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段寄存器中。

宏汇编软件的使用宏汇编软件MASM51的使用

宏汇编软件的使用宏汇编软件MASM51的使用 第一节概述 单片机开发可以用手工汇编和机器汇编两种方法。采用手工汇编就是先编写出汇编程序,然后对照单片机汇编表手工将汇编程序翻译成机器码,最后将机器码一个一个地送入开发仿真器的RAM中去进行调试。 由于采用手工汇编的机器码是相对于存储器的绝对地址进行定位的,因此在调试时,若要在程序中增加或删除一条指令,就会造成指令的绝对地址发生变化。这样除修改那条指令外,几乎所有转移、调用指令的操作数都要作相应的修改,稍有疏忽程序就会出错。 而采用机器汇编,在很大程度上可以避免上述麻烦。只要通过键盘输入源程序后,其余作工作都由计算机来进行,即查出相应的机器码,对地址进行定位,建立能被开发装置接收的机器码文件、建立能打印出清单的列表文件等等。机器码不需要再一个一个地从仿真器的键盘上键入,只要从PC机的通讯口直接传送到开发装置中去。因此使用机器汇编大大提高了单片机开发的速度。 源程序被输入到机器中后,以一个文件的形式保存起来,然后就可以对这个文件进行处理了,要对这个文件进行汇编,必须有相应的汇编程序。在PC机上进行汇编的程序有多种,以下介绍的MASM51软件就是其中的一种,它的主要特点有: 1.对用户编写的源程序格式要求不太严格,例如,英文字母的大、小写不受限制,变量名或标号名没有长度限制,对源程序中的空格数也没有严格的要求等等。这些给用户编写程序带来很大的方便。 2.具有较强的功能,例如支持宏语句,使同一程序中类似的程序结构,只要输入一次,在使用时可用宏语句调用。此外还允许用条件汇编语句以及完善的伪指令系统等。减少了编写、输入源程序的工作量。 3.不管用户的源程序有多少错误,它都能全部汇编完,并能形成列表文件及目标文件,以供用户修改错误。 4.可以接收汉字注释,并能完整的将汉字注释复制到列表文件,而其它一些汇编软件则不能处理汉字,或会使列表文件中的汉字注释混乱。 运行MASM51软件的条件很低,现在的PC机都能达到。 第二节如何启动MASM51宏汇编程序 一、启动和退出 MASM51软件有两个文件:MASM51.EXE和MASM51.OVL,只要将这两个文件拷入硬盘的一个目录中(如MASM51)中,然后在DOS命令行中打入: MASM51(回车) 即在显示器上显示如下信息: The Cybernetic Micro Systems CYS-8051 Software Package Version 3.03` for the IBM Personal Computer (C)Copy right Cybrenetic MIcro Systems,Inc 1983,1984,1985, 1986 High Level Language Commands

固定循环指令

固定循环 一、内、外径固定形状粗切循环指令G90 1、圆柱面切削循环 (1)指令格式:G90 X(U)__Z(W)__F__ X(U)、Z(W)为切削终点坐标,循环示意为下图 (2)指令练习:如下图完成Φ35圆柱面粗车 (3)运用技巧 ①G90切削循环指令用于外径、内径的粗加工。G90主要强调轴向切削,刀具采用外圆或内孔刀具。 ②G90切削终点即是固定循环中循环起点的对角点。 ③G90指令为模态指令,注销G90可以用的指令有G01、G02、G00、G03等。 ④华中系统固定形状切削循环指令为G80。 2、锥面车削循环

(1)指令格式:G90 X(U)__Z(W)__R(或I)__F__; X(U)、Z(W)为切削终点坐标,R(I)为圆锥面加工起、终点的半径差,有正、负之分。 车削循环过程如下图所示 (2)指令练习,如下图完成锥面粗车 (3)应用技巧: ①确定循环起点时,应考虑离开端面一段距离。如图中起点坐标为(55,4),以免发生干涉或碰刀。 ②R(或I)值的确定(见下图)

R=±2KL =±2) 201(L L L K ++(当起点直径小于终点直径时取负值,反之取正值) 式中K :锥度 L1:切入段锥长 L :切削锥长 L2:切出段锥长 L0:工作锥长 二、断面切削循环指令G94 1、 直断面固定循环 指令格式:G94 X(U)__Z(W)__F__; 2、锥端面车削固定循环 指令格式:G94 X(U)__Z(W)__R__F__; X(U)、Z(W)表示切削终点坐标,R 为锥面起、终点Z 坐标的差值,有正负之分。 车削循环过程如下图

3、应用技巧 (1)G94主要用于断面方向的加工,强调X向进刀切削。 (2)G94切削终点即是固定形状中循环起点的对角点。 (3)G94为模态指令,注销可以用G01、G02、G03等指令。(4)循环起点两个方向坐标应设在工件毛坯外,以免干涉或碰撞。 4、指令练习 (1)完成下图直端面的循环加工 (2)完成下图锥端面的循环加工

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 注意:

汇编语言常见指令

?PTR?操作符:强制类型转换 MOV BYTE PTR [BX], 20H ;1B立即数20H送DS:[BX] MOV WORD PTR [BX], 20H ;立即数20H送DS:[BX], ;00H送DS:[BX+1] 2.LEA(Load Effective Address) 设:变量X的偏移地址为1020H , (BP)=0020H 执行指令后: LEA DX, X LEA BX, [BP] ; 执行后, (DX) = 1020H ; 执行后, (BX) = 0020H 3.地址传送指令LDS,LES LDS REG16, MEM ; 从存储器取出4B,送入REG16和DS LES REG16, MEM ; 从存储器取出4B,送入REG16和ES 4.符号扩展指令CBW,CWD CBW ;将AL寄存器内容符号位扩展到AH CWD ;将AX寄存器内容符号位扩展到DX 设:(AX)= 8060H,(DX)=1234H 执行下列指令后 CBW ;(AX)= 0060H 设:(AX)= 8060H,(DX)=1234H 执行下列指令后 CWD ;(DX)= 0FFFFH,(AX)= 8060H 5.交换指令XCHG 例如,(AX)= 5678H 执行下面指令后 XCHG AH, AL ;(AX)= 7856H 6.换码指令XLAT XLAT ;AL←DS: [BX+AL] 表格的首地址事先存放在内存逻辑地址DS: BX中, AL的内容是相对于表格的位移量, 把对应内存的内容取出放在AL寄存器。 7.逻辑运算符 SHR(右移) SHL(左移) AND(与) OR(或) XOR(异或)

汇编语言指令的构成

第一讲 第四章汇编语言程序设计-语句特点、伪指令 回顾:8086/8088的内部结构、寄存器功能和工作过程,指令格式、寻址方式和功能。 重点和纲要:汇编语言程序设计-语句特点、伪指令(了解汇编的概念及其方法, 掌握汇编程序的基本格式,常用运算符的使用方 法,汇编的步骤。了解伪指令的功能,掌握定义数据、符号、 段、过程等伪指令的使用方法,能编写格式正确的汇编程序)。 讲授内容: 4.1 汇编语言的基本元素 一、汇编语言的语句格式 由汇编语言编写的源程序是由许多语句(也可称为汇编指令)组成的。每个语句由1~4个部分组成,其格式是: [标号] 指令助记符[操作数][;注解] 其中用方括号括起来的部分,可以有也可以没有。每部分之间用空格(至少一个)分开,一行最多可有132个字符。 1.标识符 是给指令或某一存储单元地址所起的名字。可由下列字符组成: 字母:A ~ z ;数字:0 ~ 9 ;特殊字符:?、·、@、一、$ 。 数字不能作标识符的第一个字符,而圆点仅能用作第一个字符。标识符最长为31个字符。当标识符后跟冒号时,表示是标号。它代表该行指令的起始地址;当标识符后不带冒号时,表示变量;伪指令前的标识符不加冒号。 2.指令助记符

表示不同操作的指令,可以是8088的指令助记符,也可以是伪指令。 3.操作数 是指令执行的对象。依指令的要求,可能有一个、两个或者没有, 例如: RET ;无操作数 COUNT : INC CX ;一个操作数 如果是伪指令,则可能有多个操作数,例如: COST DB 3,4,5,6,7 ;5个操作数 MOV AX ,[BP 十4] ;第二个操作数为表达式 4.注解 该项可有可无,是为源程序所加的注解,用于提高程序的可读性。 二、 汇编语言的运算符 1.算术运算符、逻辑运算符和关系运算符 ① 算术运算符可以应用于数字操作数,结果也是数字。而应用于存储器操作数时,只有+、- 运算符有意义。 2.取值运算符SEG 、OFFSET 、TYPE 、SIZE 和LENGTH · SEG 和OFFSET 分别给出一个变量或标号的段地址和偏移量。 例如,定义: SLOT DW 25 则:MOV AX ,SLOT ;从SLOT 地址中取一个字送入AX MOV AX ,SEG SLOT ;将SLOT 所在段的段地址送入AX MOV AX ,OFFSET SLOT ;将SLOT 所在段的段内偏移地址送AX · TYPE 操作符返回一个表示存储器操作数类型的数值。各种存储器地址操作数类型部分的值如表3-1所示。 · LENGTH 和SIZE 操作符只应用于数据存储器操作数。(用DB/DW/DD 等定义的操作数) LENGTH 返回一个与存储器地址操作数相联系的单元数, SIZE 操作数返回一个为存储器操作数分配的字节数。 例如:若 MULT-WORD DW 50DUP (0) 则 LENGTH (MULT-WORD )=50 表3-1存储器操作数的类型属性及返回值

ARM汇编伪指令宏的用法详解_MACRO-MEND_.

ARM 汇编伪指令宏的用法详解(MACRO-MEND 宏是一段独立的程序代码,它是通过伪指令定义的,在程序中使用宏指令即可调用宏。当程序被汇编时,汇编程序将对每个调用进行展开,用宏定义取代源程序中的宏指令。 MACRO 、MEND 语法格式: MACRO [$ label] macroname{ $ parameter1, $ parameter,…… } 指令序列 MEND MACRO 伪操作标识宏定义的开始,MEND 标识宏定义的结束。用MACRO 及MEND 定义一段代码,称为宏定义体,这样在程序中就可以通过宏指令多次调用该代码段。 其中, $ label在宏指令被展开时,label 会被替换成相应的符号,通常是一个标号。在一个符号前使用$表示程序被汇编时将使用相应的值来替代$后的符号。 macroname 为所定义的宏的名称。 $parameter为宏指令的参数。当宏指令被展开时将被替换成相应的值,类似于函数中的形式参数,可以在宏定义时为参数指定相应的默认值。 宏指令的使用方式和功能与子程序有些相似,子程序可以提供模块化的程序设计、节省存储空间并提高运行速度。但在使用子程序结构时需要保护现场,从而增加了系统的开销,因此,在代码较短且需要传递的参数较多时,可以使用宏汇编技术。首先使用MACRO 和MEND 等伪操作定义宏。包含在 MACRO 和 MEND 之

间的代码段称为宏定义体,在MACRO 伪操作之后的一行声明宏的原型(包含宏名、所需的参数),然后就可以在汇编程序中通过宏名来调用它。在源程序被汇编时,汇编器将宏调用展开,用宏定义体代替源程序中的宏定义的名称,并用实际参数值代替宏定义时的形式参数。 宏定义中的$label是一个可选参数。当宏定义体中用到多个标号时,可以使用类似$label.$internallabel的标号命名规则使程序易读。 MACRO 、 MEND 伪操作可以嵌套使用。 使用示例: MACRO $HandlerLabel HANDLER $HandleLabel ;宏的名称为HANDLER ,有1个参数$HandleLabel $HandlerLabel sub sp,sp,#4 stmfd sp!,{r0} ;decrement sp(to store jump address ;PUSH the work register to stack(lr does not push because it return to original address ;load the address of HandleXXX to r0 ;load the contents(service routine start address of HandleXXX ;store the contents(ISR of HandleXXX to stack ;POP the work register and pc(jump to ISR ldr r0,=$HandleLabel ldr r0,[r0] str r0,[sp,#4] ldmfd sp!,{r0,pc} MEND ;在程序中调用该宏

如何使用宏汇编程序MASM

如何使用宏汇编程序MASM.EXE和连接程序LINK.EXE 1、首先在硬盘上建立一个文件夹,例如:D:\MASM. 2、下载MASM.EXE和LINK.EXE到D:\MASM文件夹里. 3、经过以上两步,我们已经做好了准备工作,接下来书写程序。 我们的程序要求为,计算 y = a × b + c - 18,a、b、c 均为带符号的8位二进制数据,为了实验观看实验结果,我们假设 a = 34H、b = 56H、c = E7H。 程序原代码如下(分号后面内容为注释内容,可以不输入): CC EQU 18 ;伪指令定义CC STACK SEGMENT ;堆栈段起始 DW 256 DUP(?) ;在堆栈段中预留了256个字的内容 TOP LABEL WORD ;TOP为栈顶偏移地址 STACK ENDS ;堆栈段结束 DATA SEGMENT ;数据段起始 DAT1 DB 34H ;DAT1即为题中操作数a,为字节,存于数据段中 DAT2 DB 56H ;DAT2即为题中操作数b,为字节,存于数据段中 DAT3 DB 0E7H ;DAT3即为题中操作数c,为字节,存于数据段中 DATY DW ? ;DATY即为题中计算结果的预留空间为字,存于数据段中 DATA ENDS ;数据段结束 CODE SEGMENT ;代码段起始 ASSUME CS:CODE,DS:DATA,SS:STACK ;分配段地址对应关系 START: MOV AX,DATA ;START为标号,MOV语句完成DATA数据段地址送入AX MOV DS,AX ;将AX内容送入DS,即赋予DS数据段DATA的段地址 MOV AX,STACK ;将STACK堆栈段地址送入AX MOV SS,AX ;将AX内容送入SS,即赋予SS堆栈段STACK的段地址 MOV SP,OFFSET TOP ;SP设初值 MOV AL,DAT1 ;取a,直接寻址方式 MOV BL,DAT2 ;取b,直接寻址方式 IMUL BL ;AX <- AL * BL,即将a * b的值存入AX MOV BX,AX ;将AX内容保存至BX MOV AL,DAT3 ;取c,直接寻址方式 CBW ;由于c是8位有符号数,所以做符号扩展至AH ADD AX,BX ;AX <- AX + BX,即完成的操作为将a*b+c结果存入AX SUB AX,CC ;AX <- AX - 18 MOV DATY,AX ;将a*b+c-18的内容存放至数据段中偏移地址DATY的内存中 MOV AH,4CH ;将4CH存入AH,为了下句调用DOS 21号中断 INT 21H ;调用DOS 21中断,由AH=4CH决定返回DOS操作系统

单片机汇编语言指令集

汇编语言的所有指令数据传送指令集 MOV 功能: 把源操作数送给目的操作数 语法: MOV 目的操作数,源操作数 格式: MOV r1,r2 MOV r,m MOV m,r MOV r,data XCHG 功能: 交换两个操作数的数据 语法: XCHG 格式: XCHG r1,r2 XCHG m,r XCHG r,m PUSH,POP 功能: 把操作数压入或取出堆栈 语法: PUSH 操作数POP 操作数 格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA 功能: 堆栈指令群 格式: PUSHF POPF PUSHA POPA LEA,LDS,LES 功能: 取地址至寄存器 语法: LEA r,m LDS r,m LES r,m XLAT(XLATB) 功能: 查表指令 语法: XLAT XLAT m 算数运算指令 ADD,ADC 功能: 加法指令 语法: ADD OP1,OP2 ADC OP1,OP2 格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data 影响标志: C,P,A,Z,S,O SUB,SBB 功能:减法指令 语法: SUB OP1,OP2 SBB OP1,OP2 格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影响标志: C,P,A,Z,S,O

INC,DEC 功能: 把OP的值加一或减一 语法: INC OP DEC OP 格式: INC r/m DEC r/m 影响标志: P,A,Z,S,O NEG 功能: 将OP的符号反相(取二进制补码) 语法: NEG OP 格式: NEG r/m 影响标志: C,P,A,Z,S,O MUL,IMUL 功能: 乘法指令 语法: MUL OP IMUL OP 格式: MUL r/m IMUL r/m 影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志) DIV,IDIV 功能:除法指令 语法: DIV OP IDIV OP 格式: DIV r/m IDIV r/m CBW,CWD 功能: 有符号数扩展指令 语法: CBW CWD AAA,AAS,AAM,AAD 功能: 非压BCD码运算调整指令 语法: AAA AAS AAM AAD 影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD) DAA,DAS 功能: 压缩BCD码调整指令 语法: DAA DAS 影响标志: C,P,A,Z,S 位运算指令集 AND,OR,XOR,NOT,TEST 功能: 执行BIT与BIT之间的逻辑运算 语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位 SHR,SHL,SAR,SAL 功能: 移位指令 语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL

汇编符号大全

80X86 汇编指令符号大全 +、-、*、/∶算术运算符。 &∶宏处理操作符。宏扩展时不识别符号和字符串中的形式参数,如果在形式参数前面加上一个& 记号,宏汇编程序就能够用实在参数代替这个形式参数了。 $∶地址计数器的值——记录正在被汇编程序翻译的语句地址。每个段均分配一个计数器,段内定义的所有标号和变量的偏移地址就是当前汇编地址计数器的值。 ?∶操作数。在数据定义语句中,操作数用?,其作用是分配并保留存储空间,但不存入确定的数据。 =∶等号伪指令——符号定义。对符号进行定义和赋值,功能与EQU相似,但允许(重复)再定义。 :∶修改属性运算符(操作符)——段操作符。用来临时给变量、标号或地址表达式指定一个段属性(不用缺省的段寄存器),自动生成一个“跨段前缀字节”。注意,段寄存器CS和ES不能被跨越,堆栈操作时也不能跨越SS。 ;∶注释符号。 %∶特殊宏操作符,用来将其后的表达式(通常是符号常数,不能是变量名和寄存器名)转换成它所代表的数值,并将此数值的ASCII码嵌入到宏扩展中。 ( )∶1.运算符——用来改变运算符的优先级别。2.教材符号,表示括号内存储单元(或寄存器)的内容。 < >∶宏调用时用来将带间隔符(如空格,逗号等)的字符串(作为实参)括起来。[ ]∶1.运算符。方括号括起来的数是数组变量的下标或地址表达式。带方括号的地址表达式必须遵循下列原则,①只有BX、BP、SI、DI这四个寄存器可在方括号内出现;②BX或BP可单独出现在各方括号中,也可以与常数、SI或DI一起出现在方括号内,但不允许BX 和BP出现在同一个方括号内;③SI和DI可以单独出现在各方括号内,也可以与常数、BP 或BX一起出现在方括号内,但不允许SI和DI出现在同一个方括号内;④一个方括号内包含多个寄存器时,它们只能作加法运算;⑤若方括号内包含基址指针BP,则隐含使用堆栈段寄存器SS提供段基址,否则均隐含使用数据段寄存器DS提供段基址。2.教材符号,表示其中的内容可省略。 .LIST∶伪指令。用于打开列表文件输出。 .RADIX∶伪指令。把缺省的基数改为2-16范围内的任意基数。.RADIX不影响DD、DQ、DT伪指令,在这些伪指令中,输入的数值只要没有加上数据类型就认为是十进制数。 .XLIST∶伪指令。用于关闭列表文件输出。 %OUT∶伪指令。在汇编时显示其后的信息。 AAA∶指令助记符——加法运算后的ASCII调整(非压缩的BCD码)。无操作数,调整的加法结果在AL中。AF和CF的状态改变说明结果大于9。检查AL的低四位是否为合法的BCD码(0-9),如果合法就清除AL的高四位以及AF和CF标志。当AL的低四位表示的数大于9或AF=1时,将AL加6,AH加1 ,并使AF和CF置位,清除AL中的高四位。任何一个A—F之间的数加上6 以后,都会使AL低4位产生0-9之间的数,从而达到调整的目的。 AAD∶指令助记符——除法的ASCII调整(非压缩的BCD码)。在执行除法操作前,必须利用AAD指令将非压缩型BCD码表示的数转换成二进制数送AL。步骤是,先将被除数的高位数(AH中的内容)乘以10,然后加到AL的低位数中,接着将AH清零。 AAM∶指令助记符——乘法的ASCII调整(非压缩的BCD码)。用于将字节乘法的积转换成两个合法的十进制非压缩码。AAM不带操作数,假定成绩在AH和AL中,并将调整后的非压缩码送回AH和AL。为了保证AAM得到正确的结果,原乘数和被乘数必须是合法

汇编指令大全

ORG 0000H NOP ;空操作指令 AJMP L0003 ;绝对转移指令 L0003: LJMP L0006 ;长调用指令 L0006: RR A ;累加器A内容右移(先置A为88H) INC A ; 累加器A 内容加1 INC 01H ;直接地址(字节01H)内容加1 INC @R0 ; R0的内容(为地址) 的内容即间接RAM加1 ;(设R0=02H,02H=03H,单步执行后02H=04H) INC @R1 ; R1的内容(为地址) 的内容即间接RAM加1 ;(设R1=02H,02H=03H,单步执行后02H=04H) INC R0 ; R0的内容加1 (设R0为00H,单步执行后查R0内容为多少) INC R1 ; R1的内容加1(设R1为01H,单步执行后查R1内容为多少) INC R2 ; R2的内容加1 (设R2为02H,单步执行后查R2内容为多少) INC R3 ; R3的内容加1(设R3为03H,单步执行后查R3内容为多少) INC R4 ; R4的内容加1(设R4为04H,单步执行后查R4内容为多少) INC R5 ; R5的内容加1(设R5为05H,单步执行后查R5内容为多少) INC R6 ; R6的内容加1(设R6为06H,单步执行后查R6内容为多少) INC R7 ; R7的内容加1(设R7为07H,单步执行后查R7内容为多少) JBC 20H,L0017; 如果位(如20H,即24H的0位)为1,则转移并清0该位L0017: ACALL S0019 ;绝对调用 S0019: LCALL S001C ;长调用 S001C: RRC A ;累加器A的内容带进位位右移(设A=11H,C=0 ;单步执行后查A和C内容为多少) DEC A ;A的内容减1 DEC 01H ;直接地址(01H)内容减1 DEC @R0 ;R0间址减1,即R0的内容为地址,该地址的内容减1 DEC @R1 ; R1间址减1 DEC R0 ; R0内容减1 DEC R1 ; R1内容减1 DEC R2 ; R2内容减1 DEC R3 ; R3内容减1 DEC R4 ; R4内容减1 DEC R5 ; R5内容减1 DEC R6 ; R6内容减1 DEC R7 ; R7内容减1 JB 20H,L002D;如果位(20H,即24H的0位)为1则转移 L002D: AJMP L0017 ;绝对转移 RET ;子程序返回指令 RL A ;A左移 ADD A,#01H ;A的内容与立即数(01H)相加 ADD A,01H ; A的内容与直接地址(01H内容)相加 ADD A,@R0 ; A的内容与寄存器R0的间址内容相加 ADD A,@R1 ; A的内容与寄存器R1的间址内容相加

相关文档