MOVE.W 一个 24 位值怎么可能?
How is it possible to MOVE.W a 24-Bit value?
我正在学习汇编并使用教程来指导我完成学习过程。在这种情况下,我正在学习摩托罗拉68000在使用VASM编译的Sega Genesis上进行一些编程。
采用以下片段:
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
这里没有处理 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
我正在学习汇编并使用教程来指导我完成学习过程。在这种情况下,我正在学习摩托罗拉68000在使用VASM编译的Sega Genesis上进行一些编程。
采用以下片段:
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
这里没有处理 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