[問題] c code 直接轉換

看板ASM (組合語言)作者 (OK的啦~我都可以接受)時間17年前 (2007/12/30 18:02), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串1/1
以下是一段c code,是用來計算crc32 unsigned int crc32(const char* data, size_t length) { const unsigned int POLY = 0xEDB88320; // standard polynomial in CRC32 unsigned int reminder = 0xFFFFFFFF; // standard initial value in CRC32 for(size_t i = 0; i < length; i++) { reminder ^= (unsigned char)data[i]; // must be zero extended for(size_t bit = 0; bit < 8; bit++) if(reminder & 0x01) reminder = (reminder >> 1) ^ POLY; else reminder >>= 1; } return reminder ^ 0xFFFFFFFF; } 我將它直接轉成了intel的組語如下 .386 .model flat option casemap :none .data count DWORD ? ;用來存第一層迴圈的計數器 .code _crc32 PROC PUBLIC push ebp ; mov ebp, esp ; build stack frame ; variables in stack ; [ebp+12] data length (the second argument) ; [ebp+8] pointer to string data (the first argument) ; [ebp+4] return address ; [ebp] previous ebp ; begin CRC32 calculation ; WRITE YOUR OWN CODE HERE mov eax, 0FFFFFFFFh ; 用來存reminder mov esi, [ebp+8] ; 指向一串資料的開頭 mov ecx, [ebp+12] ; 第一層迴圈的初始化 L1: ;第一層迴圈 xor eax, [esi] ; inc esi ; 指向下一個陣列元素 mov count, ecx ; 將目前的迴圈次數存起來 mov ecx, 8 ; 第二層迴圈的初始化 L2: test eax, 1 ; 與1作& jz B1 ; 若為零則跳至B1 shr eax, 1 ; remainder >>= 1 xor eax, 0EDB88320h; reminder ^= POLY jmp B2: B1: shr eax, 1; remainder >>= 1 B2: loopd L2 ; 檢驗是否跳回L2重做 mov ecx, count ; 取回第一圈迴圈的計數器 loopd L1 ; 檢驗是否跳回L1重做 xor eax, 0FFFFFFFFh ; return reminder ^ 0xFFFFFFFF ; end CRC32 calculation leave ret _crc32 ENDP END ; file ends here 可是上傳的結果的結果卻是錯的 而且放進VC 2005 組譯的時候 會產生 LINK : error LNK2001: 無法解析的外部符號 _mainCRTStartup C:\Documents and Settings\123\My Documents\Visual Studio 2005\Projects\hw4\ Debug\hw4.exe : fatal error LNK1120: 1 個無法解析的外部符號 這兩個錯誤訊息 不知道哪個地方有問題 找很久也找不出來 希望哪位大大能幫我一把OTZ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.243.43 ※ 編輯: king19880326 來自: 140.112.243.43 (12/30 19:38) ※ 編輯: king19880326 來自: 140.112.243.43 (12/30 20:36)

01/07 09:14, , 1F
VC跟組語有關係??
01/07 09:14, 1F

01/14 00:30, , 2F
大概是嵌入式組語,你程式少了main function啊~
01/14 00:30, 2F

01/14 00:30, , 3F
加個main就能解決了,不然就編成.lib
01/14 00:30, 3F
文章代碼(AID): #17Tsp6MD (ASM)
文章代碼(AID): #17Tsp6MD (ASM)