当前位置:文档之家› 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汇编器能够识别2类汇编控制指令,首要的汇编控制指令和次要的汇编控制指令.

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

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

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

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

一: 首要控制指令

1) DEBUG/NODEBUG

缩写:DB/NODB

默认值:NODEBUG

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

1) OBJECT/NOOBJECT

缩写: OJ/NOOJ

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

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

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

2) PRINT/NOPRINT

缩写:PR/NOPR

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

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

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

3) SYMBOLS/NOSYMBOLS

缩写:SB/NOSB

默认值:SYMBOLS

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

4) MOD51/NOMOD51

缩写:MO/NOMO

默认值:MOD51

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

5) 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).

汇编语言程序设计————计算器

课程设计说明书 题目: 表达式计算器 学号: 班级: 计算机创新实验班 姓名:廖福轩 目录 一.设计内容 (2) 二.设计方案 (2) 1、主程序模块、 (2) 2、赋权值模块、 (2) 3、加减乘除运算子程序模块、 (2) 4、调用赋权宏子程序模块、 (2) 5、回车换行宏模块、 (2) 6、9号功能显示字符串宏模块、 (2) 三.设计框图 (3) 四.程序代码 (4) 五.运行结果 (9) 六.设计总结 (9) 计算器汇编语言程序设计 一.设计内容 从键盘输入一个十进制两位数的四则运算表达式,如23*56-(8*19)/6+67-8=,编程计算表达式的值,输出十进制结果(有可能就是三位或四位十进制),+-*/位置任意。并要求

程序能反复执行直道对“还要继续不?(y/n)”之类的提示回答“n”或“N”为止。 四则运算主要包括以下几个模块: (1)主程序模块、 (2)赋权宏模块、 (3)加减乘除运算子程序模块、 (4)调用赋权宏子程序模块、 (5)回车换行宏模块、 (6)9号功能显示字符串宏模块、 二.设计方案 1、主程序模块、 主程序初始化数据段,调用显示宏show显示界面,输入字符或数字并判断,调用子程序dyfq调用赋权宏fq为符号赋权,从而判断优先级,调用加减乘除运算子程序ys对判断出的相应运算符进行运算,输出运算结果,判断就是否继续,继续则返回输入,不继续则退出程序、 2、赋权宏模块、 通过定义宏fq,定义了变元a,b进行参数传递,并使用替换运算符&使变元a与标号s对应、接着给对应的符号赋予权值,将其权值存入ch中、 3、加减乘除运算子程序模块、 运算模块实现了将ax入栈保存,然后将ax,bx赋值为0,判断cl中的符号就是否为乘号*,若为乘号*则将number中的数字与其下一位的数字相乘,并把结果存入该位置,类似的若不为乘号*则接着判断就是否为除号/,若为除号/则进行除法运算,然后判断就是否为加法,为加法则进行加法运算,接着判断就是否为减法,为减法则进行减法运算并将结果存入当前的计算的第二个数的位置、 4、调用赋权宏子程序模块、 该模块实现了调用赋权宏fq为(,),*,/,+,-,=等符号分别赋权值为5,1,4,4,3,3,0、从而可以通过设定的权值来判断优先级、 5、回车换行宏模块、 通过2号功能的输出功能,将0dh赋予dl输出,再调用2号功能,将0ah赋予dl输出,从而实现回车换行功能、 6、9号功能显示字符串宏模块、 通过定义宏show,用9号显示功能,通过变元str将字符串显示出来。 三.设计框图

汇编语言指令表

汇编语言指令表文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

伪指令 1、定位伪指令 ORG m 2、定义字节伪指令 DB X1,X2,X3,…,Xn 3、字定义伪指令 DW Y1,Y2,Y3,…,Yn 4、汇编结束伪指令 END 寻址方式 MCS-51单片机有五种寻址方式: 1、寄存器寻址 2、寄存器间接寻址 3、直接寻址 4、立即数寻址 5、基寄存器加变址寄存器间接寻址 6、相对寻址 7、位寻址 数据传送指令 一、以累加器A为目的操作数的指令(4条) MOV A,Rn ;(Rn)→A n=0~7 MOV A,direct ;( direct )→A MOV A,@Ri ;((Ri))→A i=0~1 MOV A,#data ; data →A 二、以Rn为目的操作数的指令(3条) MOV Rn ,A;(A)→ Rn MOV Rn ,direct;( direct )→ Rn MOV Rn ,#data; data → Rn 三、以直接寻址的单元为目的操作数的指令(5条) MOV direct,A;(A)→direct MOV direct,Rn;(Rn)→direct MOV direct,direct ;(源direct)→目的direct MOV direct,@Ri;((Ri))→direct MOV direct,#data; data→direct 四、以寄存器间接寻址的单元为目的操作数的指令(3条) MOV @Ri,A;(A)→(Ri) MOV @Ri,direct;(direct)→(Ri) MOV @Ri,#data; data→(Ri) 五、十六位数据传送指令(1条) MOV DPTR,#data16;dataH→DPH,dataL →DPL

