這是一個家庭作業,如果任何人的好奇。選擇排序在x86彙編
任務是讓C程序創建一個二維數組並將該數組傳遞到程序集中,然後使用選擇排序來對其進行排序。
我試圖運行它時出現的錯誤是分段錯誤。我試過了
push tesst
push sout
call printf
在終端窗口打印出「測試」,但我找不出它來自哪裏。我也試過在「輸入0,0」之後放正確,而且我還沒有得到一份測試結果。所以我完全不知道我在哪裏得到分段錯誤。
任何援助將非常感激。 :(由於明天晚上,我一直停留在這幾天的。有人提供一些線索,請
克里斯
的代碼將低於
我的C程序
#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
謝謝比較()中的問題我甚至不知道現在回合gdb。我說女巫的手藝! :P非常感謝 – user1029072
注意到並修復了。再次感謝 – user1029072