2011-10-13 2 views
2

그래서 잠시 동안 지금까지 해왔으므로 알아낼 수 없습니다. MIPS에 C 삽입 정렬을 번역하여 문자열 목록을 정렬합니다.C를 MIPS 어셈블리로 변환

void insertSort(char *a[], size_t length) { 

int i, j; 

for(i = 1; i < length; i++) { 
    char *value = a[i]; 
    for (j = i-1; j >= 0 && str_lt(value, a[j]); j--) { 
     a[j+1] = a[j]; 
    } 
    a[j+1] = value; 
} 
} 

여기에, 나는 5 각 문자열을 정렬의 전면을 통과 내가 배열을 만들려면 내 MIPS의 어셈블리가 있습니다 : 여기에서 중요한 C 코드 (. str_lt는 두 문자열 String_lessthan을 비교)입니다 $ A2로 배열 : 그것은 배열을 재 배열, 또는 아마도 내가 그냥 잘못 번역 할 때

그것은 내가 받았던 C 알고리즘처럼 보인다
insertSort: 
    subu $sp, $sp, 32 
    sw $ra, 20($sp) 
    sw $fp, 16($sp) 
    li $t2, 0 
    addi $t2, $t2, 1 #t2 = i 
    move $t6, $a2  #t6 = value 

loop1: 
    bge $t2, 16, endloop1 
    subi $t3, $t2, 1 #t3 = j 
    la $t7, -32($t6) #t7 = a[j] 
loop2: 
    bltz $t3, endloop2 
    move $a0, $t6 
    move $a1, $t7 
    jal str_lt 
    beqz $v0, endloop2 
    lw $t0, 0($t7) 
    sw $t0, 32($t7) 
    subi $t3, $t3 1 
    subi $t7, $t7 32 
    b loop2 


endloop2: 
    lw $t0, 0($t6) 
    sw $t0, 0($t7) 

    addi $t2, $t2, 1 
    addi $t6, $t6, 32 
    b loop1 

endloop1:lw $ra, 20($sp) 
    lw $fp, 16($sp) 
    addiu $sp, $sp, 32 
    jr $ra 

어떤 값을 덮어 씁니다.

+1

코드 조각을 컴파일하고 어셈블리를 추출하는 방법은 무엇입니까? – tangrs

+2

@tangrs 할당의 요점은'gcc '를 사용하는 법을 배우는 것이 아니라 어셈블리를 작성하는 것이다. – brc

답변

0

당신은 옵션 GCC와 "GCC main.c의 -S"

  1. 컴파일
  2. 파일에 코드를 넣어 "main.c의"라는 이름의 파일을 만듭니다 -S 수 있습니다

"main.s"라는 폴더에 새 파일이 만들어집니다.이 파일에는 어셈블리 코드가 있습니다.