汇编中的数据类型
- ascii 文本字符串
- asciz 以空字符结尾的字符串
- byte 字节值
- double 双精度浮点值
- float 单精度浮点值
- int 32 32位整数
- long 32 32位整数,和int相同
- octa 16字节整数
- quad 8字节整数
- short 16位整数
- single 单精度浮点数(与float相同)
汇编中c语言数组和结构体的表示方法与访问
数组
主要通过变址来访问
以下为仿代码
//一维数组访存
int a[5] = {"3","4","56","123"}
// 想要访问数组中第二个元素,也就是a[1];
//使用汇编表示为 movl (%edx,%eax,4),%eax
movl a,%ebx
movl 1,%eax
movl (%edx,%eax,4)
//------------二维数组--------//
int a[][5] = {{"adui"},{"yuis"},{"adja"},{"afdj"}};
//访问 a[2][];
# %ebx = 2; %ecx =0x0000;
movl (,%ebx,5),%eax //将a[2][0]值给%eax
//访问 a[2][3];
# %ebx = 2; %ecx =0x0000;
movl (,%ebx,5),%eax
%ecx = 3
movl (%eax,%ecx,4),%eax //将a[2][3]赋值给 %eax
//访问 a[][2]; 访问四组字符串的第三个元素
# %eax = 2;
movl $20 ,%ebx
movl (a,%eax,2),%eax //a[0][2]
movl (%eax,%ebx),%eax// a[1][2]
结构体
数据存储位置对齐
由于系统在内存中读取数据是根据内存块来的,所以需要对齐4,8,16Bytes,根据系统不同,就不同
x86-32或64 根据不同类型的数据长度来对齐
结构存储对齐要求
假设结构体中最大的对齐要求是k,那么结构体的大小是k*N
__结构体中元素顺序不同,对内存有所影响__
Union
union成员共享同一块大小的内存,大小由成员最大的那位,一次只能使用一个成员