Это домашнее задание, если кому-то интересно.
Задача состоит в том, чтобы программа на C создала двумерный массив и передала этот массив в сборку, которую нужно отсортировать с помощью сортировки выбора.
Ошибка, возникающая при попытке запуска, является ошибкой сегментации.Я попытался поместить
push tesst
push sout
call printf
, чтобы распечатать "тест" в окне терминала, но я не мог понять, откуда он идет.Я также попытался поставить его сразу после «введите 0,0», и я до сих пор не получил отпечаток из теста.Так что у меня совершенно нет идей относительно того, где я получаю ошибку сегментации.
Любая помощь будет принята с благодарностью.:( Завтра вечером, и я застрял в этом пару дней. Кто-нибудь пролил немного света, пожалуйста
-Chris
Коды будут ниже
myc программа
#include <stdio.h>
int ssort(char * hi[], int x, int y);
int main(){
int i, j;
char hi[3][5] = {"Yoshi", "Annie", "Chris"};
printf("Display Unsorted Strings\n");
for(i = 0; i < 3; i++){
for(j = 0; j < 5; j++){
printf("%c", hi[i][j]);
}
printf("\n");
}
printf("It Got Here\n");
ssort((char*)hi, 5, 3);
printf("Sorted\n");
for(i = 0; i < 3; i++){
for(j = 0; j < 5; j++){
printf("%c", hi[i][j]);
}
printf("\n");
}
}
и мой код сборки
extern printf
segment .data
tesst db 't','e','s','t',0
sout db "%s", 10, 0
segment .text
global ssort
ssort:
enter 0,0
;;; for(i = 0; i < namecount; i++){
;;; for(j = 1; j < namecount; j++){
;;; if(array[i] < array[j])
;;; do nothing
;;; else
;;; swap
;;; }
;;; }
mov esi, [ebp+8]
mov edi, esi
add edi, [ebp+8]
mov ecx, 0 ;i
mov edx, 0
add edx, 1 ;j
;; [ebp+16] = namecount
iloop:
push esi
cmp ecx, [ebp+16]
je done_sorting
jloop:
cmp edx, [ebp+16]
je j_done
;;; compare here now
compare:
mov al, [esi]
mov bl, [edi]
cmp al, bl
jg alisbigger
jl blisbigger
inc esi
inc edi
jmp compare
alisbigger:
jmp swap
blisbigger:
jmp done
swap:
mov ebx, 0
mov ebx, [ebp+12]
swap_loop:
dec ebx
mov al, [esi]
mov bl, [edi]
mov [esi], bl
mov [edi], al
inc esi
inc edi
cmp ebx, 0
je done
jmp swap_loop
done:
inc edx
jmp jloop
j_done:
add ecx, 1
add esi, [ebp+12]
mov edx, 1
jmp iloop
done_sorting:
leave
ret