【问题标题】:What is the significance of $ # and % in 6502?6502中$#和%的意义是什么?
【发布时间】:2021-09-05 16:58:31
【问题描述】:

平台

  • 6502 模拟器
  • DASM 汇编器
  • Windows 10

我有从

开始的数字

#2

$2F

%0000111

我不明白为什么在 6502 的汇编代码中使用 # $ %?

有时 ldx #$FF

用#$FF加载x寄存器

这里为什么使用两个符号?

【问题讨论】:

    标签: assembly 6502


    【解决方案1】:

    这些符号是许多平台上的许多汇编程序使用的常用语法糖,旨在使人类更容易以基数 2、10 和 16(二进制、十进制和十六进制)向汇编程序提供数值:

    %00001100 means 12 in binary
    12 means 12 in decimal
    $0C means 12 in hexadecimal
    

    # 符号在包括 DASM 在内的众多汇编语法中作为寻址指示器具有进一步的意义:

    LDA #%00001100 loads 12 into the Accumulator
    LDA #12 loads 12 into the Accumulator
    LDA #$0C loads 12 into the Accumulator
    LDA $0C loads the contents of memory location 12 into the Accumulator
    

    【讨论】:

    • “# 和 $ 符号作为绝对和间接寻址的指示符具有更重要的意义” 您是说 立即 吗?间接类似于($0C, X)
    • @Michael Doh!是的,我做到了。已更正。
    • # 不表示十进制,# 表示立即数(而不是内存地址)。例如lda 12 将从内存中加载,地址为 12,不是吗?因此,最好将其解释为十进制是数字文字的默认值,$ 覆盖为十六进制(就像 C 中的 0x)和 % 覆盖为基数 2(如 C 中的 0b)。哦,我看到迈克尔已经发布了一个这样解释的答案。
    • @PeterCordes 我已经编辑了关于十进制与立即数的答案,这样更好吗?
    • @youri:这修复了第一部分。不幸的是,答案仍然是 #$ ... 寻址指标$与DASM中的寻址无关,相当于C的0x。其他一些汇编器确实以不同的方式使用$,例如x86 的AT&T 语法使用$ 来指示立即数而不是内存(就像DASM 使用#)。但这是解释 DASM 工作原理的无益方式。这个例子很好,但是文字说$表示寻址。
    【解决方案2】:

    DASM 允许用二进制、八进制、十进制和十六进制表示数字。

    • 二进制数字使用% 前缀(例如%1101)。
    • 八进制数使用0 前缀(例如015)。
    • 十进制数字不使用前缀(例如13)。
    • 十六进制数字使用$ 前缀(例如$0D)。

    # 符号用于指定立即寻址:

    LDA 0   ; Load the byte from address 0 in memory into register A
    LDA #0  ; Load the value 0 into register A
    

    当然可以将立即寻址与不同的数字基数结合起来,例如:

    LDA #$FF ; Load the value $FF into register A
    

    【讨论】:

      猜你喜欢
      • 2018-04-19
      • 2011-08-19
      • 1970-01-01
      • 2013-03-31
      • 2014-03-30
      • 1970-01-01
      • 2014-03-24
      • 2018-01-15
      • 2021-09-07
      相关资源
      最近更新 更多