X64 MASM阵列修改



因此,当我查找问题的答案时,我遇到了这篇文章:修改字符数组,修改部分向后显示

假设我有一个数组:

.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(多字节数据类型中的字节顺序)是汇编语言中初学者的困难概念。

当您将多字节数据类型( Word double Word QuadWord )移至内存地址,处理器存储该地址,请以字节的相反顺序提供。因此在数据存储中:

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

请注意,我使用了上面示例中提供的加法操作员而不是减法。

希望这会有所帮助。

最新更新