2014-09-28 118 views
0

我正在UNIX中爲分配重新創建diff函數。我只需檢查一行是否已更改,未添加或刪除。我們被允許通過在代碼中創建這些字符串來插入字符串(而不是從.txt文件或從終端讀取)。我被困在閱讀已更改的行。我所取得的是確定哪個角色已經改變。我怎樣才能讓我的程序比較字符串逐行?逐行讀取字符串X86 64

我現在代碼:

.text 
    Waar: .asciz "Gelijk \n" 
    NWaar: .asciz "Niet gelijk %d\n" 
    String1: .asciz "abcd\nefgh" 
    String2: .asciz "abcd\neagh" 

.global main 

    main: 


     movq $String1, %rsi 
     movq $String2, %rdi 
     movq $8, %rcx 
     movq $1, %r8 
     cld 
     loop: 
      cmpsb 
      jne  False 
      incq %r8 
      jmp loop 
     end: 

     movq $0, %rax 
     movq $Waar, %rdi 
     call printf 
     call exit 

    False: 
     movq $NWaar, %rdi 
     movq %r8, %rsi 
     movq $0, %rax 
     call printf 
     call exit 

    Exit: 
     movq $0, %rdi 

回答

0

你應該先寫你的代碼在一個更高層次的語言,然後翻譯成組裝。你可能會喜歡的東西開始:

int lines_are_equal(char const *a, char const *b) 
{ 
    while (*a&&*b)    //until zero-terminated... 
    { 
     if (*a != *b)   //or the two strings differ... 
     { 
      return 0;   //return false if different 
     } 
     if (*a == '\n')   //if newline is encountered 
     { 
      break;    //break to return true 
     } 
     a++;      //loop until end of string or 
     b++;      //end of line 
    } 
return 1;      //if end of string or end of line is encountered 
           //before strings differ, return true. 
} 

你可能還需要一個跳到下一行開頭的函數,對下一行調用lines_are_equal() ...