【问题标题】:How is it possible to MOVE.W a 24-Bit value?MOVE.W 怎么可能是 24 位值?
【发布时间】:2021-07-01 08:24:55
【问题描述】:

我正在学习组装并使用教程来指导我完成学习过程。在这种情况下,我正在学习摩托罗拉 68000 对使用 VASM 编译的 Sega Genesis 进行一些编程。

采取以下sn-p:

VDP_ctrl EQU $C00004   ;VDP control, word or longword writes only
MOVE.W (VDP_ctrl),D5   ;$C00004 read VDP status (interupt acknowledge)?

了解MOVE.W 是指将 16 位 WORD 值写入寄存器(在本例中为 D5),而$C00004 是 24 位十六进制值,这怎么可能?这确实可以在 Sega 模拟器 Fusion 上编译和运行。

有关完整上下文,教程位于https://www.chibiakumas.com/68000/helloworld.php#LessonH1

继续阅读:https://www.amazon.com/gp/product/B08W7DWZB3

【问题讨论】:

  • 符号地址周围的括号是不需要的(一些汇编程序,包括摩托罗拉的甚至会窒息)。 m68k 程序集的设计方式是 move 始终暗示间接地址(而不是 lea

标签: assembly 68000


【解决方案1】:

这里没有处理 24 位数据。什么是24位是地址。说明

MOVE.W (VDP_ctrl),D5

正在地址 VDP_ctrl 和寄存器D5 处的字之间移动数据。

注意括号。在汇编中,这些通常用于指示间接级别。同样,(A0) 表示正在访问A0 中保存的地址的数据,而不是A0 本身的内容:

MOVEA.L D0, A0      ; Copies the contents of D0 into A0 (most assemblers accept MOVE.L)
MOVE.L  D0, (A0)    ; Copies the contents of D0 into the longword at address A0

【讨论】:

  • 这条指令将编码一个完整的 32 位绝对地址(其中可能只有 24 位相关)。
  • 哦等等,()表示间接寻址,地址指向16位值VDP_ctrl指向?
  • @ChadHarrison,是的,地址是 32 位(编码),数据传输大小(内存读取)是 16 位。
猜你喜欢
  • 2020-05-25
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多