Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly MSP430程序集将.data节的内容移动到地址标签中的保留空间_Assembly_Msp430_Opcode_Microprocessors - Fatal编程技术网

Assembly MSP430程序集将.data节的内容移动到地址标签中的保留空间

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

mySelect是我创建的分配给内存位置0x3400的节。我在其中创建了14个字节的空间。我想做的是将上面声明的地址标签的所有内容(Vdata到Zdata)移动到14字节的空间。以下是我尝试过的:

            .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