x64 MASM 数组修改

x64 MASM array modification

因此,当我查找问题的答案时,我遇到了这个 post: Modifying a character array, the modified part shows up backwards

假设我有一个数组:

.data
array .quad 0,0,0,0

要修改数组中的数据,我需要使用以下代码:

lea rbx, array
mov QWORD PTR[rbx], 1
mov QWORD PTR[rbx-8], 2
mov QWORD PTR[rbx-16], 3
mov QWORD PTR[rbx-24], 4

如果这是正确的,它会产生 1, 2, 3, 4 吗?

Endianness,多字节数据类型中的字节顺序,对于汇编语言初学者来说是一个很难理解的概念。

移动多字节数据类型时(双字四字 ) 到内存地址中,处理器以提供的字节的相反顺序存储该地址。这样在存储数据时:

mov     qword ptr [rbx], 1      ;provided      00 00 00 00 00 00 00 01h
                                ;stored as     01 00 00 00 00 00 00 00h

对于数据的检索:

mov     rax, qword ptr [rbx]    ;provided      01 00 00 00 00 00 00 00h
                                ;retrieved as  00 00 00 00 00 00 00 01h

但是,当每个单独的byte手动保存时,结果对应代码的样子。

mov     byte ptr [rbx], 1
mov     byte ptr [rbx+1], 2
mov     byte ptr [rbx+2], 3
mov     byte ptr [rbx+3], 4

                                ;stored as     01 02 03 04h

为了回答您的问题,quadwords 的用法为:

mov     qword ptr [rbx], 1
mov     qword ptr [rbx+8], 2
mov     qword ptr [rbx+16], 3
mov     qword ptr [rbx+24], 4

                                ;stored as     01 00 00 00 00 00 00 00h
                                               02 00 00 00 00 00 00 00h
                                               03 00 00 00 00 00 00 00h
                                               04 00 00 00 00 00 00 00h

请注意,我使用了加法运算符而不是上面示例中提供的减法。

希望对您有所帮助。