Assembly MSP430程序集将.data节的内容移动到地址标签中的保留空间
mySelect是我创建的分配给内存位置0x3400的节。我在其中创建了14个字节的空间。我想做的是将上面声明的地址标签的所有内容(Vdata到Zdata)移动到14字节的空间。以下是我尝试过的:Assembly MSP430程序集将.data节的内容移动到地址标签中的保留空间,assembly,msp430,opcode,microprocessors,Assembly,Msp430,Opcode,Microprocessors,mySelect是我创建的分配给内存位置0x3400的节。我在其中创建了14个字节的空间。我想做的是将上面声明的地址标签的所有内容(Vdata到Zdata)移动到14字节的空间。以下是我尝试过的: .data Vdata .byte 7 Wdata .word 10,-1 Xdata .space 2 Ydata .string "BA", "BY" Zdata .word 99h
.data
Vdata .byte 7
Wdata .word 10,-1
Xdata .space 2
Ydata .string "BA", "BY"
Zdata .word 99h
.sect "mysect"
Dest .space 14
但是,它仅更新内存位置(0x3400)的开始
更新:我尝试过其他解决方案,但不起作用。我想知道是否有人有关于如何执行我需要执行的操作的代码(将地址标签中的所有值移动到mysect部分的空白处)。您每次都使用相同的存储地址,所以这应该不会令人惊讶。使用Dest+1、Dest+3等。如果MSP430关心对齐,则对所有这些字节执行mov.w,而不关心这两个字节是否来自一个对象。(如果
.data
是常量,请使用mov immediate而不是内存副本。除非将地址存储为immediate?)如果读取这些mov
指令,则目标端始终是Dest
。它每次都将源值写入同一个位置,这听起来应该是合乎逻辑的。另外,您正在复制b+w+w+w+w数据,它只有9个字节(若字是16位,我猜是这样)。机器代码和CPU看不到您的源代码,因此它不知道在Wdata
标签之后定义了多少数据,而且它应该复制两个单词而不是一个,您必须这样编写代码。在V和W之间也可能有自动填充,以使单词对齐。检查一些可能的列表/反汇编,以了解.data
内存的外观,以及.word
指令是否对齐数据,因此编译后的.data
段应视为(十六进制字节):07 00 0A 00 FF 00 00 42 42 42 59 99 00
(14字节)您每次都使用相同的存储地址,所以这不应该是一个惊喜。使用Dest+1、Dest+3等。如果MSP430关心对齐,则对所有这些字节执行mov.w,而不关心这两个字节是否来自一个对象。(如果.data
是常量,请使用mov immediate而不是内存副本。除非将地址存储为immediate?)如果读取这些mov
指令,则目标端始终是Dest
。它每次都将源值写入同一个位置,这听起来应该是合乎逻辑的。另外,您正在复制b+w+w+w+w数据,它只有9个字节(若字是16位,我猜是这样)。机器代码和CPU看不到您的源代码,因此它不知道在Wdata
标签之后定义了多少数据,而且它应该复制两个单词而不是一个,您必须这样编写代码。在V和W之间也可能有自动填充,以使单词对齐。检查一些可能的列表/反汇编,以了解.data
内存的外观以及.word
指令是否对齐数据,因此编译后的.data
段应视为(十六进制字节):07 00 0A 00 FF 00 42 42 42 59 99 00
(14字节)
mov.b Vdata, Dest
mov.w Wdata, Dest
mov.w Xdata, Dest
mov.w Ydata, Dest
mov.w Zdata, Dest