
汇编 一段 选择排序 的代码,疑惑!!
_asm{LOOP1:cmpi,N;jgeLOOP1_BREAK;movebx,i;moveax,1;moveax,a[ebx];//为什么给eax赋值eax却不是1呢?...
_asm{
LOOP1:
cmp i, N;
jge LOOP1_BREAK;
mov ebx, i;
mov eax, 1;
mov eax, a[ebx];//为什么给eax赋值eax却不是1呢?
mov key, eax;
mov ecx, i;
dec ecx;
lea esi, a[ecx];
LOOP2:
mov eax, [esi];
cmp eax, key;
jle LOOP2_BREAK;
cmp ecx, 0;
jl LOOP2_BREAK;
lea edi, [esi];
add edi, 4;
mov eax, [edi];
mov eax, [esi];
sub esi, 4;
jmp LOOP2;
LOOP2_BREAK:
// a[j+1] = key;
lea edi, [esi];
add edi, 4;
mov eax, [edi];
mov eax, [esi];
// loop1
inc i;
jmp LOOP1;
LOOP1_BREAK:
} 展开
LOOP1:
cmp i, N;
jge LOOP1_BREAK;
mov ebx, i;
mov eax, 1;
mov eax, a[ebx];//为什么给eax赋值eax却不是1呢?
mov key, eax;
mov ecx, i;
dec ecx;
lea esi, a[ecx];
LOOP2:
mov eax, [esi];
cmp eax, key;
jle LOOP2_BREAK;
cmp ecx, 0;
jl LOOP2_BREAK;
lea edi, [esi];
add edi, 4;
mov eax, [edi];
mov eax, [esi];
sub esi, 4;
jmp LOOP2;
LOOP2_BREAK:
// a[j+1] = key;
lea edi, [esi];
add edi, 4;
mov eax, [edi];
mov eax, [esi];
// loop1
inc i;
jmp LOOP1;
LOOP1_BREAK:
} 展开
1个回答
展开全部
这个是插入排序吧
两处的:
mov eax, [edi];
mov eax, [esi];
有错吧。
mov eax, a[ebx];//为什么给eax赋值eax却不是1呢?
mov key, eax;
这里相当于key = eax = a[ebx] = a[i];
两处的:
mov eax, [edi];
mov eax, [esi];
有错吧。
mov eax, a[ebx];//为什么给eax赋值eax却不是1呢?
mov key, eax;
这里相当于key = eax = a[ebx] = a[i];
追问
那
mov eax, a[ebx];//为什么给eax赋值eax却不是1呢?
mov key, eax;
当i=1的时候为什么给key赋值不是1呢?
mov eax, a[ebx]; // ebx = 1的时候
为什么这一步会不能顺利赋值为1??
单步调试看到的是16777216
追答
mov eax, a[ebx]是将地址为(a+ebx)处的内容赋值给eax,除非内存地址为(a+1)处的数值恰巧为1,否则eax不可能赋值为1。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询