魔兽世界宏命令地编写教程

调出宏命令的编辑窗口有两种方式: 1.在聊天栏输入/MACRO后回车。 2.按ESC调出系统菜单选择【宏命令设置】 看见了吧? 弹出一个窗口,上面有【新建】和【退出】两个按钮。点【新建】,又会弹出一个窗口。五颜六色的图标包括了WOW几乎所有的技能图片,随便选一个你喜欢的,它就是你设置的宏命令的图标了,给它取个名字吧!方便你用的时候好找。然后回到第一个窗口,它的下半部分是一个输入栏(别说找不到…),在里面输入宏的内容,然后点【退出】。 我们以牧师为例:选中牧师“复活术”的图标,在名称处填写‘复活’。返回到第一个窗口在输入栏中输入下面的命令: /me 开始施放复活术 /me 的复活术被%t抵抗 /me 开始变得愤怒了 /me 获得了狂暴效果 /me 施放皮鞭失败:%t对此免疫 /me 施放辣椒水失败:%t爱吃川菜 /me 开始施放色诱术(空格,空格…….)%t 复活了! /施放复活术(等级 1) PS:一定要注意%t是在英文输入下输入的。中文输入法下是全角模式不被系统接收。HOHO~接下来你要做的就是把这个代表你宏命令的图标用鼠标左键拉到快捷栏里,可以设定热键来使用,也可以用鼠标点击。反正是想怎么用就怎么用…,使用方式和普通技能相同 最后留给大家一个思考题,在上面的例子中,“/me”、“%t”“/施放”都是什么作用,牧师职业的玩家可以自行制作后观看效果,可以更改文字,以加强抓狂效果:非牧师职业可以找牧师借鉴。牧师就是好!就是好! 宏命令的初级教程(上) 有了前两章的基础,大家对魔兽世界的宏命令应该有了一定的认识。下面我将对宏命令做出更加详细的介绍, 魔兽世界的宏命令大概有几千个,在初级教程里面将讲解最常用的命令,实现的功能也相对简单。有些人在此时可能在想编写一个宏可以完成一套攻击动作,如“换武器――施法――换回武器”等等。这确实是一套连续动作,不过能实现这套动作的叫外挂而不是宏,魔兽的宏不支持带有冷却时间的技能连续使用,因此那些想要自动完成某套动作的玩家你们的白日梦可以醒醒了。^_^ 我这样说是不是会很打击大家的信心啊?好了。我们赶快开始。举个例子先:网上一个很经典的宏例子 /Kneel /say 如果你不嫁给我,那么我就一辈子不起来…” 这样你的人物就会先下跪再说:"如果你不嫁给我,那么我就一辈子不起来…" 在这里用到两个宏命令/Kneel和/say,宏命令是不分大小写的。/kneel是个下跪的动作,/say后面的文字会以普通对话的形式在游戏中表现出来。我们可以变化一下。 /Kneel /y 如果你不嫁给我,那么我就一辈子不起来…” 最后的话是大喊而不是普通对话。大喊是用红字表示出来的。同理,我们可以把/say、/y 变成/g(工会说话),/p(小队说话),把/kneel变成/dcane(跳舞)等等。

基于51单片机的计算器设计程序代码汇编

DBUF EQU 30H TEMP EQU 40H YJ EQU 50H ;结果存放 YJ1 EQU 51H ;中间结果存放GONG EQU 52H ;功能键存放 ORG 00H START: MOV R3,#0 ;初始化显示为空MOV GONG,#0 MOV 30H,#10H MOV 31H,#10H MOV 32H,#10H MOV 33H,#10H MOV 34H,#10H MLOOP: CALL DISP ;PAN调显示子程序WAIT: CALL TESTKEY ; 判断有无按键JZ WAIT CALL GETKEY ;读键 INC R3 ;按键个数 CJNE A,#0,NEXT1 ; 判断就是否数字键 LJMP E1 ; 转数字键处理NEXT1: CJNE A,#1,NEXT2 LJMP E1 NEXT2: CJNE A,#2,NEXT3 LJMP E1 NEXT3: CJNE A,#3,NEXT4 LJMP E1 NEXT4: CJNE A,#4,NEXT5 LJMP E1 NEXT5: CJNE A,#5,NEXT6 LJMP E1 NEXT6: CJNE A,#6,NEXT7 LJMP E1 NEXT7: CJNE A,#7,NEXT8 LJMP E1 NEXT8: CJNE A,#8,NEXT9 LJMP E1 NEXT9: CJNE A,#9,NEXT10 LJMP E1 NEXT10: CJNE A,#10,NEXT11 ;判断就是否功能键LJMP E2 ;转功能键处理NEXT11: CJNE A,#11,NEXT12 LJMP E2 NEXT12: CJNE A,#12, NEXT13 LJMP E2

