- 论坛徽章:
- 2
|
回复 #1 jeanlove 的帖子
int f(void) {
return *(int*)1212;
}
_f:
push ebp
mov ebp, esp
pop ebp
mov eax, DWORD PTR ds:1212 ; 这个算间接寻址吗?
ret
int f(void) {
int a[] = {1212,326,86};
int sum = 0,i;
for (i=0;i<(int)(sizeof(a)/sizeof(a[0]));++i)
sum += a[ i ];
return sum;
}
_f:
push ebp
xor eax, eax
mov ebp, esp
xor edx, edx
sub esp, 24
mov DWORD PTR [ebp-24], 1212 ; 这3个算基址寻址吗?
mov DWORD PTR [ebp-20], 326
mov DWORD PTR [ebp-16], 86
.p2align 4,,15
L5:
mov ecx, DWORD PTR [ebp-24+edx*4] ; 这个算不算变址?
inc edx
add eax, ecx
cmp edx, 2
jle L5
leave
ret
原帖由 jeanlove 于 2009-7-27 22:38 发表 ![]()
还有就是现在的CPU还需要像8086那样采用段寻址吗?
在保护模式中,段的含义已经变了。 |
|