爲了解決這個問題,我理解C語言,並且我仍然是Assembly中的初學者,所以我在這裏遇到了一些問題。彙編,多個參數-m32/linux(與C語言中的stdarg相同)
我有一些麻煩,採取多個參數,也許計數他們,如果我應該這樣做,並在我的彙編代碼中使用格式參數。
嘗試將一些字節添加到具有多個參數的字符串中。我知道如何將兩個第一個參數放在堆棧上,但第一個參數之後的其他參數是格式(如%s,%d,%c等),第一個參數是應該是變量i的格式想寫信給。 在C中,標準main有自變量。我可能想在這裏數論證論點!?我該怎麼做,如果這是如何做到的?
.globl minisprintf
# Name: minisprintf
# Synopsis: A simplified sprintf
# C-signature: int minisprintf(unsigned char *res, unsigned char *format, ...);
# Registers: AL: for characters
# %ECX: first argument, res
# %EDX: second argument, args
#
minisprintf: # minisprintf
pushl %ebp # start of
movl %esp, %ebp # function
movl 8(%ebp), %ecx # first argument
movl 12(%ebp), %edx # second argument
# other arguments
# checking last byte of string res
我讀了一點。似乎我不能使用寄存器作爲參數。無法找到如何去做。希望這不是太多的代碼。如果有很多論點,我不應該把它們放在寄存器裏嗎? – 2013-05-05 14:50:48
如果我知道這個函數能夠使用多少個參數,那就太好了,但現在我需要確保它至少需要兩個參數,最多可以有無數個參數。 – 2013-05-05 14:56:21
@KimJonatanWesselBjørneset,函數調用的寄存器和堆棧的使用由您的ABI /過程調用標準定義。如果你正在發明自己的ABI,你可以做任何你想做的事情。但請記住,您的寄存器數量有限,因此您可能需要某種方式將額外功能添加到堆棧中。 – 2013-05-05 15:01:32