汇编语言 C语言混合编程。实现冒泡排序
#include<stdio.h>
int main(void)
{
int i;
int a[]={5,-8,9,4,1};
void sort(int *p);
sort(a);
for (i = 0; i <= 4; i++)
{
printf("\t%d", a[i]);
}
printf("\n");
return 0;
}
void sort(int *p)
{
int n=5;
_asm
{
pushad//寄存器入栈
mov ebx,p//此处注意,刚开始我使用的是lea指令,lea指令是取操作数的有效地址,但是p本来就是地址,所以用mov指令。
mov ecx,n//循环次数
dec ecx//冒泡排序 外循环循环n-1次 内存循环 次数:n-1-外层循环的当前循环次数
loop1:
mov edx,ecx//暂存外层循环次数
mov esi,0//esi清0
loop2:
mov eax,[ebx+esi]//将当前数据给eax
cmp eax,[ebx+esi+4]//当前数据与下一个数据比较
jge next//如果当前数据大于等于下一个 则跳转下一个
xchg eax,[ebx+esi+4]//如果当前数据小于下一个数据,则数据交换,先将eax中的数据与下一个数据交换
mov [ebx+esi],eax//再将eax中的数据给当前数据内存单元
next:
add esi,4//移动
loop loop2
mov ecx,edx//恢复外层循环计数器
loop loop1
popad
}
}