汇编 一段 选择排序 的代码,疑惑!!

_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:
}
展开
 我来答
kabbin2010
2011-11-01 · 超过13用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:43.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, 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。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式