因此,当我查找问题的答案时,我遇到了这篇文章:修改字符数组,修改部分向后显示
假设我有一个数组:
.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
请注意,我使用了上面示例中提供的加法操作员而不是减法。
希望这会有所帮助。