2017-03-03 259 views
-1

我使用的是窗口7,不知道如何編譯這個彙編代碼。我是否需要手動計算?我想知道更快的方法或希望知道如何一行一行地計算。我需要rax的最終價值。如何編譯64位彙編代碼

start: 
mov $1020, %rax 
mov $4090, %rbx 
mov $2044, %rcx 
xor %rdx, %rdx 
sub %rcx, %rbx 
cmp %rbx, %rax 
jge loopa 
jmp loopb 
loopa: 
cmp $4, %rdx 
jg end 
inc %rdx 
loopb: 
xchg %rax, %rbx 
idiv %rbx 
add %rdx, %rax 
imul %rcx 
jmp loopa 
end: 

回答

2

考慮到這是在& T語法,你可能想asld從MinGW的工具鏈,你可以用它來生成可執行出於此。

您需要在開始添加一些額外的樣板導出的入口點的符號,並告訴鏈接的功能進入.text段:

.text 
.global start 

然後你就可以組裝文件和鏈接它:

as filename.as -o filename.o 
ld filename.o -e start -o output.exe 

-e選項告訴鏈接器什麼函數將是可執行文件的入口點。

(我測試了在Linux上,但語法應該在Windows上的MinGW的工具鏈相同)

現在,您的裝配功能不執行任何IO,甚至不正確終止,因此如果你運行你的可執行文件,你可能會得到一個段錯誤。你必須將它運行到調試器中,在函數結尾處添加一個斷點,並在執行到達時檢查rax

另一種方法是將代碼嵌入到asm塊中,並將其嵌入到C文件中,然後在C中執行IO。但是,如果您沒有安裝任何工具鏈,則可能手動更快地產生結果。

+0

任何關於編譯一步一步的教程。 –

+2

@MinKoKo請求非現場資源,如教程,是脫離主題。爲此使用Google。 –

+0

downvoter的頭腦會解釋嗎? –