编译方法实验报告(中间代码生成器的设计)

编译方法实验报告 2011年10月

一、实验目的 熟悉算术表达式的语法分析与中间代码生成原理。 二、实验内容 (1)设计语法制导翻译生成表达式的四元式的算法; (2)编写代码并上机调试运行通过。 输入——算术表达式; 输出——语法分析结果; 相应的四元式序列。 (3)设计LL(1)分析法或LR(0)分析法的属性翻译文法,并根据这些属性翻译文法,使用扩展的语法分析器实现语法制导翻译。 三、实验原理及基本步骤 ●算术表达式文法: G(E): E →E ω0 T | T T →T ω1 F | F F → i | (E) ●文法变换: G’(E) E →T {ω0 T} T →F {ω1 F} F → i | (E) ●属性翻译文法: E →T {ω0“push(SYN,w)” T “QUAT”} T →F {ω1“push(SYN, w)” F “QUAT”} F →i “push(SEM, entry(w))” | (E) 其中: push(SYN, w) —当前单词w入算符栈SYN; push(SEM, entry(w)) —当前w在符号表中的入口值压入语义栈SEM; QUA T —生成四元式函数 i.T = newtemp; ii.QT[j] =( SYN[k], SEM[s-1], SEM[s], T); j++; iii.pop( SYN, _ ); pop( SEM, _ ); pop( SEM, _ ); push( SEM, T ); ●递归下降子程序: 数据结构:SYN —算符栈; SEM —语义栈;

