Assembly Easy68k组装组织指令

Assembly Easy68k组装组织指令,assembly,easy68k,Assembly,Easy68k,我知道有人问过类似的问题,但还是听好了 这学期我写了很多Easy68k程序,我很好奇为什么org指令总是设置为1000美元、2000美元或2500美元 虽然答案是“按个人惯例”,但我更感兴趣的是理解以下内容: 设置org指令的好处是什么,CPU可以执行从0x0到0xffffffff的任何操作,那么需要将程序启动一直偏移到0x1000吗 例如: org $1000 start: moveq #9, d0 trap #15 end start 工作正常,但向

我知道有人问过类似的问题,但还是听好了

这学期我写了很多Easy68k程序,我很好奇为什么org指令总是设置为1000美元、2000美元或2500美元

虽然答案是“按个人惯例”,但我更感兴趣的是理解以下内容:

  • 设置org指令的好处是什么,CPU可以执行从0x0到0xffffffff的任何操作,那么需要将程序启动一直偏移到0x1000吗
例如:

    org $1000
start:
    moveq #9, d0
    trap  #15

    end start
工作正常,但向下偏移4096字节

start:
    moveq #9, d0
    trap  #15

    end start
也可以工作,但根本不偏移

那么为什么需要这个指令呢?我没有为任何特定目的保留[0x0,0x1000],所以保留此偏移量有什么意义

迄今为止的结论

  • Easy68k没有全局变量的默认位置,它们被放置在pc上(按照惯例通常位于程序末尾)
  • Easy68k的默认堆栈指针位于0,向下增长到0xffffffe,向下(它是字对齐的):这意味着与[0,0x1000)区域没有冲突。事实上,它会在损坏[0,0x1000)区域之前损坏代码
我真的很好奇

提前谢谢


~Dmitry

68000中的异常向量保留了地址0到大约$800。使用$1000作为默认起始地址,以避开保留区域。堆栈默认位于内存顶部,并向地址0增长。

这听起来像是一种约定,允许保留堆栈、命令行参数和我只写过几行68000汇编程序,所以我不记得放置一些常用变量是否会使大多数操作码变短。但这是可能的(比如6502中的零页)。我不相信Easy68k有任何命令行参数,它是一个GUI模拟器。我在帖子中提到了全局内存和堆栈。此外,操作码的长度并不相关,但立即移动0x12345678只需要12个时钟,而从内存移动它需要20个时钟,操作码都是6字节,分别用于立即和从内存y:203c 12345678,2039 0000001a,这也显示了全局数据存储在代码末尾,作为1a 0000001a内存,正好跟在我的“move#9,d0;trap#15”代码后面,表示“simhalt”,没有向量位置的公式。如果我没记错的话,它们不是0到800美元。让我检查一下。等等……你真的是“Kelly教授”吗?抱歉,我对中断向量感到困惑,因此我很抱歉与程序的创建者争论,我喜欢你的程序,甚至试着查看它的代码,尽管自从上次我检查它是为borland C制作的以来,这有点难理解。理解异常是Easy68k中最让人困惑的部分之一,这是我刚刚提到的部分找不到任何能以我能理解的方式解释它的来源。