我想在Assembly中创建一个4元素数组:
; Create an array of 4 elements
push BYTE 'a'
push BYTE 'b'
push BYTE 'c'
push BYTE 'd'
我想到了数组以相反的顺序存储在C / C ++中(第一个元素的内存地址最低,最后一个元素的内存地址最高),所以为了确保我的假设是正确的,我做了以下测试:
#include <stdio.h>
int main()
{
char arr[4] = {'a', 'b', 'c', 'd'};
printf("Address: %d Value: %c\n", arr + 0, *(arr + 0));
printf("Address: %d Value: %c\n", arr + 1, *(arr + 1));
printf("Address: %d Value: %c\n", arr + 2, *(arr + 2));
printf("Address: %d Value: %c\n", arr + 3, *(arr + 3));
return 0;
}
输出结果符合预期:
Address: 3603656 Value: a
Address: 3603657 Value: b
Address: 3603658 Value: c
Address: 3603659 Value: d
这是否意味着我应该像这样在Assembly中创建数组:
; Create an array of 4 elements
push BYTE 'd'
push BYTE 'c'
push BYTE 'b'
push BYTE 'a'
并假设它的第一个元素是&#39; a&#39;的地址。或者像以前一样没有问题而不是递增1来到下一个元素我只减1?
修改: 我的意思是相对于堆栈(向下增长)的反向顺序。
答案 0 :(得分:0)
你不是在这里创建数组。 PUSH和POP是针对堆栈执行的,堆栈的通用规则是: Last in First out 。
如果要创建数组,则只需使用系列mov
命令:
mov <mem>,<const> // x86 instruction
或使用数据定义指令
Array DW 'a', 'b', 'c', 'd'