各种买卖指令
Buy
说明产生一个多头建仓操作。
语法Buy(Numeric Share=0,Numeric Price=0,Bool Delay=False)
参数Share 买入数量,为整型值,默认为使用系统设置参数;
Price 买入价格,为浮点数,默认=0时为使用现价(非最后Bar为Close);
Delay 买入动作是否延迟,默认为当前Bar发送委托,当Delay=True,在下一个Bar执行。
备注产生一个多头建仓操作,无返回值,该函数仅支持交易指令。
该函数仅用于多头建仓,其处理规则如下:
如果当前持仓状态为持平,即MarketPosition = 0 时,该函数按照参数进行多头建仓。
如果当前持仓状态为空仓,即MarketPosition = -1 时,该函数首先平掉所有空仓,达到持平的状态,然后再按照参数进行多头建仓。
如果当前持仓状态为多仓,即MarketPosition = 1 时,该函数将继续建仓,但具体是否能够成功建仓要取决于系统中关于连续建仓的设置,以及资金,最大持仓量等限制。
示例在MarketPosition=0的情况下:
Buy(50,10.2,1) 表示用10.2的价格买入50张合约,延迟到下一个Bar发送委托。
Buy(10,Close) 表示用当前Bar收盘价买入10张合约,马上发送委托。
Buy(5,0) 表示用现价买入5张合约,马上发送委托。
BuyToCover
说明产生一个空头平仓操作。
语法BuyToCover(Numeric Share=0,Numeric Price=0,Bool Delay=False)
参数Share 买入数量,为整型值,默认为平掉当前所有持仓;
Price 买入价格,为浮点数,默认=0时为使用现价(非最后Bar为Close);
Delay 买入动作是否延迟,默认为当前Bar发送委托,当Delay=True,在下一个Bar执行。
备注产生一个空头平仓操作,无返回值,该函数仅支持交易指令。
该函数仅用于空头平仓,其处理规则如下:
如果当前持仓状态为持平,即MarketPosition = 0 时,该函数不执行任何操作。
如果当前持仓状态为多仓,即MarketPosition = 1 时,该函数不执行任何操作。
如果当前持仓状态为空仓,即MarketPosition = -1 时,如果此时Share使用默认值,该函数将平掉所有空仓,达到持平的状态,否则只平掉参数Share的空仓。
示例在MarketPosition = -1的情况下:
BuyToCover(50,10.2,1) 表示用10.2的价格空头买入50张合约,延迟到下一个Bar发送委托。BuyToCover(10,Close) 表示用当前Bar收盘价空头买入10张合约,马上发送委托。BuyToCover(5,0) 表示用现价空头买入5张合约),马上发送委托。
sell
说明产生一个多头平仓操作。(BK)
语法Sell(Numeric Share=0,Numeric Price=0,Bool Delay=False)
参数Share 卖出数量,为整型值,默认为平掉当前所有持仓;
Price 卖出价格,为浮点数,默认=0时为使用现价(非最后Bar为Close);
Delay 卖出动作是否延迟,默认为当前Bar发送委托,当Delay=True,在下一个Bar执行。
备注产生一个多头平仓操作,无返回值,该函数仅支持交易指令。
该函数仅用于多头平仓,其处理规则如下:
如果当前持仓状态为持平,即MarketPosition = 0 时,该函数不执行任何操作。
如果当前持仓状态为空仓,即MarketPosition = -1 时,该函数不执行任何操作。
如果当前持仓状态为多仓,即MarketPosition = 1 时,如果此时Share使用默认值,该函数将平掉所有多仓,达到持平的状态,否则只平掉参数Share的多仓。
示例在MarketPosition=0的情况下:
Sell(50,10.2,1) 表示用10.2的价格卖出50张合约,延迟到下一个Bar发送委托。
Sell(10,Close) 表示用当前Bar收盘价卖出10张合约,马上发送委托。
Sell(5,0) 表示用现价卖出5张合约,马上发送委托。
sellshort
说明产生一个空头建仓操作。
语法SellShort(Numeric Share=0,Numeric Price=0,Bool Delay=False)
参数Share 卖出数量,为整型值,默认为使用系统设置参数;
Price 卖出价格,为浮点数,默认=0时为使用现价(非最后Bar为Close);
Delay 卖出动作是否延迟,默认为当前Bar发送委托,当Delay=True,在下一个Bar执行。
备注产生一个空头建仓操作,无返回值,该函数仅支持交易指令。
该函数仅用于空头建仓,其处理规则如下:
如果当前持仓状态为持平,即MarketPosition = 0 时,该函数按照参数进行空头建仓。
如果当前持仓状态为多仓,即MarketPosition = 1 时,该函数首先平掉所有多仓,达到持平的状态,然后再按照参数进行空头建仓。
如果当前持仓状态为空仓,即MarketPosition = -1 时,该函数将继续建仓,但具体是否能够成功建仓要取决于系统中关于连续建仓的设置,以及资金,最大持仓量等限制。
示例在MarketPosition=0的情况下:
SellShort(50,10.2,1) 表示用10.2的价格空头卖出50张合约,延迟到下一个Bar发送委托。SellShort(10,Close) 表示用当前Bar收盘价空头卖出10张合约,马上发送委托。
SellShort(5,0) 表示用现价空头卖出5张合约,马上发送委托。
对应的BPK,SPK,你清楚了吗
函数名描述
Buy 平掉所有空头持仓,开多头仓位。(*BPK*)
Sell 平掉指定的多头持仓。
SellShort 平掉所有多头持仓,开空头仓位。(*SPK*)
BuyToCover 平掉指定的空头持仓。
获得当前持仓状态,太妙了
MarketPosition
说明获得当前持仓状态。
语法Integer MarketPosition()
参数无
备注获得当前持仓状态,返回值为整型,该函数仅支持交易指令。
返回值定义如下:
-1 当前位置为持空仓
0 当前位置为持平
1 当前位置为持多仓
示例无
内建平仓指令--精华之特色
内建平仓指令
除了上节的Sell和BuyToCover可以进行平仓之外,TradeBlazer公式提供了额外的八种平仓函数,通过合理的应用内建平仓函数,可以帮助您有效的锁定风险并及时获利。
您可以组合使用内建平仓函数,也可以在自己的交易指令中调用内建平仓函数进行平仓,八个内建平仓函数如下:
函数名描述
SetExitOnClose 该平仓函数用来在当日收盘后产生一个平仓动作,将当前所有的持仓按当日收盘价全部平掉。
SetBreakEven 该平仓函数在获利条件满足的情况下启动,当盈利回落达到保本时产生平仓动作,平掉指定的仓位。
SetStopLoss 该平仓函数在亏损达到设定条件时产生平仓动作,平掉指定的仓位。SetProfitTarget 该平仓函数在盈利达到设定条件时产生平仓动作,平掉指定的仓位。SetPeriodTrailing 该平仓函数在盈利回落到设定条件时产生平仓动作,平掉指定的仓位。SetPercentTrailing 该平仓函数在盈利回落到设定条件时产生平仓动作,平掉指定的仓位。SetDollarTrailing 该平仓函数在盈利回落到设定条件时产生平仓动作,平掉指定的仓位。SetInactivate 该平仓函数在设定时间内行情一直在某个幅度内波动时产生平仓动作,平掉指定的仓位。
关于ExitPosition
上述多个平仓函数都用到了参数ExitPosition,作为平仓函数仓位控制的重要参数,有必要对该参数进行单独说明。
ExitPosition是布尔型参数,当ExitPosition=True时,表示将当前所有的持仓作为一个整体,根据其平均建仓成本,计算各平仓函数的盈亏,当条件满足时,会将所有仓位一起平掉;当ExitPosition=False时,表示单独对每个建仓位置进行平仓,单独计算各平仓函数盈亏时,当单个建仓位置条件满足后,平掉该建仓位置即可。
触发单
触发单
触发单是交易开拓者特有的交易方式,触发单是指用户设置条件,将触发单提交到交易开拓者的交易服务器,当设定条件满足情况,交易服务器会自动发送委托到交易所。触发单可以帮助解决用户盯盘的辛苦,及手动发单的速度问题。
触发单分为以下四种类型:吊买、吊卖、追买、追卖。
每个触发单在发送时需要输入以下参数:
触发价格:触发单设定的条件价格,通过比较现价和触发价格确定是否下单。下单之后,该触发单会从交易服务器中删除;
执行价格:条件满足之后,发送委托的价格,设定为0可自动获取当时的叫买/卖价;
过期时间:设定触发单的过期时间,到这个时间还没有触发的订单会被设为过期,不再进行监控。
吊买
吊买是指当现价向下跌破触发价格,即按执行价格产生一个即时买入委托单,如下图所示:吊卖
吊卖是指当现价向上突破触发价格,即按执行价格产生一个即时卖出委托单,如下图所示:追买
追买是指当现价向上突破触发价格,即按执行价格产生一个即时买入委托单,如下图所示:追卖
追卖是指当现价向下跌破触发价格,即按执行价格产生一个即时卖出委托单,如下图所示:
修改或删除触发单
当存在某个商品的触发单,可通过双击帐户管理的触发单页面的项目,打开交易师,进行修改或删除操作。您可以修改数量、触发单类型、触发价格、执行价格、过期时间及止损获利等,完成修改之后,点击[修改]按钮即可完成修改;您可以直接点击[删除]按钮将该触发单删除。
注意: 触发单在发送之后将会生效,该委托单在服务器上运行,此时您关闭程序或电脑不会影响触发单的执行。
SetPercentTrailing(2000,0.2,True); 又是一个宝
SetPercentTrailing(2000,0.2,True); 当前所有持仓盈利在大于2000之后回落,当回落百分比达到20%之后,执行所有持仓位置的百分比回落平仓。(此时是计算所有持仓的盈利数)SetPercentTrailing(1000,0.1,False); 当前持仓的某一个建仓位置的盈利大于1000之后回落,当回落百分比达到10%之后,执行该持仓位置的百分比回落平仓。(此时只计算该持仓位置的盈利)
SetStopLoss(0,2000,True); 当前所有持仓亏损达到2000之后,执行所有持仓位置的止损平仓。(此时是计算所有持仓的亏损数)
SetStopLoss(1,50, False); 当前持仓的某一个建仓位置每张合约的亏损达到50之后,执行该持仓位置的止损平仓。(此时只计算该持仓位置的每张合约亏损)
SetBreakEven(0,2000,True); 当前所有持仓的盈利达到2000之后,启动所有持仓位置的保本平仓。(此时是计算所有持仓的盈利数)
SetBreakEven(1,50, False); 当前持仓的某一个建仓位置每张合约的盈利达到50之后,启动该持仓位置的保本平仓。(此时只计算该持仓位置的每张约的盈利)
精华中精华文华所没有实现复杂策略工具一
循环语句
循环语句包括两种表达方式:For和While。
For
For语句是一个循环语句,重复执行某项操作,直到循环结束。
语法如下:
For 循环变量= 初始值To 结束值
{
TradeBlazer公式语句;
}
循环变量为在之前已经定义的一个数值型变量,For循环的执行是从循环变量从初始值到结束值,按照步长为1递增,依次执行TradeBlazer公式语句。结束值必须大于或等于初始值才有意义,初始值和结束值可以使用浮点数,但是在执行过程中会被直接取整。只计算其整数部分。TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。
第一次执行时,首先将循环变量赋值为初始值,然后判断循环变量是否小于等于结束值,如果满足条件,则执行TradeBlazer公式语句,同时循环变量加1。接着重新判断循环变量是否小于等于结束值,一直到条件为False,退出循环。
例如,以下的用户计算Price最近Length周期的和。
Params
NumericSeries Price(1);
Numeric Length(10);
Vars
Numeric SumValue(0);
Numeric i;
Begin
for i = 0 to Length - 1
{
SumValue = SumValue + Price[ i ];
}
Return SumValue;
End
如果希望For语句从大到小进行循环,可以使用以下的语法:
For 循环变量= 初始值DownTo 结束值
{
TradeBlazer公式语句;
}
For-DownTo让循环变量从结束值每次递减1直到等于结束值,依次调用TradeBlazer公式语句执行,初始值必须大于或等于结束值才有意义。
For语句是比较常用的一种循环控制语句,它应用于知道循环次数的地方,很多内建用户函数中都使用For语句来完成相应的功能,比如Summation,Highest,Lowest,LinearReg等。
While
While语句在条件为真的时候重复执行某一项操作。即,只要条件表达式的值为真(True)时,就重复执行某个动作。直到行情信息改变以致条件为假(False)时,循环才结束。
语法如下:
While (Condition)
{
TradeBlazer公式语句;
}
Condition是一个逻辑表达式,当Condition为True的时候,TradeBlazer公式语句将会被循环执行,Condition可以是多个条件表达式的逻辑组合,Condition必须用()括起来。
TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。
例如,以下的公式用来计算要产生大于100000成交量需要最近Bar的个数:
Vars
Numeric SumV olume(0);
Numeric Counter (0);
Begin
While (SumVolume < 100000)
{
SumV olume = SumV olume + V ol[Counter]
Counter = Counter + 1;
}
End
首先,我们定义两个变量SumV olume和Counter,并将其默认值设为0。当SumVolume <100000这个表达式为True时,While内的TradeBlazer公式语句一直被调用,将前Counter个Bar的V ol 加到SumVolume中,当SumV olume大于等于100000时,退出循环。
在使用While循环的时候,有可能会遇到循环一直执行,永远不能退出的情况,这种情况我们称之为死循环,比如下面的语句;
While (True)
{
TradeBlazer公式语句;
}
在这种情况下,循环将一直执行,导致程序不能继续工作,在这种情况,我们可以使用Break 来跳出循环,详细情况参加下节。
Break
针对上节的例子,要想从死循环中跳出,我们可以在循环之中添加Break语句,如下:
While (True)
{
TradeBlazer公式语句;
If (Condition)
Break;
}
循环在每次执行后,都将判断Condition的值,当Condition为True时,则执行Break语句,跳出整个循环。
Continue
有的时候在循环中,我们可能希望跳过后面的代码,进入下一次循环,在这种情况下,可以使用Continue语句来达到目的,如下:
While (Condition1)
{
TradeBlazer公式语句1;
If (Condition2)
Continue;
TradeBlazer公式语句2;
}
当Condition1满足时,循环被执行,在执行完TradeBlazer公式语句1后,将判断Condition2的值,当Condition2为True,将跳过TradeBlazer公式语句2,重新判断Condition1的值,进入下一次循环。否则将继续执行TradeBlazer公式语句2。
精华中精华文华所没有实现复杂策略工具二
控制语句
TradeBlazer公式支持两大类的控制语句:条件语句和循环语句。
条件语句
条件语句包括以下四类表达方式:
If
If语句是一个条件语句,当特定的条件满足后执行一部分操作。
语法如下:
If (Condition)
{
TradeBlazer公式语句;
}
Condition是一个逻辑表达式,当Condition为True的时候,TradeBlazer公式语句将会被执行,Condition可以是多个条件表达式的逻辑组合,Condition必须用()括起来。
TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。
例如,您可以计算图表中上升缺口(当前Bar的开盘价高于上一个Bar的最高价)出现了多少次,只要在图表中使用If语句,当找到一个满足条件的Bar时,即条件为真时,变量加1,脚本如下:
Vars
NumericSeries Counter(0);
Begin
If ( Open > High[1])
{
Counter = Counter[1] + 1;
...
}
...
End
在TradeBlazer公式中,If语句被广泛使用,如K线型态和特征走势,都需要大量的使用If语句,当条件满足的时候,在满足条件的Bar上面进行标记。例如,下面的语句就是特征走势的例子:
If(High > High[1] AND Low < Low[1])
{
PlotNumeric(High,"Outside Bar");
}
If语句在不是用括号的情况,只执行下面的第一条语句,如下的语句,Alert不会只在条件为True 时执行,而是每次都执行。
If(High > High[1] AND Low < Low[1])
PlotNumeric(High,"Outside Bar");
Alert("Outside Bar");
要想Alert只在条件为True时执行,您需要按照下面的格式编写:
If(High > High[1] AND Low < Low[1])
PlotNumeric(High,"Outside Bar");
Alert("Outside Bar");
}
If-Else
If-Else语句是对指定条件进行判断,如果条件满足执行If后的语句。否则执行Else后面的语句。语法如下:
If (Condition)
{
TradeBlazer公式语句1;
}Else
{
TradeBlazer公式语句2;
}
Condition是一个逻辑表达式,当Condition为True的时候,TradeBlazer公式语句1将会被执行;Condition为False时,TradeBlazer公式语句2将会被执行。Condition可以是多个条件表达式的逻辑组合,Condition必须用()括起来。
TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。
例如,比较当前Bar和上一个Bar的收盘价,如果Close > Close[1],Value1 = Value1 + Vol;否则Value1 = Value1 - V ol,脚本如下:
If (Colse > Close[1])
Value1 = Value1 + V ol;
Else
Value1 = Value1 - V ol;
If-Else-If
If-Else-If是在If-Else的基础上进行扩展,支持条件的多重分支。
语法如下:
If (Condition1)
{
TradeBlazer公式语句1;
}Else If(Condition2)
{
TradeBlazer公式语句2;
}Else
{
TradeBlazer公式语句3;
}
Condition1是一个逻辑表达式,当Condition1为True的时候,TradeBlazer公式语句1将会被执行,Condition1为False时,将会继续判断Condition2的值,当Condition2为True时,TradeBlazer 公式语句2将会被执行。Condition2为False时,TradeBlazer公式语句3将会被执行。Condition1,Condition2可以是多个条件表达式的逻辑组合,条件表达式必须用()括起来。
TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。
If-Else-If的语句可以根据需要一直扩展,在最后的Else之后再加If(Condition)和新的执行代码即可。当然您也可以省略最后的Else分支,语法如下:
If (Condition1)
{
TradeBlazer公式语句1;
}Else If(Condition2)
TradeBlazer公式语句2;
}
If-Else的嵌套
If-Else的嵌套是在If-Else的执行语句中包含新的条件语句,即一个条件被包含在另一个条件中。语法如下:
If (Condition1)
{
If (Condition2)
{
TradeBlazer公式语句1;
}Else
{
TradeBlazer公式语句2;
}
}Else
{
If (Condition3)
{
TradeBlazer公式语句3;
}Else
{
TradeBlazer公式语句4;
}
}
Condition1是一个逻辑表达式,当Condition1为True的时候,将会继续判断Condition2的值,当Condition2为True时,TradeBlazer公式语句1将会被执行。Condition2为False时,TradeBlazer 公式语句2将会被执行。当Condition1为False的时候,将会继续判断Condition3的值,当Condition3为True时,TradeBlazer公式语句3将会被执行。Condition3为False时,TradeBlazer 公式语句4将会被执行。Condition1,Condition2,Condition3可以是多个条件表达式的逻辑组合,条件表达式必须用()括起来。
TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。
例如,在一个交易指令中,条件设置如下:当前行情上涨的时候,如果收盘价高于开盘价时,则产生一个以收盘价买入1张合约;否则产生一个以开盘价买入1张合约。当前行情没有上涨的时候,如果收盘价高于开盘价,则产生一个以收盘价卖出1张合约;否则产生一个以开盘价卖出1张合约。脚本如下:
If (Open > High[1])
{
If (Close>Open)
{
Buy(1,Open);
}Else
{
Buy(1,Close);
}
}Else
{
If (Close > Open)
{
Sell(1,Open);
}Else
{
Sell (1,Close);
}
}
接平仓东东
SetDollarTrailing (2000,True); 当前所有持仓盈利在回落达到2000之后,执行所有持仓位置的价值回落平仓。(此时是计算所有持仓的盈利数)
SetDollarTrailing (1000,False); 当前持仓的某一个建仓位置的盈利在回落达到1000之后,执行该持仓位置的价值回落平仓。(此时只计算该持仓位置的盈利)
说明当日收盘全部平仓。
语法SetExitOnClose()
参数无
备注当日收盘全部平仓,无返回值,该函数仅支持交易指令。
在当日收盘之后以收盘价全部平仓,将持仓状态变为持平,该函数仅用于历史数据测试,在小于1日线的周期情况下,该操作在建仓日期的最后一个Bar上执行,在1日线及以上的周期中,该操作以建仓Bar的收盘价在同一Bar内执行。在自动交易中因为收盘之后不一定能够保证成功发送委托,所以该函数延迟到第二天的开盘发送。
PositionProfit
说明获得当前持仓位置的浮动盈亏。
语法Numeric PositionProfit()
参数无
备注获得当前持仓位置的浮动盈亏,已考虑交易费用,返回值为浮点数,该函数仅支持交易指令。
只有当MarketPosition != 0时,即有持仓的状况下,该函数才有意义,否则返回0。
当前持仓的平均建仓价格
说明获得当前持仓的平均建仓价格。
语法Numeric AvgEntryPrice()
参数无
备注获得当前持仓的平均建仓价格,返回值为浮点数,该函数仅支持交易指令。
示例无
当前持仓位置的每手浮动盈亏
ContractProfit
说明获得当前持仓位置的每手浮动盈亏。
语法Numeric ContractProfit()
参数无
备注获得当前持仓位置的每手浮动盈亏,已考虑交易费用,返回值为浮点数,该函数仅支持交易指令。
只有当MarketPosition != 0时,即有持仓的状况下,该函数才有意义,否则返回0。
获得当前的可用资金
CurrentCapital
说明获得当前的可用资金。
语法Numeric CurrentCapital()
参数无
备注获得当前的可用资金,已考虑交易费用,返回值为浮点数,该函数仅支持交易指令。
根据参数进行获利平仓操作
SetProfitTarget (0,2000,True); 当前所有持仓盈利达到2000之后,执行所有持仓位置的获利平仓。(此时是计算所有持仓的盈利数)
SetProfitTarget (1,50, False); 当前持仓的某一个建仓位置每张合约的盈利达到50之后,执行该持仓位置的获利平仓。(此时只计算该持仓位置的每张合约盈利)
第一课:实例之战
一个文华交易系统的移植例子
多空趋势-交易系统之文华的公式脚本:
[Copy to clipboard] [ - ]CODE:
MA1:=EMA(CLOSE,16);
MA2:=EMA(CLOSE,35),COLORYELLOW;
MA3:=EMA(CLOSE,60);
MA4:=REF(HIGH,1);
LOWV:=LLV(LOW,9);
HIGHV:=HHV(HIGH,9);
RSV:=EMA((CLOSE-LOWV)/(HIGHV-LOWV)*100,3);
K:=EMA(RSV,3);
D:=MA(K,3);
MV5:=MA(VOL,5);
KK:=REF(K,1);
PP:=REF(LOW,1);
V AR3:=(2*CLOSE+HIGH+LOW)/4;
V AR4:=LLV(LOW,33);
V AR5:=HHV(HIGH,33);
ZL:=EMA((V AR3-V AR4)/(V AR5-V AR4)*100,17);
SH:=EMA(0.667*REF(ZL,1)+0.333*ZL,2);
LC:=REF(CLOSE,1);
RSI:=SMA(MAX(CLOSE-LC, 0), 6, 1)/SMA(ABS(CLOSE-LC), 6, 1)*100;
CROSS(CLOSE,MA1)&&(K>D)&&(ZL>SH)||CROSS(MA1,MA2)&&(ZL>SH)&&(VOL>1.25*M V5)&&(K>D)||CROSS(K,D)&&(CLOSE>MA1)&&(ZL>SH)||CROSS(RSI,70),BK;
CROSS(PP,CLOSE)&&(D>K)&&(SH>ZL)||CROSS(D,K)&&(CLOSE
CROSS(D,K)||(CLOSE CROSS(K,D)||(CLOSE>MA1*1.001),BP; TradeBlazer公式代码: [Copy to clipboard] [ - ]CODE: //------------------------------------------------------------------------ // 简称: Test // 名称: 多空趋势交易系统 // 类别: 交易指令 // 类型: 其他 // 输出: //------------------------------------------------------------------------ Params Numeric Length1(16); Numeric Length2(35); Numeric Length3(9); Numeric Lots(1); Vars NumericSeries Value1; NumericSeries Value2; Numeric LowestValue; NumericSeries Value5; NumericSeries RSV; NumericSeries KValue; NumericSeries DValue; Numeric AvgVol5; NumericSeries CloseTmp1; NumericSeries CloseTmp2; NumericSeries RSIValue; NumericSeries PreLow; NumericSeries PreKValue; Numeric Lowest33Value; NumericSeries VarTmp1; NumericSeries VarTmp2; NumericSeries ZL; Numeric SH; Begin Value1 = XAverage(Close,Length1); Value2 = XAverage(Close,Length2); //取两条均线的值 LowestValue = Lowest(Low,Length3); //取最低值 Value5 = (CLOSE-LowestValue)/(Highest(High,Length3)-LowestValue)*100; RSV = XAverage(Value5,3); KValue = XAverage(RSV,3); DV alue = Average(KValue,3); PreKValue = KValue[1]; PreLow = Low[1]; AvgV ol5 = Average(V ol,5); Lowest33Value = Lowest(Low,33); VarTmp1 =((2*CLOSE+HIGH+LOW)/4 - Lowest33Value )/(Highest(High,33) - Lowest33Value) * 100; ZL = XAverage(VarTmp1,17); VarTmp2 = 0.667*ZL[1] + 0.333*ZL; SH = XAverage(VarTmp2,2); CloseTmp1 = Max(Close - Close[1], 0); CloseTmp2 = Abs(Close - Close[1]); RSIValue = W Average(CloseTmp1,6)/WAverage(CloseTmp2,6) *100; //以上为KD部分只要如何换书写方式就可了,,higest ==hhv lowest==llv xAverager=ma // Buy什么时做买入动作,条件 If( (CrossOver(Close,Value1 ) && (KValue > DValue) && (ZL>SH)) Or (CrossOver(Value1,Value2) && (ZL>SH) && (Vol > 1.25 * AvgV ol5) && (KValue > DV alue)) Or (CrossOver(KValue,DValue) && (Close > Value1) && (ZL>SH)) Or (CrossOver(RSIValue,70)))//条件 { Buy(Lots,Close); } // SellShort 什么作卖出动作 If( (CrossOver(PreLow,Close) && (KValue > DValue ) && (SH>ZL) ) Or (CrossOver(DValue,KValue) && (Close < Value1) && (Value1 < Value2)) Or (CrossOver(PreKValue,KValue)&& (SH>ZL)))//条件 { SellShort(Lots,Close); } // Sell 什么做多平动作 If(CrossOver(DValue,KValue) || Close < Value1 * 1.001)//条件 Sell; } // BuyToCover什么进个做空平动作 If(CrossOver(KValue,DValue) || Close > Value1 * 1.001)//条件 { BuyToCover; } End //------------------------------------------------------------------------ // 编译版本GS2004.06.12 // 用户版本2007-06-25 10:37 // 版权所有TradeBlazer // 更改声明TradeBlazer Software保留对TradeBlazer平台 // 每一版本的TrabeBlazer公式修改和重写的权利 //------------------------------------------------------------------------ 第二课:交易思想是灵魂 要是打算根据3日的高低价平仓呢?想法如下 想实现这样一个一个想法:价格突破5天最高价,开多仓,把当天和前一天的K线做比较,取两日的最低价格做为止损,当价格突破3日最低价时,平多仓。 价格突破5日最低价,开空仓,把今天和... 你看看哦,代码大致如此: Params vars NumericSeries EntryHi; NumericSeries EntryLo; NumericSeries ShortStop; NumericSeries LongStop; NumericSeries SellHi; NumericSeries SellLo; Numeric myEntryPrice; Numeric myExitPrice; begin //入场点,开多和开空点,突破5天最高或最低 EntryHi = Highest(high[1],5); EntryLo = Lowest(low[1],5); //离场点,止盈点,三天较高或较低 SellHi=Highest(high[1],3); SellLo= Lowest(low[1],3); //止损点,两天较高或较低 ShortStop= Highest(high[1],2); LongStop=Lowest(low[1],2); if(MarketPosition ==0) { If(CrossOver(high,EntryHi)) { myEntryPrice = min(high,EntryHi ); myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); Buy(0,myEntryPrice); } If(CrossUnder(Low,EntryLo )) myEntryPrice = max(low,EntryLo ); myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); SellShort(0,myEntryPrice); } } If(MarketPosition ==1) { if (CrossUnder(Low,LongStop)) { myExitPrice = max(low,LongStop ); myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); Sell(0,myExitPrice); }Else if (CrossUnder(Low,SellLo)) { myExitPrice = max(low,SellLo ); myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); Sell(0,myExitPrice); } } If(MarketPosition ==-1) { if (CrossOver(high,ShortStop)) { myExitPrice = min(high,ShortStop ); myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice); BuyToCover(0,myExitPrice); }Else if (CrossOver(high,SellHi)) { myExitPrice = min(high,SellHi ); myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice); BuyToCover(0,myExitPrice); } } end 第三课:双均线策略 // 以下为均线交易系统,5日均线上穿20均线为买入,5日均线下穿20均线为买出 Params // 宣告参数定义 Numeric Length1(5); // 5日均线的参数值 Numeric Length2(20); // 20日均线的参数值 Numeric Lots(1); // 默认的交易数量,您可以通过公式计算来产生 Vars // 宣告变量定义 NumericSeries MA1; // 中间变量,用来保存5日均线的值,因为CrossOver的输入参数需要序列变量,因此定义为序列变量 NumericSeries MA2; // 中间变量,用来保存20日均线的值,因为CrossOver的输入参数需要序列变量,因此定义为序列变量 Begin // 宣告公式正文开始 MA1 = AverageFC(Close,Length1); // 求出5日均线值,并将值赋给MA1 MA2 = AverageFC(Close,Length2); // 求出20日均线值,并将值赋给MA2 If(CrossOver(MA1,MA2)) // 当出现5日均线上穿20均线时买入 { Buy(Lots,Close); // 用当前Bar的收盘价买入,详细的Buy函数调用请参见帮助文件} If(CrossUnder(MA1,MA2))// 当出现5日均线下穿20均线时卖出 { Sell; // Sell不用参数时会自动平掉所有仓位,详细的Sell 函数调用请参见帮助文件 } End // 宣告公式正文结束 问题集中一下,双策略 收盘价格突破5天均线,开仓,跌破5天线平仓; 收盘价格突破25天均线,开仓,跌破25天线平仓; 各平各的仓,不可乱平. 是这样解决 如果您希望两个交易指令不相互平仓,那直接开两个图表分别执行交易指令就可以啦! 你举例的交易指令除了参数还都是一样的。所以只需要更改两个图表中交易指令的参数就可以解决了。 操作步骤如下: 1、新建一个交易指令,假定命名为Demo: [Copy to clipboard] [ - ]CODE: Params // 宣告参数定义 Numeric Length(5); // 均线的参数值 Numeric Lots(1); // 默认的交易数量,您可以通过公式计算来产生 Vars // 宣告变量定义 NumericSeries MA1; // 中间变量,用来保存均线的值,因为CrossOver的输入参数需要序列变量,因此定义为序列变量 Begin // 宣告公式正文开始 MA1 = AverageFC(Close,Length); // 求出均线值,并将值赋给MA1 If(CrossOver(Close,MA1)) // 当出现收盘价上穿均线时买入 { Buy(Lots,Close); // 用当前Bar的收盘价买入,详细的Buy函数调用请参见帮助文件} If(CrossUnder(Close,MA1))// 当出现收盘价下穿均线时卖出 { Sell; // Sell不用参数时会自动平掉所有仓位,详细的Sell 函数调用请参见帮助文件 } End // 宣告公式正文结束 2、编译保存该公式后,开两个图表,都加入该交易指令。一个图表的交易指令参数设置为5,一个设置为20。 问题1回复 这就相当两个毫无关联的交易系统组合在一起的效果,就好像有两个人[A和B]可以同时操作一个账户,A,B都可以在任何时候进行开平仓。 必然会出现A开的仓被B平掉,或者B想开仓,发现资金不够。所以,您在组合交易系统的时候,一定要知道每个交易系统会干什么,会产生什么关联。就相当于A和B两个人需要约定一下,A来管开仓,B来管平仓。或者其他分工,这样就不会乱啦。 问题2回复 我提供的是一个无任何实际意义的例子,所以,您不与拘泥于公式的条件写法。 比如开仓条件,先从单个条件写起。如果错误的讯号太多,则需要增加条件,过滤一些无效的讯号。 如果讯号太少,则说明您的条件太苛刻,也需要对条件进行修改。 平仓的讯号也是类似,唯一不同的是还需要加上一些止损的条件 第四课:开仓和资金关联 如何进行增减开仓控制 能否在开仓前检测资产总额,比如盈亏20%时增减1手仓位?[ 假定我们在当前持多仓盈利的盈利达到10%的时候在增仓一倍。其他的用法类似。 [Copy to clipboard] [ - ]CODE: Vars Numeric ProfitRatio; Begin // 前面的代码为建仓,平仓操作。。 If(MarketPosition == 1) // 当前为多仓 { ProfitRatio = ContractProfit/(AvgEntryPrice()*ContractUnit()*MarginRatio()); // 当前盈利比例=每手盈利/(每手的总价格*保证金) If(ProfitRatio > 0.1) { Buy(CurrentContracts,Close); // 再按照当前的仓位买入 } } End CurrentCapital,AvgEntryPrice,CurrentContracts,ContractProfit等函数可获得测试时的资金,盈亏等数据。 然后进行后续仓位控制。 第5课:资金管理与TB的结合范例应 通过对资金管理来实现及时止损和止赢(最为关键一课) 第6课:海龟--著名交易系统 只有吃透海龟你才算是合格的系统交易者 第七课:实战例 //------------------------------------------------------------------------ // 简称: sd // 名称: sd // 类别: 交易指令 // 类型: 多头建仓 // 输出: //------------------------------------------------------------------------ Vars Numeric lots(8);//精华在这里 Bool szwy; Bool ssly; Bool sly; Bool sszwy; Begin if (BarStatus == 2 ) {Lots=A_FreeMargin /(Q_AskPrice*ContractUnit*MarginRatio); Lots= IntPart(Lots); }// 取整 Else If(BarStatus<>2 ) {Lots=CurrentCapital/(Close*ContractUnit*MarginRatio); Lots=IntPart(Lots); // 取整 } //这是本例华部分,也是作者思想可取,一个好的交易者先首要件就是控制作风险....... SZWY=(close SSL Y=(CLOSE>OPEN)&&(CLOSE[1]>=OPEN[1])&&(CLOSE[2]>=OPEN[2])&&(CLOSE[3]>=O PEN[3]); SL Y=(CLOSE>OPEN )&&(CLOSE[1]>=OPEN[1])&&(CLOSE[2]>=OPEN[2]); SSZWY=(CLOSE // 开多条件 IF(ssly and Time<0.144500 ) // 在四连阳形态的时候!在下根K线开盘价做多(注:每个人入场方式可以不同) Buy(lots,Close,True); // 开空条件 if(sszwy and Time<0.144500 ) //在四连阴形态的时候!在下根K线开盘价卖空((注:每个人入场方式可以不同) SellShort(lots,Close,True); if(szwy ) Sell(lots,Close,True); if(sly) BuyToCover(lots,Close,True);//这都关键性,别的系统所不能这样做 end //------------------------------------------------------------------------ 汇编语言入门教程 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩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),有九个有意义的标志,将在下文用到时详细说明。 内存是电脑运作中的关键部分,也是电脑在工作中储存信息的地方。内存组织有许多可存放 第一章基础知识: 一.机器码: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 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段寄存器中。 我的世界获得物品代码把liu改成自己用的游戏名 1、钻石:/give liu diamond 64 3:绿宝石:/give liu emerald 64 5:金苹果:/give liu golden_apple 64 6:胡萝卜:/give liu carrot 64 7:金萝卜:/give liu golden_carrot 64 8:生鱼:/give liu fish 64 9、鸡蛋:/give liu egg 64 投掷器:/give liu dropper 64 发射器:/give liu dispenser 64 熔炉:/give liu furnace 64 木板:/give liu planks 64 告示牌:/give liu sign 64 箱子:/give liu chest 64 漏斗:/give liu hopper 64 栅栏门:/give liu acacia_fence_gate 64 红石块:/give liu redstone_block 64 火把:/give liu torch 64 黑曜石:/give liu obsidian 64 末影箱:/give liu ender_chest 64 砖块:/give liu brick_block 64 炼药锅:/give liu cauldron 64 酿造台:/give liu brewing_stand 64 铁块:/give liu iron_block 64 金块:/give liu gold_block 64 刷怪箱:/give liu mob_spawner 红石灯:/give liu redstone_lamp 64 活塞:/give liu sticky_piston 64 栅栏:/give liu acacia_fence 64 药水:/give liu potion 64 木棍:/give liu stick 64 弓:/give liu bow 箭:/give liu arrow 64 钟:/give liu clock 64 门:/give liu wooden_door 64 (/give liu iron_door 64) 压力板:/give liu wooden_pressure_plate 64 铁轨:/give liu rail 64 充能铁轨:/give liu golden_rail 64 激活铁轨:/give liu activator_rail 64 探测铁轨:/give liu detector_rail 64 汇编语言程序设计资料简汇 通用寄存器 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中,即堆栈段。 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):堆栈段寄存器; 我的世界创世神代码攻略大全 我的世界创世神代码攻略大全,详细描述了我的世界创世神代码攻略大全,希望这篇我的世界创世神代码攻略大全,能够帮助到各位正在玩我的世界的玩家朋友们! 我的世界创世神代码攻略大全 手拿木斧,左键一角,右键一角,两角之间的长方体为选择区域: //set id - 将选中的区域变为某物品(如果是不可放置或者没有放置点的物品会成为被扔出的状态) //undo - 还原上一次的WorldEdit行动 //redo - 还原上一次的//undo(这个说明可能有误) //move x - 将区域移动x块。移动时需正对着你要移动的区域,他就会帮你移动到你正对的地方 //move x up - 将区域向上移动x块 //move x down - 将区域向下移动x块 /criticalhit [enable|disable] 开启关闭致命一击 /clouds [enable|disable] 是否显示云 sprinting [enable|disable] 总是冲刺 climb 无需梯子能攀爬任何墙面 spawner 改变玩家所在区域刷怪器的怪物种类 effect 设置药水效果 fog [tiny|small|normal|far] 改变视野距离 enderman pickup [enable|disable] Enderman拾取物品开启关闭 enchant 对当前物品附魔 xp XP (player experience)经验值命令hardcore 是否开启变态模式(游戏最高难度) calc 计算机 useportal 传送命令 特别提示: 输入 “= 算式”可以简单的使用计算机比如: = 4 * 4 更多命令帮助信息输入?/help <命令名称> helmet [ITEM] [QTY] [DAMAGE] 换头盔和头盔的防御度啥的。。 slippery [SLIPPERYNESS] 让某个块变得很滑(像冰) longerlegs 让腿更长,可以跳2格等 atlantis 我的世界方块id 物品及方块id与名称对照表我的世界方块代码ID大全,最详尽的方块代码,我的世界方块id是多少,我的世界命令方块指令,我的世界方块、物品id与名称对照表。下面小编给大家带来我的世界方块id,物品id与名称对照表,以供大家参考,祝大家游戏愉快! 方块: 方块(Block)是Minecraft里最基本的组成单位,也是不可或缺的重要元素。而方块的堆积构成了游戏世界的环境,他们可以透过各种形式被收集和利用。在 1.8 版本(最新的版本)中,总共有 153种不同的方块。 若使用默认资源包,则方块的每个面皆由 16x16 像素组成,但可以透过资源包使得方块变的更精细,例如:32×32,64×64,128×128,256×256,512×512,亦或是(罕见) 768x768 , 1024×1024 以及 2048×2048 像素。无论是否使用资源包,每个方块大小都等同于现实中的一立 方米。[1] 大部分方块都是静态的,除了水,岩浆,火的每一面都有流动的图案。 方块的种类: 用D标记的方块需要第二部分的数据值来完全定义自己。用I标记的方块与以物品形式存在物品栏中时拥有不同的数据值。用B标记的方块需要第二部分的物品栏数据来完全定义自己。用T标记的方块具有方块实体值用以储存附加数据。用红色标记ID的方块无法由玩家在游戏中通过正常途径获得(除非使用修改器之类的工具,或在多人游戏中使用系统指令)。用蓝色标记ID的方块只能在创造模式中获得。用绿色标记ID的方块在生存模式中只能通过精准采集魔咒获得。 主世界 自然生成:自然生成的方块包括系统按照世界种子生成的方块。 自然产生:自然产生方块是指在某些特定情况下在世界中自然产生的方块,而非玩家创造。 汇编语言指令集 数据传送指令集 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 图标Dec Hex 名称方块 0 00 minecraft:air 空气 1 01 minecraft:stone 石头S B 2 02 minecraft:grass 草方块 3 03 minecraft:dirt 泥土S B 4 04 minecraft:cobblestone 圆石 5 05 minecraft:planks 木板S B 6 06 minecraft:sapling 树苗S B 7 07 minecraft:bedrock 基岩 8 08 minecraft:flowing_water 水S 9 09 minecraft:water 静态水S 10 0A minecraft:flowing_lava 岩浆S 11 0B minecraft:lava 静态岩浆S 12 0C minecraft:sand 沙子S B 13 0D minecraft:gravel 沙砾 14 0E minecraft:gold_ore 金矿石 15 0F minecraft:iron_ore 铁矿石图标Dec Hex 名称方块 16 10 minecraft:coal_ore 煤矿石 17 11 minecraft:log 木头S B 18 12 minecraft:leaves 树叶S B 19 13 minecraft:sponge 海绵S B 20 14 minecraft:glass 玻璃 21 15 minecraft:lapis_ore 青金石矿石 22 16 minecraft:lapis_block 青金石块 23 17 minecraft:dispenser 发射器S E 24 18 minecraft:sandstone 沙石S B 25 19 minecraft:noteblock 音符盒E 26 1A minecraft:bed 床I S 27 1B minecraft:golden_rail 充能铁轨S 28 1C minecraft:detector_rail 探测铁轨S 29 1D minecraft:sticky_piston 粘性活塞S 30 1E minecraft:web 蜘蛛网 31 1F minecraft:tallgrass 草丛S B 图标Dec Hex 名称方块 32 20 minecraft:deadbush 枯死的灌木 33 21 minecraft:piston 活塞S 34 22 minecraft:piston_head 活塞臂S 第一讲 第三章 指令系统--寻址方式 回顾: 8086/8088的内部结构和寄存器,地址分段的概念,8086/8088的工作过 程。 重点和纲要:指令系统--寻址方式。有关寻址的概念;6种基本的寻址方式及 有效地址的计算。 教学方法、实施步骤 时间分配 教学手段 回 顾 5”×2 板书 计算机 投影仪 多媒体课件等 讲 授 40” ×2 提 问 3” ×2 小 结 2” ×2 讲授内容: 3.1 8086/8088寻址方式 首先,简单讲述一下指令的一般格式: 操作码 操作数 …… 操作数 计算机中的指令由操作码字段和操作数字段组成。 操作码:指计算机所要执行的操作,或称为指出操作类型,是一种助记符。 操作数:指在指令执行操作的过程中所需要的操作数。该字段除可以是操作数本身外,也可以是操作数地址或是地址的一部分,还可以是指向操作数地址的指针或其它有关操作数的信息。 寻址方式就是指令中用于说明操作数所在地址的方法,或者说是寻找操作数有效地址的方法。8086/8088的基本寻址方式有六种。 1.立即寻址 所提供的操作数直接包含在指令中。它紧跟在操作码的后面,与操作码一起放在代码段区域中。如图所示。 例如:MOV AX ,3000H 立即数可以是8位的,也可以是16位的。若 是16位的,则存储时低位在前,高位在后。 立即寻址主要用来给寄存器或存储器赋初值。 2.直接寻址 操作数地址的16位偏移量直接包含在指令中。它与操作码—起存放在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄存器DS加上这16位地址偏移量。如图2-2所示。 例如: MOV AX,DS:[2000H]; 图2-2 (对DS来讲可以省略成 MOV AX,[2000H],系统默认为数据段)这种寻址方法是以数据段的地址为基础,可在多达64KB的范围内寻找操作数。 8086/8088中允许段超越,即还允许操作数在以代码段、堆栈段或附加段为基准的区域中。此时只要在指令中指明是段超越的,则16位地址偏移量可以与CS或SS或ES相加,作为操作数的地址。 MOV AX,[2000H] ;数据段 MOV BX,ES:[3000H] ;段超越,操作数在附加段 即绝对地址=(ES)*16+3000H 3.寄存器寻址 操作数包含在CPU的内部寄存器中,如寄存器AX、BX、CX、DX等。 例如:MOV DS,AX MOV AL,BH 4.寄存器间接寻址 操作数是在存储器中,但是,操作数地址的16位偏移量包含在以下四个寄存器SI、DI、BP、BX之一中。可以分成两种情况: 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;看门狗定时器清零(若已赋值,同时清预分频器) 3.1 8086/8088寻址方式 计算机中的指令由操作码字段和操作数字段组成。 操作码:指计算机所要执行的操作,或称为指出操作类型,是一种助记符。 操作数:指在指令执行操作的过程中所需要的操作数。该字段除可以是操作数本身外,也可以是操作数地址或是地址的一部分,还可以是指向操作数地址的指针或其它有关操作数的信息。 寻址方式就是指令中用于说明操作数所在地址的方法,或者说是寻找操作数有效地址的方法。8086/8088的基本寻址方式有六种。 1.立即寻址 所提供的操作数直接包含在指令中。它紧跟在 操作码的后面,与操作码一起放在代码段区域中。 如图所示。 例如:MOV AX,3000H 立即数可以是8位的,也可以是16位的。若 是16位的,则存储时低位在前,高位在后。 立即寻址主要用来给寄存器或存储器赋初值。 2.直接寻址 操作数地址的16位偏移量直接包含在指令中。它与操作码—起存放在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄存器DS加上这16位地址偏移量。如图2-2所示。 例如:MOV AX,DS:[2000H]; 图2-2 (对DS来讲可以省略成MOV AX,[2000H],系统默认为数据段)这种寻址方法是以数据段的地址为基础,可在多达64KB的范围内寻找操作数。 8086/8088中允许段超越,即还允许操作数在以代码段、堆栈段或附加段为基准的区域中。此时只要在指令中指明是段超越的,则16位地址偏移量可以与CS或SS或ES相加,作为操作数的地址。 MOV AX,[2000H] ;数据段 MOV BX,ES:[3000H] ;段超越,操作数在附加段 即绝对地址=(ES)*16+3000H 3.寄存器寻址 操作数包含在CPU的内部寄存器中,如寄存器AX、BX、CX、DX等。 例如:MOV DS,AX MOV AL,BH 4.寄存器间接寻址 操作数是在存储器中,但是,操作数地址的16位偏移量包含在以下四个寄存器SI、DI、BP、BX之一中。可以 分成两种情况: (1)以SI、DI、BX间接寻址,则 通常操作数在现行数据段区域 中,即数据段寄存器(DS)*16 加上SI、DI、BX中的16位偏移 量,为操作数的地址, 例如:MOV AX,[SI] 操作数地址是:(DS)*16+(SI) (2)以寄存器BP间接寻址,则操作数在堆栈段区域中。即堆栈段寄存器(SS)*16与BP的内容相加作为操作数的地址, 例如:MOV AX,[BP] 操作数地址是:(SS)*16+(BP)若在指令中规定是段超越的,则BP的内容也可以与其它的段寄存器相加,形成操作数地址。 例如:MOV AX,DS:[BP] 操作数地址是:(DS)*16+(BP)5.变址寻址 由指定的寄存器内容,加上指令中给出的8位或16位偏移量(当然要由一个 汇编语言常用指令 大家在做免杀或者破解软件的时候经常要用到汇编指令,本人整理出了常用的 希望对大家有帮助! 数据传送指令 MOV:寄存器之间传送注意,源和目的不能同时是段寄存器;代码段寄存器CS不能作为目的;指令指针IP不能作为源和目的。立即数不能直接传送段寄存器。源和目的操作数类型要一致;除了串操作指令外,源和目的不能同时是存储器操作数。 XCHG交换指令:操作数可以是通用寄存器和存储单元,但不包括段寄存器,也不能同时是存储单元,还不能有立即数。 LEA 16位寄存器存储器操作数传送有效地址指令:必须是一个16位寄存器和存储器操作数。 LDS 16位寄存器存储器操作数传送存储器操作数32位地址,它的16位偏移地址送16位寄存器,16位段基值送入DS中。 LES :同上,只是16位段基址送ES中。 堆栈操作指令 PUSH 操作数,操作数不能使用立即数, POP 操作数,操作数不能是CS和立即数 标志操作指令 LAHF:把标志寄存器低8位,符号SF,零ZF,辅助进位AF,奇偶PF,进位CF传送到AH 指定的位。不影响标志位。 SAHF:与上相反,把AH中的标志位传送回标志寄存器。 PUSHF:把标志寄存器内容压入栈顶。 POPF:把栈顶的一个字节传送到标志寄存器中。 CLC:进位位清零。 STC:进位位为1。 CMC:进位位取反。 CLD:使方向标志DF为零,在执行串操作中,使地址按递增方式变化。 STD:DF为1。 CLI:清中断允许标志IF。Cpu不相应来自外部装置的可屏蔽中断。 STI:IF为1。 加减运算指令 注意:对于此类运算只有通用寄存器和存储单元可以存放运算结果。如果参与运算的操作数有两个,最多只能有一个存储器操作数并且它们的类型必须一致。 ADD。 ADC:把进位CF中的数值加上去。 INC:加1指令 SUB。 SBB:把进位CF中数值减去。 DEC:减1指令。 NEG 操作数:取补指令,即用0减去操作数再送回操作数。 CMP:比较指令,完成操作数1减去操作数2,结果不送操作数1,但影响标志位。可根据ZF(零)是否被置1判断相等;如果两者是无符号数,可根据CF判断大小;如果两者是有符号数,要根据SF和OF判断大小。 乘除运算指令 MUL 操作数:无符号数乘法指令。操作数不能是立即数。操作数是字节与AL中的无符号数相乘,16位结果送AX中。若字节,则与AX乘,结果高16送DX,低16送AX。如乘积高半部分不为零,则CF、OF为1,否则为0。所以CF和OF表示AH或DX中含有结果的有效数。IMUL 操作数:有符号数乘法指令。基本与MUL相同。 DIV 操作数:被除数是在AX(除数8位)或者DX和AX(除数16位),操作数不能是立即数。如果除数是0,或者在8(16)位除数时商超过8(16)位,则认为是溢出,引起0号中断。IDIV:有符号除法指令,当除数为0,活着商太大,太小(字节超过127,-127字超过32767,-32767)时,引起0号中断。 符号扩展指令 CBW,CWD:把AL中的符号扩展到寄存器AH中,不影响各标志位。CWD则把AX中的符号扩展到DX,同样不影响标志位。注意:在无符号数除之前,不宜用这两条指令,一般采用XOR 清高8位或高16位。 逻辑运算指令与位移指令 注意:只能有一个存储器操作数;只有通用寄存器或存储器操作数可作为目的操作数,用于存放结果;操作数的类型必须一致。 NOT:取反,不影响标志位。 AND 操作数1 操作数2:操作结果送错作数1,标志CF(进位)、OF(溢出)清0,PF(奇偶)ZF(0标志) SF(符号)反映运算结果,AF(辅助进位)未定义。自己与自己AND值不变,她主要用于将操作数中与1相与的位保持不变,与0相与清0。(都为1时为1)OR 操作数1 操作数2:自己与自己OR值不变,CF(进位)、OF(溢出)清0,PF(奇偶)ZF(0标志)SF(符号)反映运算结果,AF(辅助进位)未定义。她使用于将若干位置1: 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的间址内容相加 常用命令 数据传送指令 一通用数据传送指令 MOV指令为双操作数指令,两个操作数中不能全为内存操作数 格式:MOV DST,SRC 执行操作:dst = src 注:1.目的数可以是通用寄存器,存储单元和段寄存器(但不允许用CS段寄存器). 2.立即数不能直接送段寄存器 3.不允许在两个存储单元直接传送数据 4.不允许在两个段寄存器间直接传送信息 PUSH入栈指令及POP出栈指令: 堆栈操作是以“后进先出”的方式进行数据操作。 格式:PUSH SRC //Word 执行操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC) 注:1.入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器。 2.入栈时高位字节先入栈,低位字节后入栈。 格式:POP DST //Word 执行操作:(DST)<-((SP+1),(SP)) (SP)<-(SP)+2 注:1.出栈操作数除不允许用立即数和CS段寄存器外,可以为通用寄存器,段寄存器和存储器。 2.执行POP SS指令后,堆栈区在存储区的位置要改变。 3.执行POP SP 指令后,栈顶的位置要改变。 XCHG(eXCHanG)交换指令: 将两操作数值交换。 格式:XCHG OPR1,OPR2 //Byte/Word 执行的操作:(OPR1)<-->(OPR2) 注:1.必须有一个操作数是在寄存器中 2.不能与段寄存器交换数据 存储器与存储器之间不能交换数据。 二累加器专用传送指令 IN输入指令 长格式为:IN AL,PORT(字节) IN AX,PORT(字) 执行的操作:(AL)<-(PORT)(字节) 常用汇编指令: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段寄存器中。 LES (Load ES with pointer) 指针送寄存器和ES指令 LES REG , SRC //常指定DI寄存器 执行操作: REG=(SRC) , ES=(SRC+2) //与LDS大致相同,不同之处是将ES代替DS而已. LAHF( Load AH with Flags ) 标志位送AH指令汇编语言入门
汇编语言知识大全
(完整word版)汇编语言常用指令大全,推荐文档
我的世界获得物品代码
汇编语言指令汇总
(完整word版)汇编语言指令集合-吐血整理,推荐文档
我的世界创世神代码攻略大全
我的世界方块id 物品及方块id与名称对照表
汇编语言指令
minecraft物品ID大全资料
汇编语言指令详解
PIC8位单片机汇编语言常用指令的识读
汇编语言指令分类详解
一些常用的汇编语言指令
汇编语言指令
汇编语言的各条指令
汇编语言常用指令大全解释