当前位置:文档之家› 汇编排序

汇编排序

汇编排序
汇编排序

一.实验题目:求有符号数组中的最大和最小值,给数组中的值排序(从大到小)二.程序内容及结果

1.求有符号数组中的最大和最小值

#include

#include

int main()

{

int buffer[10]={12,10,9,100,134,259,1000,1456,-234,-3456};

int max;//用来保存最大值

int min;//用来保存最小值

_asm

{

LEA ESI,buffer//数组的首地址付给ESI

MOV EAX,[ESI]//用EAX始终储存数组中的最大值

MOV EDX,[ESI]//用EDX始终储存数组中的最小值

MOV CX,10//CX为计数器,一共需要比较9次

NEXT:

DEC CX//计数器减1

JZ LABEND//如果计数器变为0,就跳转到LABEND

ADD ESI,4//buffer中的数为整形,32位,4个字节,所以指针要加4

CMP EAX,[ESI]//比较当前最大值与数组中的值得大小MIN

JGE MIN//如果当前最大值大于等于数组中的值,直接跳转

MOV EAX,[ESI]//否则,数组中的值付给EAX

JMP MIN//无条件跳转到MIN

MIN:

CMP EDX,[ESI]//比较当前最小值与数组中的值得大小

JLE NEXT//如果当前最小值小于等于数组中的值,直接跳转到NEXT

MOV EDX,[ESI]//否则,数组中的值付给EDX

JMP NEXT//无条件跳转到NEXT

LABEND:

MOV max,EAX//将最大值付给max

MOV min,EDX//将最小值付给min

}

printf("max=%d\n",max);

printf("min=%d\n",min);

return 0;

}

2.给一个数组中的值按从大到小排序

#include

#include

int main()

{

int buffer[10]={3457,-230,134,456,56,98,1340,-908,3456,40};

_asm

{

LEA ESI,buffer//数组的首地址赋给ESI

MOV EAX,[ESI]//EAX保存最小值

MOV EBX,10//计数器,外循环9次比较

MOV ECX,10//计数器,内循环比较

NEXT:

DEC EBX//计数器减1

JZ LABEND//如果计数器为0,循环结束,跳转到最后

MIDDLE:

DEC ECX//计数器减1

JZ COM//如果计数器为0,跳转到COM

ADD ESI,4//操作数为整形,32位,四个字节

CMP EAX,[ESI]//将当前最小值与数组中的值进行比较

JLE MIDDLE//如果小于等于,那么结束本次比较,进行下一个数的比较

XCHG EAX,[ESI]//否则两个数交换

JMP MIDDLE//无条件跳转

COM:

XCHG EAX,[ESI]//每次循环的最后一个数储存最小数

MOV ECX,EBX//内循环计数器与外循环计数器相等

LEA ESI,buffer//指针由数组末尾跳转到开始

JMP NEXT//无条件跳转

LABEND:

}

printf("十个数从大到小的顺序为:\n");

for(int n=0;n<10;n++)

{

printf("%d\t",buffer[n]);

}

printf("\n");

return 0;

}

相关主题
文本预览
相关文档 最新文档