我對彙編編程非常陌生,我在C中編寫了一個函數,需要在彙編中調用另一個函數。看起來寄存器想要返回四個字符(字節)而不是一個,這正是我想要的。彙編程序和C編程linux -m32(從彙編程序中的寄存器中的字符字節)
忽略跳轉後的代碼,因爲我只跳過這部分代碼,直到我正確地工作。
這實際上應該是我自己的簡化版本sprintf
的一部分在C 我刪除了一些我的代碼只是爲了讓事情工作。它應該返回第一個參數%
。所以,當我稱之爲C本彙編功能,我可以寫(在這個例子中或%c
)printf("%s", res);
和它打印%
:
.globl printpercent
# Name: printpercent
# Synopsis: A simplified sprintf
# C-signature: int printpercent(unsigned char *res, unsigned char *format, ...);
# Registers: %eax: first argument
# %ebx: second argument
printpercent: # sprinter
pushl %ebp # start of
movl %esp, %ebp # function
movl 8(%ebp), %eax # first argument
movl 12(%ebp), %ebx # second argument
loop:
movb $37, %bl # lowest bits to %
movb %bl, %al
jmp exit
movb (%ebx), %dl #
cmp $0, %dl # Check if 0
je exit # if 0 -> exit
cmp $37, %dl # Check '%'
movb %dl, (%eax) # if it doesnt equal any above/or default
# add to register %eax
jmp loop # jump back to the start of the loop
exit:
popl %ebp # popping standard end of function
# 0-byte ?
ret # return
感謝,我想我現在解決它:) – 2013-05-05 14:33:14