我寫了一個簡單的程序,它將一個預定義的數字轉換爲預定義的權力並返回結果。它在NASM彙編中,用於Linux。我一直試圖讓我的頭在如何使用堆棧來傳遞函數的變量,並希望確保我做到了這一點。它返回正確的數字,但我不知道它是否正確:這是將變量傳遞給堆棧的正確方法嗎?
section .text
global _start
_start:
push dword 3 ;(power)
push dword 2 ;(num)
call power
mov ebx, eax
mov eax, 1
int 0x80
power:
push ebp
mov ebp, esp
sub esp, 8 ;reserve space for two local vars
push dword [ebp+8]
pop dword [ebp-4] ;store original num as a local var
push dword [ebp+12]
pop dword [ebp-8] ;store power in a local counter var
dec dword [ebp-8]
mov eax, [ebp-4] ;store original num in eax (current val)
jmp power_loop
power_loop:
imul eax, dword [ebp-4] ;multiply current val by original num
dec dword [ebp-8] ;decrement counter
cmp dword [ebp-8], 0
jne power_loop
mov esp, ebp ;restore stack pointer
pop ebp
ret
任何意見將不勝感激!
如果我不准問,什麼是寫彙編語言,看起來儘可能像它出來一個C編譯器的點(其優化關閉,在那個)?使用寄存器! – 2011-04-06 03:18:05
我知道我本來可以使用寄存器,但我想學會裝配以獲得樂趣 - 這只是一個練習,學習如何使用堆棧傳遞參數。 – user693861 2011-04-07 04:16:06
使用堆棧傳遞參數是有些可以接受的(當與C代碼等接口時是必需的),但在完全不必要的情況下在堆棧上創建局部變量是一個完全不同的故事(無論如何)。 – 2011-04-07 04:18:16