网上可供参考的x86汇编语言代码确实很少,所以我在写归并排序时也经历了不小的“磨难”~
首先献上我的归并排序.c,这样一来,写出x86版本的归并排序就只用翻译c语言为汇编语言了(虽然这样也需要不小的工作量
#include <stdio.h>
void mergerArray(int p, int mid, int q, int start, int end, int arr[], int T[])
{
int i = start;
while(p<=mid && q<=end){
if(arr[p] <= arr[q])
T[i++] = arr[p++];
else{
T[i++] = arr[q++];
}
}
while(p<=mid){
T[i++] = arr[p++];
}
while(q<=end){
T[i++] = arr[q++];
}
for(i=start; i<=end;i++){
arr[i] = T[i];
}
}
void mergerSort(int arr[], int start, int end, int T[])
{
if(end>start){
int mid = (end+start)/2;
int p = start;
int q = mid + 1;
mergerSort(arr, start, mid , T);
mergerSort(arr, mid+1, end, T);
mergerArray(p, mid, q, start, end, arr, T);
}
}
接下来,完成showdecs函数进而完成归并排序函数
[1] (showdecs.asm)把一组8位二进制数(无符号数)转换为十进制数并显示出来,实现后截屏。
运行截屏:
;msort.asm
data segment
nums1 db 100,34,78,9,160,200,90,65
data ends
code segment
assume cs:code
start:
mov ax,data
mov ds,ax
mov es,ax
mov bx,off