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
请注意,我使用了加法运算符而不是上面示例中提供的减法。
希望对您有所帮助。
因此,当我查找问题的答案时,我遇到了这个 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
请注意,我使用了加法运算符而不是上面示例中提供的减法。
希望对您有所帮助。