Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 帮助理解红码_Assembly_Corewars_Redcode - Fatal编程技术网

Assembly 帮助理解红码

Assembly 帮助理解红码,assembly,corewars,redcode,Assembly,Corewars,Redcode,我正在努力学习红色代码,因为做一个机器人看起来很有趣 介绍 对于那些不知道什么是红码的人,这里有一个简短的解释。 这是一种类似ASM的语言,但要简单得多。它用于编写需要关闭虚拟内存中其他程序的小程序。(有关更多信息,请参见此处:) 下面是一段代码: ;redcode ;name Mice ;author Chip Wendell ;strategy paper (replicator) ;history Winner of the 1986 ICWS tournament Top dat #0,

我正在努力学习红色代码,因为做一个机器人看起来很有趣

介绍 对于那些不知道什么是红码的人,这里有一个简短的解释。 这是一种类似ASM的语言,但要简单得多。它用于编写需要关闭虚拟内存中其他程序的小程序。(有关更多信息,请参见此处:)

下面是一段代码:

;redcode
;name Mice
;author Chip Wendell
;strategy paper (replicator)
;history Winner of the 1986 ICWS tournament
Top dat #0, #0
Start   mov #12,    Top
Loop    mov @Top,   <Target
    djn Loop,   Top
    spl @Target,0
Spacer  equ 653
    add #Spacer,Target
    jmz Start,  Top
Target  dat #0, #833
    end Start
据我所知,有回路的线意味着: 将指令向前移动12行(填入dat#0,#0)至第833行

但当执行此代码时,代码行被放置在第839行


有人真的明白发生了什么吗?

好吧,这花了很多时间阅读,但下面是你的答案:

正如您正确猜测的那样,第一条指令将Top转换为DAT#0,#12。很简单,但下一条指令更为棘手。首先,它递减Target的B值(使其为832)。然后,它将顶部的指令复制到相对于目标的前832行位置。这是关键:间接寻址模式意味着目的地与为偏移量读取的B值相关。现在看看编译后的代码,前面有行号:

0000 Top    DAT.F  #0        #0       
0001 Start  MOV.AB #12       $-1      
0002 Loop   MOV.I  @-2       <5       
0003        DJN.B  $-1       $-3      
0004        SPL.B  @3        $0       
0005        ADD.AB #653      $2       
0006        JMZ.B  $-5       $-6      
0007 Target DAT.F  #0        #833  
0000顶部数据F#0#0
0001启动MOV.AB#12$-1

0002循环动作I@-2 Thx用于解释。其他人帮我准备好了,但不管怎样,现在已经清楚了。
Top dat #0, #12
0000 Top    DAT.F  #0        #0       
0001 Start  MOV.AB #12       $-1      
0002 Loop   MOV.I  @-2       <5       
0003        DJN.B  $-1       $-3      
0004        SPL.B  @3        $0       
0005        ADD.AB #653      $2       
0006        JMZ.B  $-5       $-6      
0007 Target DAT.F  #0        #833