四、数据结构设计 使用递归的结构进行四元式的设计,同时,运用堆栈结构将四元式的输出序列打印出来 while ( exp[i]=='+' || exp[i]=='-'){ syn[++i_syn]=exp[i]; //push(SYN,w) i++; //read(w) T(); quat();} while ( exp[i]=='*' || exp[i]=='/'){ syn[++i_syn]=exp[i]; //push(SYN,w) i++; //read(w) F(); quat();} void quat(){ strcpy(qt[j],"(, , , )");

单片机-- 简易计算器汇编程序

NAME T11 单片机--简易计算器汇编程序 ;将键盘的KA10~KA12接8259的KA0~KA2;RL10~RL17接8255A的RL0~RL7 ; T11 8279键盘显示接口实验二 CSEG AT 0000H LJMP START CSEG AT 4100H START: MOV DPTR,#00CFE9H ;8279命令字 MOV A,#0D1H ;清显示 MOVX @DPTR,A LOOP1: MOVX A,@DPTR ANL A,#0FH JZ LOOP1 ;有键按下?没有则循环等待 MOV A,#0A0H ;显示\消隐命令 MOVX @DPTR,A MOV A,#40H ;读FIFO命令 MOVX @DPTR,A MOV DPTR,#0CFE8H ;读键值 MOVX A,@DPTR MOV R1,A ;保存键值加个F MOV DPTR,#0CFE9H ;写显示RAM命令 MOV A,#80H ;选中LED1 MOVX @DPTR,A MOV A,R1 ANL A,#0FH ;取后半字节 MOV DPTR,#TAB MOVC A,@A+DPTR ;取段显码 MOV DPTR,#0CFE8H ;写显示RAM MOVX @DPTR,A MOV DPTR,#0CFE9H ;写显示RAM命令 LOOP2: MOVX A,@DPTR ;输入显示符号 ANL A,#0FH JZ LOOP2 ;有键按下?没有则循环等待 MOV A,#0A0H ;显示\消隐命令 MOVX @DPTR,A MOV A,#40H ;读FIFO命令 MOVX @DPTR,A MOV DPTR,#0CFE8H ;读键值 MOVX A,@DPTR MOV R2,A ;保存键值 MOV DPTR,#0CFE9H ;写显示RAM命令 MOV A,#81H ;选中LED2 MOVX @DPTR,A MOV A,R2 ANL A,#0FH ;取后半字节

STM 常用汇编指令

在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初始化,进出中断时的环境保护,恢复等对性能有要求的地方。 ARM指令集可以分为六大类,分别为数据处理指令、Load/Store指令、跳转指令、程序状态寄存器处理指令、协处理器指令和异常产生指令。 ARM指令使用的基本格式如下: 〈opcode〉{〈cond〉}{S}〈Rd〉,〈Rn〉{,〈operand2〉} opcode操作码;指令助记符,如LDR、STR等。 cond可选的条件码;执行条件,如EQ、NE等。 S可选后缀;若指定“S”,则根据指令执行结果更新CPSR中的条件码。 Rd目标寄存器。 Rn存放第1操作数的寄存器。 operand2第2个操作数 arm的寻址方式如下: 立即寻址 寄存器寻址 寄存器间接寻址 基址加偏址寻址 堆栈寻址 块拷贝寻址 相对寻址 这里不作详细描述,可以查阅相关文档。 数据处理指令 Load/Store指令 程序状态寄存器与通用寄存器之间的传送指令 转移指令 异常中断指令 协处理器指令 在S3C2410、S3C2440的数据手册中对各种汇编指令有详细的描述;这里只对较常见的作写介绍。 1、相对跳转指令:b、bl 这两条指令的不同之处在于bl指令除了跳转之外,还将返回地址(bl的下一条指令的地址)保存在lr寄存器中。 这两条指令的可跳转范围是当前指令前后32M。 b funa .... funa: b funb ....

funb: .... 2、数据传送指令mov,地址读取伪指令ldr mov指令可以把一个寄存器的值赋给另外一个寄存器,或者把一个常数赋给寄存器。 mov r1,r2 mov r1,#1024 mov传送的常数必须能用立即数来表示。当不能用立即数表示时,可以用ldr命令来赋值。ldr是伪命令,不是真实存在的指令,编译器会把它扩展成真正的指令;如果该常数能用“立即数”来表示,则使用mov指令,否则编译时将该常数保存在某个位置,使用内存读取指令把它读出来。 ldr r1,=1024 3、内存访问指令ldr、str、ldm、stm ldr既可以指低至读取伪指令,也可以是内存访问指令。当他的第二个参数前面有'='时标伪指令,否则表内存访问指令。 ldr指令从内存中读取数据到寄存器,str指令把寄存器的指存储到内存中,他们的操作数都是32位的。 ldr r1,[r2,#4] ldr r1,[r2] ldr r1,[r2],#4 str r1,[r2,#4] str r1,[r2] str r1,[r2],#4 寄存器传送指令可以用一条指令将16个可见寄存器(R0~R15)的任意子集合(或全部)存储到存储器或从存储器中读取数据到该寄存器集合中。与单寄存器存取指令相比,多寄存器数据存取可用的寻址模式更加有限。多寄存器存取指令的汇编格式如下: LDM/STM{}Rn{!}, 4、加减指令add、sub add r1,r2,#1 sub r1,r2,#1 5、程序状态寄存器的访问指令msr,mrs ARM指令中有两条指令,用于在状态寄存器和通用寄存器之间传送数据。修改状态寄存器一般是通过“读取-修改-写回”三个步骤的操作来实现的。这两条指令分别是: 状态寄存器到通用寄存器的传送指令(MRS) 通用寄存器到状态寄存器的传送指令(MSR) 其汇编格式如下: MRS{}Rd,CPSR|SPSR 其汇编格式如下:

中间代码生成实验报告doc

中间代码生成实验报告 篇一:编译方法实验报告(中间代码生成器) 编译方法实验报告 XX年10月 一、 实验目的 熟悉算术表达式的语法分析与中间代码生成原理。 实验内容二、 (1)设计语法制导翻译生成表达式的四元式的算法; (2)编写代码并上机调试运行通过。 输入——算术表达式; 输出——语法分析结果; 相应的四元式序列。 (3)设计LL(1)分析法或LR(0)分析法的属性翻译文法,并根据这些属性翻译文 法,使用扩展的语法分析器实现语法制导翻译。 三、实验原理及基本步骤 ●算术表达式文法: G(E):E ? E ω0 T | T T ? T ω1 F | F F ? i | (E) ●文法变换:

G’(E) E ? T {ω0 T(本文来自:小草范文网:中间代码生成实验报告)} T ? F {ω1 F} F ? i | (E) ●属性翻译文法: E ? T {ω0 “push(SYN, w)” T “QUAT”} T ? F {ω1 “push(SYN, w)” F “QUAT”} F ? i “push(SEM, entry(w))” | (E) 其中: push(SYN, w) —当前单词w入算符栈SYN; push(SEM, entry(w)) —当前w在符号表中的入口值压入语义栈SEM; QUAT —生成四元式函数 i.T = newtemp; ii.QT[j] =( SYN[k], SEM[s-1], SEM[s], T); j++; iii.pop( SYN, _ ); pop( SEM, _ ); pop( SEM, _ ); push( SEM, T ); ●递归下降子程序: 数据结构:SYN —算符栈; SEM —语义栈; 四、数据结构设计 使用递归的结构进行四元式的设计,同时,运用堆栈

2位数计算器程序-汇编语言课程设计

信息学院课程设计题目:2位数计算器程序设计 __ 姓名: __ _____ 学号: ____ ___ 班级: 课程:汇编语言 ________ 任课教师:侯艳艳 ____ 2011年12月

课程设计任务书及成绩评定

目录 摘要 (2) 1.设计目的………………………………………………………………………………………………?2 2.概要设计………………………………………………………………………………………………?3 2.1系统总体分析…………………………………………………………………………?3 2.2程序流程图 (3) 3.详细设计......................................................................................................? (4) 3.1主程序及子程序说明 (4) 3.2程序代码编写 (4) 4.程序调试 (6) 4.1运行界面分析 (6) 4.2算法的分析 (6) 4.3调试过程及分析 (6) 5.心得体会 (7) 5.1设计体会...................................................................................................? (7) 5.2系统改进...................................................................................................? (7) 参考文献 (8)

魔兽世界宏命令集(小白教程)

本教程没有收录所有的宏,意在教会新手制作属于自己的宏,得到更多游戏的快乐。 /cast [<第一组条件选项>] <第一个法术名称>; [<第二组条件选项>] <第二个法术名称>; [<第三组条件选项>] <第三个法术名称>;...” /castsequence [<条件选项>] reset=<#>/target/combat <法术1>, <法术2>, <法术3> 你可以在任何条件选项前加上“no”来得到反效果,比如,“nocombat”则在脱离战斗的情况下成立。 用逗号“,”来分隔条件选项作用和“and”一样,当条件选项同时成立时执行。 用斜杠“/”来分隔条件选项作用和“or”一样,当其中一个条件选项成立时执行。 2.0以前宏举例。 1、小D判断连击点数释放技能,也适用于盗贼: /script if ( GetComboPoints() >= 3 ) then CastSpellByName("凶猛撕咬(等 级 3)"); else CastSpellByName("爪击(等级 4)") end 2、常用的密语格式 /script SendChatMessage(“主动给钱或是由我抢劫二选一”,” say”,”通用语”,” YELL”) "SAY":普通说话2."WHISPER":密语 1."GUILD":工会 2."PARTY":小队 3."RAID":组团 4."YELL":大喊 /script UIErrorsFrame:Clear()可以隐藏并清除提示。Clear也可改为Hide。 3、如果目标生命大于20,释放抽取生命法术,否则使用灵魂抽取。 /script if (UnitHealth("target")>20) then CastSpellByName("抽取生命") else CastSpellByName("灵魂抽取") end 4、使用奥暴,当法力值不足400,用法力红宝石补充并提醒队友 /script if (UnitMana("player")>400) then CastSpellByName("魔爆术(等 级 6)") else UseContainerItem(4, 1);SendChatMessage(“魔法将要耗尽,大家小心!”,”yell”); end 2.0可用的条件选项有:[……] help - 检测目标是否为友善 harm - 检测目标是否为敌对 combat - 检测你是否在战斗中 stance或stance:0/1/2../n检测你是否在姿态中,或是否在某个特定的姿态中 stealth - 检测你是否潜行 equipped: - 检测某个物品是否被装备。可以是任何有效的装备槽,物品分类,或者物品子类target =player/pet/targettarget/Unit 它把当前目标改变为任何有效的单位 pet: <宠物名称或类型> 玩家当前宠物为某宠物Voidwalker,Boar,Imp,Wolf,pet为所有宠物类型 actionbar:1/…./6检测当前动作条是否为列出的那个 button:1/…/5/<虚拟按键号>检测某个特定的按钮被用来触发法术,默认为1即左键点击,2为右键点击,3为鼠标中间点击,4,5为鼠标特殊按键点击。 modifier或modifier:shift/ctrl/alt - 检测命令被执行时是否某个特定的键被按下,可以简写为mod以节省字节。 pet: - 检测宠物是否存在。可以接受宠物类型(枭,熊,小鬼)或者名字(Fluffy,我家坏坏)作为条件。不带条件则检测是否有任何宠物存在。 mounted,swimming,flying,flyable- 检测是否在坐骑上,游泳,或者飞行中,能够飞行状态 indoors,outdoors - 检测是在室内还是室外 exists 和dead - 检测是否目标已经死亡,或是否真的存在

汇编语言实现简单的计算器运算

汇编语言实现简单的计算器运算 DA TAS SEGMENT x dw 0 op db 0 DIV ARRAY dw 10000,1000,100,10,1 DA TAS ENDS stack segment db 100 dup(?) stack ends CODES SEGMENT ASSUME CS:CODES,DS:DA TAS,ss:stack START: MOV AX,DATAS MOV DS,AX next: call do_cal ;输入第一个表达式如:5+3= call show ;输出表达式结果 mov dl,0dh mov ah,02h int 21h mov dl,0ah mov ah,02h int 21h ;回车换行 jmp next ;跳回输入第二个表达式 do_cal: ;输入表达式 call input ;输入数 cmp al,'e' jz exit MOV OP,AL CMP OP,'+' jnz next1 call do_add jmp next5 next1: CMP OP,'-' JNZ NEXT2 CALL DO_SUB JMP NEXT5 NEXT2: CMP OP,'*' JNZ NEXT3 CALL DO_MUL JMP NEXT5 NEXT3:

CMP OP,'/' JNZ NEXT4 CALL DO_DIV jmp next5 NEXT4: cmp op,'=' call show next5:ret ;判断运算符input: ;输入数字xor bx,bx mov cx,10 skip: MOV AH,1 INT 21H cmp al,'0' jl skip1 cmp al,'9' jg skip1 push ax mov ax,bx mul cx mov bx,ax pop ax and al,0fh xor ah,ah add bx,ax jmp skip skip1:ret do_add: ;加法 mov x,bx call input ;输入第二个数 add bx,x ret do_sub: ;减法 mov x,bx call input ;输入第二个数 sub x,bx mov bx,x ret do_mul: ;乘法 mov x,bx call input ;输入第二个数 mov ax,bx mul x mov bx,ax

实验五 编译 用语法制导方式生成中间代码生成器

实验5 用语法制导方式生成中间代码生成器 一、实验目的 掌握语法制导定义和翻译的原理和技术,在语法分析器的基础上,加上语义分析,构造一个中间代码生成器。 二、实验内容 在实验四生成的语法分析器基础上加入语义动作,将源程序翻译为对应的中间代码序列。 三、实验要求 1. 个人完成,提交实验报告。实验报告必须包括设计的思路,以及测试报告(输入测试例子,输出结果)。 2. 实验报告中给出采用测试源代码片断,及其对应的三地址码形式(内部表示形式可以自行考虑)。 例如,程序片断 对应的中间代码为:

四、实验过程 本次实验运用flex和bison工具进行中间代码的生成。并自动生成中间代码。 1.首先创建一个example文件夹,该文件夹中包含有flex.exe 2.用文本编译器编辑相应的flex文件mylex.l,此次mylex.l可以在上次实验的 l文件上做一些修改,再利用flex将l文件生成相应的lex.yy.c程序,mylex.l 的代码如下所示: mylex.l %{ #include "myyacc.tab.h" %} delim [ \t\n\r] ws {delim}+ letter [A-Za-z] digit [0-9] id {letter}({letter}|{digit})* integer {digit}+ exponent E[+-]?{integer} number {integer}{exponent}? real integer(\.integer)?{exponent}? %option noyywrap %% "<"|"<="|">"|">="|"!="|"==" { filloperator(&yylval, yytext); return( REL); }

单片机简易计算器设计(汇编语言)

KEYBUF EQU 40H ;键号存放单元 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV KEYBUF,#0 ;初始键号设位0,也可以为任意值 MOV R0,#30H ;显示首地址 MOV R2,#0CH ;计算数据存放单元个数 CLR A QING: MOV @R0,A;将数据存放单元清零 INC R0 DJNZ R2,QING MOV P0,#8FH ;关闭显示 MOV R1,#30H ;将显示首地址存放R1里 ;=============================================== ;五位无符号显示子程序 DIS1: MOV R0,#30H ;把显示数据第一位放在R0里 MOV R2,#04H ;把显示的位码放在R2里 MOV R3,#05H ;把显示的长度放在R3里 DIS2: MOV A,@R0 ANL A,#0FH ;屏蔽显示数据的高四位 MOV B,A MOV A,R2 ANL A,#0FH ;屏蔽位码的高四位 SW AP A ORL A,B MOV P0,A;送总显示数据到P0显示 LCALL DELY4ms ;调用延时4ms INC R0 ;取下一个显示数据 DEC R2 DJNZ R3,DIS2 ;四位显示晚后重新开始显示 ;=================================================== ;键盘扫描子程序 WAIT: MOV P1,#0FFH ;P1口送高电平 CLR P1.0 ;第一行清零 MOV A,P1 ;读P1口 ANL A,#0F0H ;低位屏蔽 XRL A,#0F0H ;判断低位是否有低电平,即判断是否有按键按下 JZ NOKEY1 ;地位有低电平继续扫描,否者跳到第而行去扫描 LCALL DELY10ms ;延时10ms去抖在进行判断是否有按键按下 MOV A,P1 ;继续读P1口 ANL A,#0F0H ;判断低位是否有低电平 CJNE A,#0E0H,NK1 ;如果扫描数据不为0E0H就转到NK1 MOV KEYBUF,#0 ;否者判断为0号键 AJMP DK ;转DK1查表程序

汇编指令

数据传送指令MOV 格式: MOV OPRD1,OPRD2 功能: 本指令将一个源操作数送到目的操作数 中,即OPRD1<--OPRD2. 堆栈操作指令PUSH和POP 格式: PUSH OPRD POP OPRD 功能: 实现压入操作的指令是PUSH指令;实现弹出 操作的指令是POP指令. 数据交换指令XCHG 格式: XCHG OPRD1,OPRD2 其中的OPRD1为目的操作数,OPRD2为源操作数 功能: 将两个操作数相互交换位置,该指令把源操 作数OPRD2与目的操数OPRD1交换. 查表指令XLAT 格式: XLAT TABLE其中TABLE为一待查表格的首地址. 功能: 把待查表格的一个字节内容送到AL累加器 中. 在执行该指令前,应将TABLE 先送至BX寄存器中,然后将待查 字节与在表格中距表首地址位移 量送AL,即(AL)<--((BX)+ (AL)). 标志传送指令LAHF 格式: LAHF 功能: 取FLAG标志寄存器低8位至AH寄存器.(AH)< -(FLAG)7~0 标志传送指令SAHF 格式: SAHF 功能: 将AH存至FLAG低8位 标志传送指令PUSHF

功能: 本指令可以把标志寄存器的内容保存到堆栈 中去 标志传送指令POPF 格式: POPF 功能: 本指令的功能与PUSHF相反,在子程序调用和中断服务程序中,往往用PUSHF指令保护FLAG的内容,用POPF指令将保护的FLAG内容恢复. 有效地址传送指令LEA 格式: LEA OPRD1,OPRD2 功能: 将源操作数给出的有效地址传送到指定的的 寄存器中. 从存储器取出32位地址的指令LDS 格式: LDS OPRD1,OPRD2 功能: 从存储器取出32位地址的指令. 从存储器取出32位地址的指令LES 格式: LES OPRD1,OPRD2 功能: 从存储器取出32位地址的指令. 加法指令ADD(Addition) 格式: ADD OPRD1,OPRD2 功能: 两数相加 带进位加法指令ADC(Addition Carry) 格式: ADC OPRD1,OPRD2 功能: OPRD1<--OPRD1 + OPRD2 + CF 加1指令INC(INCrement by 1) 格式: INC OPRD 功能: OPRD<--OPRD+1 未组合的十进制加法调整指令AAA(ASCII Adgust for Addition)

WOW宏命令使用说明

1.常用的宏命令 1.1常用的宏命令 1.1.1.释放技能命令 ●/cast 释放一个或多个技能,可以加入一些条件判断,是最常用的命令 ●/castsequence 依次释放释放数个技能,同样可以加入一些条件判断,常见于所谓的"无脑宏" ●/use 使用一个物品,可以直接用物品名称也可以用物品栏位置 1.1. 2.动作命令 ●/cancelform 取消变形 ●/cancelaura 取消状态或增益 ●/startattack 开始攻击,一般写不写差别不大,释放技能会自动开始攻击的 ●/stopattack 停止攻击,与startattack相反,用于防止破除控制等功能,也不大会用到 ●/target /targetenemy 切换目标,用到的也不多,抓贼宏会用到,更多时候需要的反而是不切换目标的情况下对特定目标释放技能 ●/mount 召唤坐骑 ●/dismount 解散坐骑 1.1.3.语言表情命令 ●/1 /2 /3 /4 在不同的频道里面说话,1综合,2交易,3本地防务,4寻求组队

●/s /y /p /ra /bg 在不同的范围说话,s说,y喊,p小队,ra团队,bg战场 ●/e 做出一串表情,同时也可以/+内置表情 1.1.4.特殊命令 ●#showtooltip 显示技能描述,可以指定技能名或是缺省,让你的界面更有可读性●/focus 指定某个目标为焦点目标 ●/clearfocus 清除焦点目标 ●/stopmacro 停止宏,可加入条件判断 ●/console /script 控制命令,抓贼宏会用到 1.2常用的条件判断 1.2.1.目标条件判断 ●help noharm 目标为友方 ●harm nohelp 目标为敌方 ●exists 目标存在 ●dead nodead 目标死亡/存活 1.2.2.自身条件判断 ●stance:1/2/3/4/5/6 form:1/2/3/4/5/6 处在某形态中,对应为 野性:1熊,2水栖,3豹,4旅行,5飞行

PL0语言编译器的中间代码生成

课程设计报告 ( 2016--2017年度第一学期) 名称:编译技术课程设计 题目:PL/0语言编译器的中间代码生成院系:控制与计算机工程 班级:信安1401 学号:1141290105 学生姓名:黄竞昶 指导教师:徐欢 设计周数:一周 成绩: 日期:2016年12 月29日

1 课程设计的目的和要求 1.1 课程设计的目的 本次设计的时间为1周,目的是通过使用高级语言实现部分算法加强对编译技术和理论的理解。设计的题目要求具有一定的规模,应涵盖本课程内容和实际应用相关的主要技术。 1.2 课程设计的要求 1、要求用递归子程序法/或预测分析法实现对表达式、各种说明语句、控制语句进行语法分析。 2、若语法正确,则用语法制导翻译法进行语义翻译:对说明语句,要求将说明的各符号记录到相应符号表中;对可执行语句,应产生出四元式中间代码并填写到三地址码表中; 3、若语法错误,要求指出出错性质和出错位置(行号)。出错处理应设计成一个出错处理子程序。 2 系统描述 PL/0的编译程序和目标程序的解释执行程序都是用JA V A语言书写的,因此PL/0语言可在配备JA V A语言的任何机器上实现。本次课设开发平台即为JA V A。用递归子程序法实现了对表达式、各种说明语句、控制语句进行语法的分析。其中,对各个变量符号保存到了符号表中。对可执行语句,转化成四元式中间代码进行输出。本程序中,通过出错处理子程序,也进行了语法的错误的记录,并且输出了出错的行号和出错原因。 该程序的输入是打开test文件,通过文件输入流读入,输出有生成的中间代码、符号表内容、错误分析三部分内容,分别用java界面控件显示出来。 2.1 文法的描述 在计算机科学中,文法是编译原理的基础,是描述一门程序设计语言和实现其编译器的方法。文法的描述多用BNF(巴克斯范式),而另一个重要的概念:正则表达式,也是文法的另一种形式。 PL/0文法的EBNF表示: <程序>::= <分程序>. <分程序>::= [<常量说明部分>][<变量说明部分>][<过程说明部分>]<语句> <常量说明部分>::= const<常量定义>{,<常量定义>};

汇编语言指令

汇编语言指令集 数据传送指令集 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 影响标志: C,P,Z,S,O ROR,ROL,RCR,RCL

8051汇编语言计算器设计

8051汇编语言计算器设计 摘要:本计算器是以MCS-51系列8051单片机为核心构成的简易计算器系统。该系统通过单片机控制,实现对4*4键盘扫描进行实时的按键检测,并把检测数据存储下来。整个计算器系统的工作过程为:首先存储单元初始化,显示初始值和键盘扫描,判断按键位置,查表得出按键值,单片机则对数据进行储存与相应处理转换,之后送入LED显示器动态显示。整个系统可分为三个主要功能模块:功能模块一,实时键盘扫描;功能模块二,数据转换成显示器显示;功能模块三,显示器静态显示. 关键字:AT89C51 单片机按键控制 LED显示 第一章引言 计算器一般由运算器、控制器、存储器、键盘、显示器、电源和一些可选外围设备及电子配件通过人工或机器设备组成。低档计算器的运算器、控制器由数字逻辑电路实现简单的串行运算,其随机存储器只有一、二个单元,供累加存储用。高档计算器由微处理器和只读存储器实现各种复杂的运算程序,有较多的随机存储单元以存放输入程序和数据。 本计算器整个系统可分为三个主要功能模块:功能模块一,实时键盘扫描;功能模块二,数据转换成显示器显示;功能模块三,显示器动态显示.具体设计如下: 1、由于要设计的是简单的计算器,可以进行四则运算,为了得到教好的显示效果,采用LCD显示数据和结果。 2、另外键盘包括数字键(0-9)、符号键(+、-、*、/)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算机键盘。 3、执行程序:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。 4、错误提示:当单片机执行程序中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算器得到的结果大于计算器的显示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD上提示错误。 第二章系统硬件结构设计 硬件系统是指构成微机系统的实体和装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。单片机实质上是一个硬件的芯片,在实际应用中,通常很难直接和被控对象进行电气连接,必须外加各种扩展接口电路、外部设备、被控对象等硬件和软件,才能构成一个单片机

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